diff options
author | Ove Murberg Henriksen <sorayasilvermoon@hotmail.com> | 2012-06-17 08:14:44 +0400 |
---|---|---|
committer | Ove Murberg Henriksen <sorayasilvermoon@hotmail.com> | 2012-06-17 08:14:44 +0400 |
commit | bf3d0ca8dad529e5ca25550c3c31c055c76084ff (patch) | |
tree | 1bbfed87f441b899b5cd5bb89ef9d336dd6eb06a /source/blender/editors | |
parent | 9d32423f3e695f8bdd5a0d1b032b5e822613977a (diff) | |
parent | 0df30d1063cc185770451b3b2ebf3fcd0341c642 (diff) |
svn merge ^/trunk/blender -r47023:HEAD
Diffstat (limited to 'source/blender/editors')
190 files changed, 25638 insertions, 16869 deletions
diff --git a/source/blender/editors/CMakeLists.txt b/source/blender/editors/CMakeLists.txt index 088376b20ef..67ed77bcc4b 100644 --- a/source/blender/editors/CMakeLists.txt +++ b/source/blender/editors/CMakeLists.txt @@ -24,6 +24,7 @@ if(WITH_BLENDER) add_subdirectory(curve) add_subdirectory(gpencil) add_subdirectory(interface) + add_subdirectory(mask) add_subdirectory(mesh) add_subdirectory(metaball) add_subdirectory(object) diff --git a/source/blender/editors/SConscript b/source/blender/editors/SConscript index ed66a76a324..d08b496f0ef 100644 --- a/source/blender/editors/SConscript +++ b/source/blender/editors/SConscript @@ -8,6 +8,7 @@ SConscript(['datafiles/SConscript', 'interface/SConscript', 'animation/SConscript', 'armature/SConscript', + 'mask/SConscript', 'mesh/SConscript', 'metaball/SConscript', 'object/SConscript', diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c index c4fca2d4ea5..f6b301c4594 100644 --- a/source/blender/editors/animation/anim_channels_defines.c +++ b/source/blender/editors/animation/anim_channels_defines.c @@ -54,6 +54,7 @@ #include "DNA_world_types.h" #include "DNA_gpencil_types.h" #include "DNA_speaker_types.h" +#include "DNA_mask_types.h" #include "RNA_access.h" @@ -395,11 +396,8 @@ static short acf_generic_dataexpand_setting_valid(bAnimContext *ac, bAnimListEle /* get backdrop color for summary widget */ static void acf_summary_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) { - // FIXME: hardcoded color - same as the 'action' line in NLA - // reddish color - r_color[0] = 0.8f; - r_color[1] = 0.2f; - r_color[2] = 0.0f; + /* reddish color - same as the 'action' line in NLA */ + UI_GetThemeColor3fv(TH_ANIM_ACTIVE, r_color); } /* backdrop for summary widget */ @@ -850,7 +848,7 @@ static int acf_group_setting_flag(bAnimContext *ac, int setting, short *neg) return AGRP_MUTED; case ACHANNEL_SETTING_PROTECT: /* protected */ - // *neg= 1; - if we change this to edtiability + // *neg = 1; - if we change this to edtiability return AGRP_PROTECTED; case ACHANNEL_SETTING_VISIBLE: /* visiblity - graph editor */ @@ -938,7 +936,7 @@ static int acf_fcurve_setting_flag(bAnimContext *UNUSED(ac), int setting, short return FCURVE_MUTED; case ACHANNEL_SETTING_PROTECT: /* protected */ - // *neg= 1; - if we change this to edtiability + // *neg = 1; - if we change this to edtiability return FCURVE_PROTECTED; case ACHANNEL_SETTING_VISIBLE: /* visiblity - graph editor */ @@ -2483,7 +2481,7 @@ static int acf_gpl_setting_flag(bAnimContext *UNUSED(ac), int setting, short *ne return GP_LAYER_HIDE; case ACHANNEL_SETTING_PROTECT: /* protected */ - // *neg= 1; - if we change this to edtiability + // *neg = 1; - if we change this to edtiability return GP_LAYER_LOCKED; default: /* unsupported */ @@ -2519,6 +2517,172 @@ static bAnimChannelType ACF_GPL = acf_gpl_setting_ptr /* pointer for setting */ }; + +/* Mask Datablock ------------------------------------------- */ + +/* get backdrop color for mask datablock widget */ +static void acf_mask_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) +{ + /* these are ID-blocks, but not exactly standalone... */ + UI_GetThemeColorShade3fv(TH_DOPESHEET_CHANNELSUBOB, 20, r_color); +} + +// TODO: just get this from RNA? +static int acf_mask_icon(bAnimListElem *UNUSED(ale)) +{ + return ICON_GREASEPENCIL; // MASK_TODO - need real icon +} + +/* check if some setting exists for this channel */ +static short acf_mask_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), int setting) +{ + switch (setting) { + /* only select and expand supported */ + case ACHANNEL_SETTING_SELECT: + case ACHANNEL_SETTING_EXPAND: + return 1; + + default: + return 0; + } +} + +/* get the appropriate flag(s) for the setting when it is valid */ +static int acf_mask_setting_flag(bAnimContext *UNUSED(ac), int setting, short *neg) +{ + /* clear extra return data first */ + *neg = 0; + + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return AGRP_SELECTED; + + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return MASK_ANIMF_EXPAND; + } + + /* this shouldn't happen */ + return 0; +} + +/* get pointer to the setting */ +static void *acf_mask_setting_ptr(bAnimListElem *ale, int UNUSED(setting), short *type) +{ + Mask *mask = (Mask *)ale->data; + + /* all flags are just in mask->flag for now... */ + return GET_ACF_FLAG_PTR(mask->flag, type); +} + +/* mask datablock type define */ +static bAnimChannelType ACF_MASKDATA = +{ + "Mask Datablock", /* type name */ + + acf_mask_color, /* backdrop color */ + acf_group_backdrop, /* backdrop */ + acf_generic_indention_0, /* indent level */ + acf_generic_group_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idfill_nameprop, /* name prop */ + acf_mask_icon, /* icon */ + + acf_mask_setting_valid, /* has setting */ + acf_mask_setting_flag, /* flag for setting */ + acf_mask_setting_ptr /* pointer for setting */ +}; + +/* Mask Layer ------------------------------------------- */ + +/* name for grease pencil layer entries */ +static void acf_masklay_name(bAnimListElem *ale, char *name) +{ + MaskLayer *masklay = (MaskLayer *)ale->data; + + if (masklay && name) + BLI_strncpy(name, masklay->name, ANIM_CHAN_NAME_SIZE); +} + +/* name property for grease pencil layer entries */ +static short acf_masklay_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) +{ + if (ale->data) { + RNA_pointer_create(ale->id, &RNA_MaskLayer, ale->data, ptr); + *prop = RNA_struct_name_property(ptr->type); + + return (*prop != NULL); + } + + return 0; +} + +/* check if some setting exists for this channel */ +static short acf_masklay_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), int setting) +{ + switch (setting) { + /* unsupported */ + case ACHANNEL_SETTING_EXPAND: /* mask layers are more like F-Curves than groups */ + case ACHANNEL_SETTING_VISIBLE: /* graph editor only */ + return 0; + + /* always available */ + default: + return 1; + } +} + +/* get the appropriate flag(s) for the setting when it is valid */ +static int acf_masklay_setting_flag(bAnimContext *UNUSED(ac), int setting, short *neg) +{ + /* clear extra return data first */ + *neg = 0; + + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return MASK_LAYERFLAG_SELECT; + +// case ACHANNEL_SETTING_MUTE: /* muted */ +// return GP_LAYER_HIDE; + + case ACHANNEL_SETTING_PROTECT: /* protected */ + // *neg = 1; - if we change this to edtiability + return MASK_LAYERFLAG_LOCKED; + + default: /* unsupported */ + return 0; + } +} + +/* get pointer to the setting */ +static void *acf_masklay_setting_ptr(bAnimListElem *ale, int UNUSED(setting), short *type) +{ + MaskLayer *masklay = (MaskLayer *)ale->data; + + /* all flags are just in agrp->flag for now... */ + return GET_ACF_FLAG_PTR(masklay->flag, type); +} + +/* grease pencil layer type define */ +static bAnimChannelType ACF_MASKLAYER = +{ + "Mask Layer", /* type name */ + + acf_generic_channel_color, /* backdrop color */ + acf_generic_channel_backdrop, /* backdrop */ + acf_generic_indention_flexible, /* indent level */ + acf_generic_group_offset, /* offset */ + + acf_masklay_name, /* name */ + acf_masklay_name_prop, /* name prop */ + NULL, /* icon */ + + acf_masklay_setting_valid, /* has setting */ + acf_masklay_setting_flag, /* flag for setting */ + acf_masklay_setting_ptr /* pointer for setting */ +}; + + /* *********************************************** */ /* Type Registration and General Access */ @@ -2569,6 +2733,9 @@ static void ANIM_init_channel_typeinfo_data(void) animchannelTypeInfo[type++] = &ACF_GPD; /* Grease Pencil Datablock */ animchannelTypeInfo[type++] = &ACF_GPL; /* Grease Pencil Layer */ + animchannelTypeInfo[type++] = &ACF_MASKDATA; /* Mask Datablock */ + animchannelTypeInfo[type++] = &ACF_MASKLAYER; /* Mask Layer */ + // TODO: these types still need to be implemented!!! // probably need a few extra flags for these special cases... animchannelTypeInfo[type++] = NULL; /* NLA Track */ @@ -2699,7 +2866,7 @@ short ANIM_channel_setting_get(bAnimContext *ac, bAnimListElem *ale, int setting else if (smode == ACHANNEL_SETFLAG_ADD) (sval) |= (sflag); \ else (sval) &= ~(sflag); \ } \ - } + } (void)0 /* Change value of some setting for a channel * - setting: eAnimChannel_Settings @@ -3060,7 +3227,7 @@ static void achannel_setting_slider_shapekey_cb(bContext *C, void *key_poin, voi /* find or create new F-Curve */ // XXX is the group name for this ok? bAction *act = verify_adt_action((ID *)key, 1); - FCurve *fcu = verify_fcurve(act, NULL, rna_path, 0, 1); + FCurve *fcu = verify_fcurve(act, NULL, &ptr, rna_path, 0, 1); /* set the special 'replace' flag if on a keyframe */ if (fcurve_frame_has_keyframe(fcu, cfra, 0)) @@ -3096,7 +3263,7 @@ static void draw_setting_widget(bAnimContext *ac, bAnimListElem *ale, bAnimChann /* get the base icon for the setting */ switch (setting) { case ACHANNEL_SETTING_VISIBLE: /* visibility eyes */ - //icon= ((enabled)? ICON_VISIBLE_IPO_ON : ICON_VISIBLE_IPO_OFF); + //icon = ((enabled) ? ICON_VISIBLE_IPO_ON : ICON_VISIBLE_IPO_OFF); icon = ICON_VISIBLE_IPO_OFF; if (ale->type == ANIMTYPE_FCURVE) diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index 159c4681951..5c57407d14e 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -43,6 +43,7 @@ #include "DNA_scene_types.h" #include "DNA_key_types.h" #include "DNA_gpencil_types.h" +#include "DNA_mask_types.h" #include "RNA_access.h" #include "RNA_define.h" @@ -51,6 +52,7 @@ #include "BKE_fcurve.h" #include "BKE_gpencil.h" #include "BKE_context.h" +#include "BKE_mask.h" #include "BKE_global.h" #include "UI_view2d.h" @@ -258,6 +260,10 @@ void ANIM_deselect_anim_channels(bAnimContext *ac, void *data, short datatype, s if (ale->flag & GP_LAYER_SELECT) sel = ACHANNEL_SETFLAG_CLEAR; break; + case ANIMTYPE_MASKLAYER: + if (ale->flag & MASK_LAYERFLAG_SELECT) + sel = ACHANNEL_SETFLAG_CLEAR; + break; } } } @@ -354,6 +360,14 @@ void ANIM_deselect_anim_channels(bAnimContext *ac, void *data, short datatype, s ACHANNEL_SET_FLAG(gpl, sel, GP_LAYER_SELECT); } break; + + case ANIMTYPE_MASKLAYER: + { + MaskLayer *masklay = (MaskLayer *)ale->data; + + ACHANNEL_SET_FLAG(masklay, sel, MASK_LAYERFLAG_SELECT); + } + break; } } @@ -496,7 +510,7 @@ void ANIM_flush_setting_anim_channels(bAnimContext *ac, ListBase *anim_data, bAn break; /* store this level as the 'old' level now */ - // prevLevel= level; // XXX: prevLevel is unused + // prevLevel = level; // XXX: prevLevel is unused } } } @@ -1055,6 +1069,10 @@ static int animchannels_rearrange_exec(bContext *C, wmOperator *op) /* Grease Pencil channels */ printf("Grease Pencil not supported for moving yet\n"); } + else if (ac.datatype == ANIMCONT_MASK) { + /* Grease Pencil channels */ + printf("Mask does not supported for moving yet\n"); + } else if (ac.datatype == ANIMCONT_ACTION) { /* Directly rearrange action's channels */ rearrange_action_channels(&ac, ac.data, mode); @@ -1205,6 +1223,17 @@ static int animchannels_delete_exec(bContext *C, wmOperator *UNUSED(op)) BLI_freelinkN(&gpd->layers, gpl); } break; + + case ANIMTYPE_MASKLAYER: + { + /* Grease Pencil layer */ + Mask *mask = (Mask *)ale->id; + MaskLayer *masklay = (MaskLayer *)ale->data; + + /* try to delete the layer's data and the layer itself */ + BKE_mask_layer_remove(mask, masklay); + } + break; } } @@ -2017,7 +2046,7 @@ static int animchannels_rename_invoke(bContext *C, wmOperator *UNUSED(op), wmEve v2d = &ar->v2d; /* figure out which channel user clicked in - * Note: although channels technically start at y= ACHANNEL_FIRST, we need to adjust by half a channel's height + * Note: although channels technically start at (y = ACHANNEL_FIRST), we need to adjust by half a channel's height * so that the tops of channels get caught ok. Since ACHANNEL_FIRST is really ACHANNEL_HEIGHT, we simply use * ACHANNEL_HEIGHT_HALF. */ @@ -2287,6 +2316,36 @@ static int mouse_anim_channels(bAnimContext *ac, float UNUSED(x), int channel_in notifierFlags |= (ND_ANIMCHAN | NA_EDITED); } break; + case ANIMTYPE_MASKDATABLOCK: + { + Mask *mask = (Mask *)ale->data; + + /* toggle expand + * - although the triangle widget already allows this, the whole channel can also be used for this purpose + */ + mask->flag ^= MASK_ANIMF_EXPAND; + + notifierFlags |= (ND_ANIMCHAN | NA_EDITED); + } + break; + case ANIMTYPE_MASKLAYER: + { + MaskLayer *masklay = (MaskLayer *)ale->data; + + /* select/deselect */ + if (selectmode == SELECT_INVERT) { + /* invert selection status of this layer only */ + masklay->flag ^= MASK_LAYERFLAG_SELECT; + } + else { + /* select layer by itself */ + ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); + masklay->flag |= MASK_LAYERFLAG_SELECT; + } + + notifierFlags |= (ND_ANIMCHAN | NA_EDITED); + } + break; default: if (G.debug & G_DEBUG) printf("Error: Invalid channel type in mouse_anim_channels()\n"); @@ -2330,7 +2389,7 @@ static int animchannels_mouseclick_invoke(bContext *C, wmOperator *op, wmEvent * selectmode = SELECT_REPLACE; /* figure out which channel user clicked in - * Note: although channels technically start at y= ACHANNEL_FIRST, we need to adjust by half a channel's height + * Note: although channels technically start at (y = ACHANNEL_FIRST), we need to adjust by half a channel's height * so that the tops of channels get caught ok. Since ACHANNEL_FIRST is really ACHANNEL_HEIGHT, we simply use * ACHANNEL_HEIGHT_HALF. */ diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 160e6957513..46e1eb98dae 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -56,6 +56,7 @@ #include "DNA_lamp_types.h" #include "DNA_lattice_types.h" #include "DNA_key_types.h" +#include "DNA_mask_types.h" #include "DNA_material_types.h" #include "DNA_mesh_types.h" #include "DNA_meta_types.h" @@ -86,6 +87,7 @@ #include "BKE_main.h" #include "BKE_material.h" #include "BKE_node.h" +#include "BKE_mask.h" #include "BKE_sequencer.h" #include "BKE_utildefines.h" @@ -173,6 +175,22 @@ static short actedit_get_context(bAnimContext *ac, SpaceAction *saction) ac->mode = saction->mode; return 1; + case SACTCONT_MASK: /* Grease Pencil */ // XXX review how this mode is handled... + /* update scene-pointer (no need to check for pinning yet, as not implemented) */ +{ + // TODO, other methods to get the mask + // Sequence *seq = BKE_sequencer_active_get(ac->scene); + //MovieClip *clip = ac->scene->clip; +// struct Mask *mask = seq ? seq->mask : NULL; + + saction->ads.source = (ID *)ac->scene; + + ac->datatype = ANIMCONT_MASK; + ac->data = &saction->ads; + + ac->mode = saction->mode; + return 1; +} case SACTCONT_DOPESHEET: /* DopeSheet */ /* update scene-pointer (no need to check for pinning yet, as not implemented) */ saction->ads.source = (ID *)ac->scene; @@ -807,7 +825,18 @@ static bAnimListElem *make_new_animlistelem(void *data, short datatype, ID *owne ale->datatype = ALE_GPFRAME; } break; - + + case ANIMTYPE_MASKLAYER: + { + MaskLayer *masklay = (MaskLayer *)data; + + ale->flag = masklay->flag; + + ale->key_data = NULL; + ale->datatype = ALE_MASKLAY; + } + break; + case ANIMTYPE_NLATRACK: { NlaTrack *nlt = (NlaTrack *)data; @@ -1353,6 +1382,83 @@ static size_t animdata_filter_gpencil(ListBase *anim_data, void *UNUSED(data), i return items; } +static size_t animdata_filter_mask_data(ListBase *anim_data, Mask *mask, const int filter_mode) +{ + MaskLayer *masklay_act = BKE_mask_layer_active(mask); + MaskLayer *masklay; + size_t items = 0; + + /* loop over layers as the conditions are acceptable */ + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + /* only if selected */ + if (ANIMCHANNEL_SELOK(SEL_MASKLAY(masklay)) ) { + /* only if editable */ +// if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_GPL(gpl)) { + /* active... */ + if (!(filter_mode & ANIMFILTER_ACTIVE) || (masklay_act == masklay)) { + /* add to list */ + ANIMCHANNEL_NEW_CHANNEL(masklay, ANIMTYPE_MASKLAYER, mask); + + +// if (filter_mode & ANIMFILTER_TMP_PEEK) +// return 1; +// else { +// bAnimListElem *ale = make_new_animlistelem(masklay, channel_type, (ID *)owner_id); +// if (ale) { +// BLI_addtail(anim_data, ale); +// items ++; +// } +// } + + } +// } + } + } + + return items; +} + +static size_t animdata_filter_mask(ListBase *anim_data, void *UNUSED(data), int filter_mode) +{ + Mask *mask; + size_t items = 0; + + /* for now, grab grease pencil datablocks directly from main */ + // XXX: this is not good... + for (mask = G.main->mask.first; mask; mask = mask->id.next) { + ListBase tmp_data = {NULL, NULL}; + size_t tmp_items = 0; + + /* only show if gpd is used by something... */ + if (ID_REAL_USERS(mask) < 1) + continue; + + /* add gpencil animation channels */ + BEGIN_ANIMFILTER_SUBCHANNELS(EXPANDED_MASK(mask)) + { + tmp_items += animdata_filter_mask_data(&tmp_data, mask, filter_mode); + } + END_ANIMFILTER_SUBCHANNELS; + + /* did we find anything? */ + if (tmp_items) { + /* include data-expand widget first */ + if (filter_mode & ANIMFILTER_LIST_CHANNELS) { + /* add gpd as channel too (if for drawing, and it has layers) */ + ANIMCHANNEL_NEW_CHANNEL(mask, ANIMTYPE_MASKDATABLOCK, NULL); + } + + /* now add the list of collected channels */ + BLI_movelisttolist(anim_data, &tmp_data); + BLI_assert((tmp_data.first == tmp_data.last) && (tmp_data.first == NULL)); + items += tmp_items; + } + } + + /* return the number of items added to the list */ + return items; +} + /* NOTE: owner_id is scene, material, or texture block, which is the direct owner of the node tree in question */ // TODO: how to handle group nodes is still unclear... static size_t animdata_filter_ds_nodetree(bAnimContext *ac, ListBase *anim_data, bDopeSheet *ads, ID *owner_id, bNodeTree *ntree, int filter_mode) @@ -2280,7 +2386,7 @@ size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, int filter_mo items += animfilter_action(ac, anim_data, ads, data, filter_mode, (ID *)obact); } break; - + case ANIMCONT_SHAPEKEY: /* 'ShapeKey Editor' */ { /* the check for the DopeSheet summary is included here since the summary works here too */ @@ -2294,7 +2400,13 @@ size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, int filter_mo items = animdata_filter_gpencil(anim_data, data, filter_mode); } break; - + + case ANIMCONT_MASK: + { + items = animdata_filter_mask(anim_data, data, filter_mode); + } + break; + case ANIMCONT_DOPESHEET: /* 'DopeSheet Editor' */ { /* the DopeSheet editor is the primary place where the DopeSheet summaries are useful */ diff --git a/source/blender/editors/animation/anim_ipo_utils.c b/source/blender/editors/animation/anim_ipo_utils.c index 593010fae09..a73651d7664 100644 --- a/source/blender/editors/animation/anim_ipo_utils.c +++ b/source/blender/editors/animation/anim_ipo_utils.c @@ -191,9 +191,9 @@ int getname_anim_fcurve(char *name, ID *id, FCurve *fcu) /* used to determine the color of F-Curves with FCURVE_COLOR_AUTO_RAINBOW set */ //void fcurve_rainbow (unsigned int cur, unsigned int tot, float *out) -void getcolor_fcurve_rainbow(int cur, int tot, float *out) +void getcolor_fcurve_rainbow(int cur, int tot, float out[3]) { - float hue, val, sat, fac; + float hsv[3], fac; int grouping; /* we try to divide the color into groupings of n colors, @@ -203,7 +203,7 @@ void getcolor_fcurve_rainbow(int cur, int tot, float *out) * so the base color is simply one of the three primary colors */ grouping = (4 - (tot % 2)); - hue = HSV_BANDWIDTH * (float)(cur % grouping); + hsv[0] = HSV_BANDWIDTH * (float)(cur % grouping); /* 'Value' (i.e. darkness) needs to vary so that larger sets of three will be * 'darker' (i.e. smaller value), so that they don't look that similar to previous ones. @@ -213,16 +213,15 @@ void getcolor_fcurve_rainbow(int cur, int tot, float *out) fac = ((float)cur / (float)tot) * 0.7f; /* the base color can get offset a bit so that the colors aren't so identical */ - hue += fac * HSV_BANDWIDTH; - if (hue > 1.0f) hue = fmod(hue, 1.0f); + hsv[0] += fac * HSV_BANDWIDTH; + if (hsv[0] > 1.0f) hsv[0] = fmod(hsv[0], 1.0f); /* saturation adjustments for more visible range */ - if ((hue > 0.5f) && (hue < 0.8f)) sat = 0.5f; - else sat = 0.6f; + hsv[1] = ((hsv[0] > 0.5f) && (hsv[0] < 0.8f)) ? 0.5f : 0.6f; /* value is fixed at 1.0f, otherwise we cannot clearly see the curves... */ - val = 1.0f; + hsv[2] = 1.0f; /* finally, conver this to RGB colors */ - hsv_to_rgb(hue, sat, val, out, out + 1, out + 2); + hsv_to_rgb_v(hsv, out); } diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c index 416df6bccba..4a5966948ae 100644 --- a/source/blender/editors/animation/drivers.c +++ b/source/blender/editors/animation/drivers.c @@ -521,7 +521,7 @@ void ANIM_OT_driver_button_add(wmOperatorType *ot) /* callbacks */ ot->exec = add_driver_button_exec; - //op->poll= ??? // TODO: need to have some animatable property to do this + //op->poll = ??? // TODO: need to have some animatable property to do this /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -573,7 +573,7 @@ void ANIM_OT_driver_button_remove(wmOperatorType *ot) /* callbacks */ ot->exec = remove_driver_button_exec; - //op->poll= ??? // TODO: need to have some driver to be able to do this... + //op->poll = ??? // TODO: need to have some driver to be able to do this... /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -620,7 +620,7 @@ void ANIM_OT_copy_driver_button(wmOperatorType *ot) /* callbacks */ ot->exec = copy_driver_button_exec; - //op->poll= ??? // TODO: need to have some driver to be able to do this... + //op->poll = ??? // TODO: need to have some driver to be able to do this... /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -664,7 +664,7 @@ void ANIM_OT_paste_driver_button(wmOperatorType *ot) /* callbacks */ ot->exec = paste_driver_button_exec; - //op->poll= ??? // TODO: need to have some driver to be able to do this... + //op->poll = ??? // TODO: need to have some driver to be able to do this... /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c index 24cae5d8652..ea875567705 100644 --- a/source/blender/editors/animation/fmodifier_ui.c +++ b/source/blender/editors/animation/fmodifier_ui.c @@ -79,7 +79,7 @@ #define DRAW_BACKDROP(height) \ { \ uiDefBut(block, ROUNDBOX, B_REDR, "", -3, yco - height, width + 3, height - 1, NULL, 5.0, 0.0, 12.0, (float)rb_col, ""); \ - } + } (void)0 /* callback to verify modifier data */ static void validate_fmodifier_cb(bContext *UNUSED(C), void *fcm_v, void *UNUSED(arg)) diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c index cb7dc7ac206..e6fc4d5a168 100644 --- a/source/blender/editors/animation/keyframes_draw.c +++ b/source/blender/editors/animation/keyframes_draw.c @@ -60,6 +60,7 @@ #include "DNA_speaker_types.h" #include "DNA_world_types.h" #include "DNA_gpencil_types.h" +#include "DNA_mask_types.h" #include "BKE_key.h" #include "BKE_material.h" @@ -184,6 +185,50 @@ static void nupdate_ak_gpframe(void *node, void *data) ak->modified += 1; } +/* ......... */ + +/* Comparator callback used for ActKeyColumns and GPencil frame */ +static short compare_ak_masklayshape(void *node, void *data) +{ + ActKeyColumn *ak = (ActKeyColumn *)node; + MaskLayerShape *masklay_shape = (MaskLayerShape *)data; + + if (masklay_shape->frame < ak->cfra) + return -1; + else if (masklay_shape->frame > ak->cfra) + return 1; + else + return 0; +} + +/* New node callback used for building ActKeyColumns from GPencil frames */ +static DLRBT_Node *nalloc_ak_masklayshape(void *data) +{ + ActKeyColumn *ak = MEM_callocN(sizeof(ActKeyColumn), "ActKeyColumnGPF"); + MaskLayerShape *masklay_shape = (MaskLayerShape *)data; + + /* store settings based on state of BezTriple */ + ak->cfra = masklay_shape->frame; + ak->sel = (masklay_shape->flag & MASK_SHAPE_SELECT) ? SELECT : 0; + + /* set 'modified', since this is used to identify long keyframes */ + ak->modified = 1; + + return (DLRBT_Node *)ak; +} + +/* Node updater callback used for building ActKeyColumns from GPencil frames */ +static void nupdate_ak_masklayshape(void *node, void *data) +{ + ActKeyColumn *ak = (ActKeyColumn *)node; + MaskLayerShape *masklay_shape = (MaskLayerShape *)data; + + /* set selection status and 'touched' status */ + if (masklay_shape->flag & MASK_SHAPE_SELECT) ak->sel = SELECT; + ak->modified += 1; +} + + /* --------------- */ /* Add the given BezTriple to the given 'list' of Keyframes */ @@ -204,6 +249,15 @@ static void add_gpframe_to_keycolumns_list(DLRBT_Tree *keys, bGPDframe *gpf) BLI_dlrbTree_add(keys, compare_ak_gpframe, nalloc_ak_gpframe, nupdate_ak_gpframe, gpf); } +/* Add the given MaskLayerShape Frame to the given 'list' of Keyframes */ +static void add_masklay_to_keycolumns_list(DLRBT_Tree *keys, MaskLayerShape *masklay_shape) +{ + if (ELEM(NULL, keys, masklay_shape)) + return; + else + BLI_dlrbTree_add(keys, compare_ak_masklayshape, nalloc_ak_masklayshape, nupdate_ak_masklayshape, masklay_shape); +} + /* ActBeztColumns (Helpers for Long Keyframes) ------------------------------ */ /* maximum size of default buffer for BezTriple columns */ @@ -764,6 +818,21 @@ void draw_gpl_channel(View2D *v2d, bDopeSheet *ads, bGPDlayer *gpl, float ypos) BLI_dlrbTree_free(&keys); } +void draw_masklay_channel(View2D *v2d, bDopeSheet *ads, MaskLayer *masklay, float ypos) +{ + DLRBT_Tree keys; + + BLI_dlrbTree_init(&keys); + + mask_to_keylist(ads, masklay, &keys); + + BLI_dlrbTree_linkedlist_sync(&keys); + + draw_keylist(v2d, &keys, NULL, ypos, (masklay->flag & MASK_LAYERFLAG_LOCKED)); + + BLI_dlrbTree_free(&keys); +} + /* *************************** Keyframe List Conversions *************************** */ void summary_to_keylist(bAnimContext *ac, DLRBT_Tree *keys, DLRBT_Tree *blocks) @@ -940,3 +1009,17 @@ void gpl_to_keylist(bDopeSheet *UNUSED(ads), bGPDlayer *gpl, DLRBT_Tree *keys) } } +void mask_to_keylist(bDopeSheet *UNUSED(ads), MaskLayer *masklay, DLRBT_Tree *keys) +{ + MaskLayerShape *masklay_shape; + + if (masklay && keys) { + for (masklay_shape = masklay->splines_shapes.first; + masklay_shape; + masklay_shape = masklay_shape->next) + { + add_masklay_to_keycolumns_list(keys, masklay_shape); + } + } +} + diff --git a/source/blender/editors/animation/keyframes_edit.c b/source/blender/editors/animation/keyframes_edit.c index b92d0fb345a..88627a6dabd 100644 --- a/source/blender/editors/animation/keyframes_edit.c +++ b/source/blender/editors/animation/keyframes_edit.c @@ -429,7 +429,7 @@ void ANIM_editkeyframes_refresh(bAnimContext *ac) if (check(2)) \ ok |= KEYFRAME_OK_H2; \ } \ - } + } (void)0 /* ------------------------ */ @@ -766,7 +766,7 @@ KeyframeEditFunc ANIM_editkeyframes_mirror(short type) bezt->h1 = HD_FREE; \ if (ELEM3(bezt->h2, HD_ALIGN, HD_AUTO, HD_AUTO_ANIM)) \ bezt->h2 = HD_FREE; \ - } + } (void)0 /* Sets the selected bezier handles to type 'auto' */ static short set_bezier_auto(KeyframeEditData *UNUSED(ked), BezTriple *bezt) diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c index 05c87e98f9b..a8f8d2974e5 100644 --- a/source/blender/editors/animation/keyframes_general.c +++ b/source/blender/editors/animation/keyframes_general.c @@ -184,10 +184,10 @@ void clean_fcurve(FCurve *fcu, float thresh) int totCount, i; /* check if any points */ - if ((fcu == NULL) || (fcu->totvert <= 1)) + if ((fcu == NULL) || (fcu->bezt == NULL) || (fcu->totvert <= 1)) return; - /* make a copy of the old BezTriples, and clear IPO curve */ + /* make a copy of the old BezTriples, and clear F-Curve */ old_bezts = fcu->bezt; totCount = fcu->totvert; fcu->bezt = NULL; @@ -286,7 +286,11 @@ void smooth_fcurve(FCurve *fcu) { BezTriple *bezt; int i, x, totSel = 0; - + + if (fcu->bezt == NULL) { + return; + } + /* first loop through - count how many verts are selected */ bezt = fcu->bezt; for (i = 0; i < fcu->totvert; i++, bezt++) { @@ -374,16 +378,16 @@ void smooth_fcurve(FCurve *fcu) /* ---------------- */ /* little cache for values... */ -typedef struct tempFrameValCache { +typedef struct TempFrameValCache { float frame, val; -} tempFrameValCache; +} TempFrameValCache; /* Evaluates the curves between each selected keyframe on each frame, and keys the value */ void sample_fcurve(FCurve *fcu) { BezTriple *bezt, *start = NULL, *end = NULL; - tempFrameValCache *value_cache, *fp; + TempFrameValCache *value_cache, *fp; int sfra, range; int i, n, nIndex; @@ -406,15 +410,15 @@ void sample_fcurve(FCurve *fcu) sfra = (int)(floor(start->vec[1][0]) ); if (range) { - value_cache = MEM_callocN(sizeof(tempFrameValCache) * range, "IcuFrameValCache"); + value_cache = MEM_callocN(sizeof(TempFrameValCache) * range, "IcuFrameValCache"); - /* sample values */ + /* sample values */ for (n = 1, fp = value_cache; n < range && fp; n++, fp++) { fp->frame = (float)(sfra + n); fp->val = evaluate_fcurve(fcu, fp->frame); } - /* add keyframes with these, tagging as 'breakdowns' */ + /* add keyframes with these, tagging as 'breakdowns' */ for (n = 1, fp = value_cache; n < range && fp; n++, fp++) { nIndex = insert_vert_fcurve(fcu, fp->frame, fp->val, 1); BEZKEYTYPE(fcu->bezt + nIndex) = BEZT_KEYTYPE_BREAKDOWN; @@ -671,7 +675,7 @@ static void paste_animedit_keys_fcurve(FCurve *fcu, tAnimCopybufItem *aci, float BezTriple *bezt; int i; - /* First de-select existing FCuvre */ + /* First de-select existing FCurve's keyframes */ for (i = 0, bezt = fcu->bezt; i < fcu->totvert; i++, bezt++) { bezt->f2 &= ~SELECT; } diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 2a68d32557a..6250424d655 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -150,9 +150,10 @@ bAction *verify_adt_action(ID *id, short add) /* Get (or add relevant data to be able to do so) F-Curve from the Active Action, * for the given Animation Data block. This assumes that all the destinations are valid. */ -FCurve *verify_fcurve(bAction *act, const char group[], const char rna_path[], const int array_index, short add) +FCurve *verify_fcurve(bAction *act, const char group[], PointerRNA *ptr, + const char rna_path[], const int array_index, short add) { - bActionGroup *grp; + bActionGroup *agrp; FCurve *fcu; /* sanity checks */ @@ -183,14 +184,30 @@ FCurve *verify_fcurve(bAction *act, const char group[], const char rna_path[], c /* if a group name has been provided, try to add or find a group, then add F-Curve to it */ if (group) { /* try to find group */ - grp = BKE_action_group_find_name(act, group); + agrp = BKE_action_group_find_name(act, group); /* no matching groups, so add one */ - if (grp == NULL) - grp = action_groups_add_new(act, group); + if (agrp == NULL) { + agrp = action_groups_add_new(act, group); + + /* sync bone group colors if applicable */ + if (ptr && (ptr->type == &RNA_PoseBone)) { + Object *ob = (Object *)ptr->id.data; + bPoseChannel *pchan = (bPoseChannel *)ptr->data; + bPose *pose = ob->pose; + bActionGroup *grp; + + /* find bone group (if present), and use the color from that */ + grp = (bActionGroup *)BLI_findlink(&pose->agroups, (pchan->agrp_index - 1)); + if (grp) { + agrp->customCol = grp->customCol; + action_group_colors_sync(agrp); + } + } + } /* add F-Curve to group */ - action_groups_add_channel(act, grp, fcu); + action_groups_add_channel(act, agrp, fcu); } else { /* just add F-Curve to end of Action's list */ @@ -542,7 +559,6 @@ static short visualkey_can_use(PointerRNA *ptr, PropertyRNA *prop) const char *identifier = NULL; /* validate data */ - // TODO: this check is probably not needed, but it won't hurt if (ELEM3(NULL, ptr, ptr->data, prop)) return 0; @@ -618,6 +634,9 @@ static short visualkey_can_use(PointerRNA *ptr, PropertyRNA *prop) case CONSTRAINT_TYPE_TRACKTO: if (searchtype == VISUALKEY_ROT) return 1; break; + case CONSTRAINT_TYPE_DAMPTRACK: + if (searchtype == VISUALKEY_ROT) return 1; + break; case CONSTRAINT_TYPE_ROTLIMIT: if (searchtype == VISUALKEY_ROT) return 1; break; @@ -939,7 +958,7 @@ short insert_keyframe(ReportList *reports, ID *id, bAction *act, const char grou * - if we're replacing keyframes only, DO NOT create new F-Curves if they do not exist yet * but still try to get the F-Curve if it exists... */ - fcu = verify_fcurve(act, group, rna_path, array_index, (flag & INSERTKEY_REPLACE) == 0); + fcu = verify_fcurve(act, group, &ptr, rna_path, array_index, (flag & INSERTKEY_REPLACE) == 0); /* we may not have a F-Curve when we're replacing only... */ if (fcu) { @@ -1027,7 +1046,7 @@ short delete_keyframe(ReportList *reports, ID *id, bAction *act, const char grou /* will only loop once unless the array index was -1 */ for (; array_index < array_index_max; array_index++) { - FCurve *fcu = verify_fcurve(act, group, rna_path, array_index, 0); + FCurve *fcu = verify_fcurve(act, group, &ptr, rna_path, array_index, 0); short found = -1; int i; diff --git a/source/blender/editors/armature/BIF_generate.h b/source/blender/editors/armature/BIF_generate.h index 583178dd2b7..06ee3fbb64c 100644 --- a/source/blender/editors/armature/BIF_generate.h +++ b/source/blender/editors/armature/BIF_generate.h @@ -42,7 +42,7 @@ int nextAdaptativeSubdivision(struct ToolSettings *toolsettings, struct BArcIter struct EditBone *subdivideArcBy(struct ToolSettings *toolsettings, struct bArmature *arm, ListBase *editbones, struct BArcIterator *iter, float invmat[][4], float tmat[][3], NextSubdivisionFunc next_subdividion); -void setBoneRollFromNormal(struct EditBone *bone, float *no, float invmat[][4], float tmat[][3]); +void setBoneRollFromNormal(struct EditBone *bone, const float no[3], float invmat[][4], float tmat[][3]); #endif /* __BIF_GENERATE_H__ */ diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index 8ea66934a31..ea3c8685525 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -756,7 +756,7 @@ static int pose_visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op)) * * TODO, loop over children before parents if multiple bones * at once are to be predictable*/ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) + CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones) { float delta_mat[4][4]; @@ -923,7 +923,7 @@ int join_armature_exec(bContext *C, wmOperator *UNUSED(op)) pose = ob->pose; ob->mode &= ~OB_MODE_POSE; - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + CTX_DATA_BEGIN(C, Base *, base, selected_editable_bases) { if ((base->object->type == OB_ARMATURE) && (base->object != ob)) { bArmature *curarm = base->object->data; @@ -1195,7 +1195,7 @@ static int separate_armature_exec(bContext *C, wmOperator *UNUSED(op)) /* 1) only edit-base selected */ // TODO: use context iterators for this? - CTX_DATA_BEGIN (C, Base *, base, visible_bases) + CTX_DATA_BEGIN(C, Base *, base, visible_bases) { if (base->object == obedit) base->flag |= 1; else base->flag &= ~1; @@ -1418,7 +1418,8 @@ static void selectconnected_posebonechildren(Object *ob, Bone *bone, int extend) /* previously known as "selectconnected_posearmature" */ static int pose_select_connected_invoke(bContext *C, wmOperator *op, wmEvent *event) { - Object *ob = CTX_data_edit_object(C); + Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C)); + bArmature *arm = (bArmature *)ob->data; Bone *bone, *curBone, *next = NULL; int extend = RNA_boolean_get(op->ptr, "extend"); @@ -1457,14 +1458,20 @@ static int pose_select_connected_invoke(bContext *C, wmOperator *op, wmEvent *ev for (curBone = bone->childbase.first; curBone; curBone = next) selectconnected_posebonechildren(ob, curBone, extend); + /* updates */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + + if (arm->flag & ARM_HAS_VIZ_DEPS) { + /* mask modifier ('armature' mode), etc. */ + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); + } return OPERATOR_FINISHED; } static int pose_select_linked_poll(bContext *C) { - return (ED_operator_view3d_active(C) && ED_operator_posemode(C) ); + return (ED_operator_view3d_active(C) && ED_operator_posemode(C)); } void POSE_OT_select_linked(wmOperatorType *ot) @@ -2290,7 +2297,7 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d) ED_armature_deselect_all(obedit, 0); - /* Create a bone */ + /* Create a bone */ bone = ED_armature_edit_bone_add(arm, "Bone"); arm->act_edbone = bone; @@ -2301,7 +2308,6 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d) add_v3_v3v3(bone->tail, bone->head, imat[1]); // bone with unit length 1 else add_v3_v3v3(bone->tail, bone->head, imat[2]); // bone with unit length 1, pointing up Z - } @@ -2842,7 +2848,7 @@ static int armature_fill_bones_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; /* loop over all bones, and only consider if visible */ - CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) + CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) { if (!(ebone->flag & BONE_CONNECTED) && (ebone->flag & BONE_ROOTSEL)) fill_add_joint(ebone, 0, &points); @@ -3556,7 +3562,7 @@ static int armature_subdivide_exec(bContext *C, wmOperator *op) /* loop over all editable bones */ // XXX the old code did this in reverse order though! - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { for (i = numcuts + 1; i > 1; i--) { /* compute cut ratio first */ @@ -3845,7 +3851,7 @@ static int armature_parent_set_exec(bContext *C, wmOperator *op) */ /* parent selected bones to the active one */ - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { if (ELEM(ebone, actbone, actmirb) == 0) { if (ebone->flag & BONE_SELECTED) @@ -3871,7 +3877,7 @@ static int armature_parent_set_invoke(bContext *C, wmOperator *UNUSED(op), wmEve uiLayout *layout = uiPupMenuLayout(pup); int allchildbones = 0; - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { if (ebone != actbone) { if (ebone->parent != actbone) allchildbones = 1; @@ -3931,7 +3937,7 @@ static int armature_parent_clear_exec(bContext *C, wmOperator *op) bArmature *arm = (bArmature *)ob->data; int val = RNA_enum_get(op->ptr, "type"); - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { editbone_clear_parent(ebone, val); } @@ -3968,7 +3974,7 @@ void ARMATURE_OT_parent_clear(wmOperatorType *ot) static int armature_select_inverse_exec(bContext *C, wmOperator *UNUSED(op)) { /* Set the flags */ - CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) + CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) { /* ignore bone if selection can't change */ if ((ebone->flag & BONE_UNSELECTABLE) == 0) { @@ -4011,7 +4017,7 @@ static int armature_de_select_all_exec(bContext *C, wmOperator *op) } /* Set the flags */ - CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) + CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) { /* ignore bone if selection can't change */ if ((ebone->flag & BONE_UNSELECTABLE) == 0) { @@ -4226,8 +4232,8 @@ static int armature_select_similar_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void ARMATURE_OT_select_similar(wmOperatorType *ot) { - +void ARMATURE_OT_select_similar(wmOperatorType *ot) +{ /* identifiers */ ot->name = "Select Similar"; ot->idname = "ARMATURE_OT_select_similar"; @@ -4431,7 +4437,7 @@ static int armature_align_bones_exec(bContext *C, wmOperator *op) */ /* align selected bones to the active one */ - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { if (ELEM(ebone, actbone, actmirb) == 0) { if (ebone->flag & BONE_SELECTED) @@ -4517,13 +4523,12 @@ int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, shor * note, special exception for armature mode so we can do multi-select * we could check for multi-select explicitly but think its fine to * always give predictable behavior in weight paint mode - campbell */ - if ((!extend && !deselect && !toggle)|| ((ob_act && (ob_act != ob) && (ob_act->mode & OB_MODE_WEIGHT_PAINT) == 0))) { + if ((!extend && !deselect && !toggle) || + ((ob_act && (ob_act != ob) && (ob_act->mode & OB_MODE_WEIGHT_PAINT) == 0))) + { ED_pose_deselectall(ob, 0); nearBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); arm->act_bone = nearBone; - - // XXX old cruft! use notifiers instead - //select_actionchannel_by_name(ob->action, nearBone->name, 1); } else { if (extend) { @@ -4541,29 +4546,30 @@ int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, shor } else { nearBone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); - - // XXX old cruft! use notifiers instead - //select_actionchannel_by_name(ob->action, nearBone->name, 0); } } else { nearBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); arm->act_bone = nearBone; - - // XXX old cruft! use notifiers instead - //select_actionchannel_by_name(ob->action, nearBone->name, 1); } } } - /* in weightpaint we select the associated vertex group too */ - if (ob_act && ob_act->mode & OB_MODE_WEIGHT_PAINT) { - if (nearBone == arm->act_bone) { - ED_vgroup_select_by_name(OBACT, nearBone->name); - DAG_id_tag_update(&OBACT->id, OB_RECALC_DATA); + if (ob_act) { + /* in weightpaint we select the associated vertex group too */ + if (ob_act->mode & OB_MODE_WEIGHT_PAINT) { + if (nearBone == arm->act_bone) { + ED_vgroup_select_by_name(ob_act, nearBone->name); + DAG_id_tag_update(&ob_act->id, OB_RECALC_DATA); + } + } + /* if there are some dependencies for visualising armature state + * (e.g. Mask Modifier in 'Armature' mode), force update + */ + else if (arm->flag & ARM_HAS_VIZ_DEPS) { + DAG_id_tag_update(&ob_act->id, OB_RECALC_DATA); } } - } return nearBone != NULL; @@ -5130,7 +5136,7 @@ static int pose_clear_transform_generic_exec(bContext *C, wmOperator *op, } /* only clear relevant transforms for selected bones */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) + CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones) { /* run provided clearing function */ clear_func(pchan); @@ -5265,6 +5271,8 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op) int action = RNA_enum_get(op->ptr, "action"); Scene *scene = CTX_data_scene(C); + Object *ob = ED_object_context(C); + bArmature *arm = ob->data; int multipaint = scene->toolsettings->multipaint; if (action == SEL_TOGGLE) { @@ -5272,7 +5280,7 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op) } /* Set the flags */ - CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) + CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) { /* select pchan only if selectable, but deselect works always */ switch (action) { @@ -5297,8 +5305,8 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op) WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, NULL); - if (multipaint) { - Object *ob = ED_object_context(C); + /* weightpaint or mask modifiers need depsgraph updates */ + if (multipaint || (arm->flag & ARM_HAS_VIZ_DEPS)) { DAG_id_tag_update(&ob->id, OB_RECALC_DATA); } @@ -5325,12 +5333,12 @@ void POSE_OT_select_all(wmOperatorType *ot) static int pose_select_parent_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C)); + bArmature *arm = (bArmature *)ob->data; bPoseChannel *pchan, *parent; - /* Determine if there is an active bone */ + /* Determine if there is an active bone */ pchan = CTX_data_active_pose_bone(C); if (pchan) { - bArmature *arm = ob->data; parent = pchan->parent; if ((parent) && !(parent->bone->flag & (BONE_HIDDEN_P | BONE_UNSELECTABLE))) { parent->bone->flag |= BONE_SELECTED; @@ -5343,9 +5351,15 @@ static int pose_select_parent_exec(bContext *C, wmOperator *UNUSED(op)) else { return OPERATOR_CANCELLED; } - + + /* updates */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + if (arm->flag & ARM_HAS_VIZ_DEPS) { + /* mask modifier ('armature' mode), etc. */ + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); + } + return OPERATOR_FINISHED; } @@ -5662,7 +5676,7 @@ static int armature_flip_names_exec(bContext *C, wmOperator *UNUSED(op)) arm = ob->data; /* loop through selected bones, auto-naming them */ - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { flip_side_name(newname, ebone->name, TRUE); // 1 = do strip off number extensions ED_armature_bone_rename(arm, ebone->name, newname); @@ -5707,7 +5721,7 @@ static int armature_autoside_names_exec(bContext *C, wmOperator *op) arm = ob->data; /* loop through selected bones, auto-naming them */ - CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) + CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { BLI_strncpy(newname, ebone->name, sizeof(newname)); if (bone_autoside_name(newname, 1, axis, ebone->head[axis], ebone->tail[axis])) @@ -5730,7 +5744,8 @@ void ARMATURE_OT_autoside_names(wmOperatorType *ot) {0, "XAXIS", 0, "X-Axis", "Left/Right"}, {1, "YAXIS", 0, "Y-Axis", "Front/Back"}, {2, "ZAXIS", 0, "Z-Axis", "Top/Bottom"}, - {0, NULL, 0, NULL, NULL}}; + {0, NULL, 0, NULL, NULL} + }; /* identifiers */ ot->name = "AutoName by Axis"; diff --git a/source/blender/editors/armature/editarmature_generate.c b/source/blender/editors/armature/editarmature_generate.c index 7f966dbc884..23dd3b15476 100644 --- a/source/blender/editors/armature/editarmature_generate.c +++ b/source/blender/editors/armature/editarmature_generate.c @@ -50,7 +50,7 @@ #include "armature_intern.h" #include "BIF_generate.h" -void setBoneRollFromNormal(EditBone *bone, float *no, float UNUSED(invmat[][4]), float tmat[][3]) +void setBoneRollFromNormal(EditBone *bone, const float no[3], float UNUSED(invmat[][4]), float tmat[][3]) { if (no != NULL && !is_zero_v3(no)) { float normal[3]; diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c index d90bd96a6f1..91c342ec070 100644 --- a/source/blender/editors/armature/editarmature_retarget.c +++ b/source/blender/editors/armature/editarmature_retarget.c @@ -81,20 +81,17 @@ typedef struct RetargetParam { bContext *context; } RetargetParam; -typedef enum -{ +typedef enum { RETARGET_LENGTH, RETARGET_AGGRESSIVE } RetargetMode; -typedef enum -{ +typedef enum { METHOD_BRUTE_FORCE = 0, METHOD_MEMOIZE = 1 } RetargetMethod; -typedef enum -{ +typedef enum { ARC_FREE = 0, ARC_TAKEN = 1, ARC_USED = 2 diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index 36c15c50809..18e3d967835 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -1236,7 +1236,7 @@ static int poselib_preview_handle_event(bContext *UNUSED(C), wmOperator *op, wmE case PAD5: case PAD6: case PAD7: case PAD8: case PAD9: case PADPLUSKEY: case PADMINUS: case MIDDLEMOUSE: case MOUSEMOVE: - //pld->redraw= PL_PREVIEW_REDRAWHEADER; + //pld->redraw = PL_PREVIEW_REDRAWHEADER; ret = OPERATOR_PASS_THROUGH; break; @@ -1365,7 +1365,7 @@ static int poselib_preview_handle_event(bContext *UNUSED(C), wmOperator *op, wmE * even though we still maintain control (as RUNNING_MODAL flag is still set too) */ case MIDDLEMOUSE: case MOUSEMOVE: - //pld->redraw= PL_PREVIEW_REDRAWHEADER; + //pld->redraw = PL_PREVIEW_REDRAWHEADER; ret = OPERATOR_PASS_THROUGH; break; @@ -1379,7 +1379,7 @@ static int poselib_preview_handle_event(bContext *UNUSED(C), wmOperator *op, wmE } else { /* view manipulation (see above) */ - //pld->redraw= PL_PREVIEW_REDRAWHEADER; + //pld->redraw = PL_PREVIEW_REDRAWHEADER; ret = OPERATOR_PASS_THROUGH; } break; diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index df970171a54..9bcbf313f13 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -119,8 +119,8 @@ void ED_armature_exit_posemode(bContext *C, Base *base) } } -/* if a selected or active bone is protected, throw error (oonly if warn==1) and return 1 */ -/* only_selected==1 : the active bone is allowed to be protected */ +/* if a selected or active bone is protected, throw error (oonly if warn == 1) and return 1 */ +/* only_selected == 1: the active bone is allowed to be protected */ #if 0 /* UNUSED 2.5 */ static short pose_has_protected_selected(Object *ob, short warn) { @@ -391,6 +391,7 @@ void POSE_OT_paths_clear(wmOperatorType *ot) static int pose_select_constraint_target_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C)); + bArmature *arm = (bArmature *)ob->data; bConstraint *con; int found = 0; @@ -422,12 +423,18 @@ static int pose_select_constraint_target_exec(bContext *C, wmOperator *UNUSED(op } } CTX_DATA_END; - + if (!found) return OPERATOR_CANCELLED; - + + /* updates */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); - + + if (arm->flag & ARM_HAS_VIZ_DEPS) { + /* mask modifier ('armature' mode), etc. */ + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); + } + return OPERATOR_FINISHED; } @@ -477,7 +484,6 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) } } else { /* direction == BONE_SELECT_CHILD */ - /* the child member is only assigned to connected bones, see [#30340] */ #if 0 if (pchan->child == NULL) continue; @@ -518,9 +524,15 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) if (found == 0) return OPERATOR_CANCELLED; - + + /* updates */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); - + + if (arm->flag & ARM_HAS_VIZ_DEPS) { + /* mask modifier ('armature' mode), etc. */ + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); + } + return OPERATOR_FINISHED; } @@ -547,7 +559,6 @@ void POSE_OT_select_hierarchy(wmOperatorType *ot) /* props */ ot->prop = RNA_def_enum(ot->srna, "direction", direction_items, BONE_SELECT_PARENT, "Direction", ""); RNA_def_boolean(ot->srna, "extend", 0, "Add to Selection", ""); - } /* ******************* select grouped operator ************* */ @@ -571,7 +582,7 @@ static short pose_select_same_group(bContext *C, Object *ob, short extend) /* alloc a small array to keep track of the groups to use * - each cell stores on/off state for whether group should be used - * - size is numGroups + 1, since index=0 is used for no-group + * - size is (numGroups + 1), since (index = 0) is used for no-group */ group_flags = MEM_callocN(numGroups + 1, "pose_select_same_group"); @@ -711,6 +722,7 @@ static int pose_select_same_keyingset(bContext *C, Object *ob, short extend) static int pose_select_grouped_exec(bContext *C, wmOperator *op) { Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C)); + bArmature *arm = (bArmature *)ob->data; short extend = RNA_boolean_get(op->ptr, "extend"); short changed = 0; @@ -736,6 +748,11 @@ static int pose_select_grouped_exec(bContext *C, wmOperator *op) /* notifiers for updates */ WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob); + if (arm->flag & ARM_HAS_VIZ_DEPS) { + /* mask modifier ('armature' mode), etc. */ + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); + } + /* report done status */ if (changed) return OPERATOR_FINISHED; diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c index a629312e732..20b95ea55d6 100644 --- a/source/blender/editors/armature/reeb.c +++ b/source/blender/editors/armature/reeb.c @@ -475,8 +475,8 @@ static void NodeDegreeIncrement(ReebGraph *UNUSED(rg), ReebNode *node) } #else -#define NodeDegreeDecrement(rg, node) {node->degree--; } -#define NodeDegreeIncrement(rg, node) {node->degree++; } +# define NodeDegreeDecrement(rg, node) {node->degree--; } (void)0 +# define NodeDegreeIncrement(rg, node) {node->degree++; } (void)0 #endif void repositionNodes(ReebGraph *rg) diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c index dea7ccb161d..27c40095348 100644 --- a/source/blender/editors/curve/curve_ops.c +++ b/source/blender/editors/curve/curve_ops.c @@ -141,14 +141,14 @@ void ED_operatormacros_curve(void) wmOperatorTypeMacro *otmacro; ot = WM_operatortype_append_macro("CURVE_OT_duplicate_move", "Add Duplicate", "Duplicate curve and move", - OPTYPE_UNDO|OPTYPE_REGISTER); + OPTYPE_UNDO | OPTYPE_REGISTER); WM_operatortype_macro_define(ot, "CURVE_OT_duplicate"); otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", 0); RNA_boolean_set(otmacro->ptr, "mirror", FALSE); ot = WM_operatortype_append_macro("CURVE_OT_extrude_move", "Extrude Curve and Move", - "Extrude curve and move result", OPTYPE_UNDO|OPTYPE_REGISTER); + "Extrude curve and move result", OPTYPE_UNDO | OPTYPE_REGISTER); WM_operatortype_macro_define(ot, "CURVE_OT_extrude"); otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); RNA_enum_set(otmacro->ptr, "proportional", 0); @@ -189,8 +189,8 @@ void ED_keymap_curve(wmKeyConfig *keyconf) RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", ENDKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", LINE_END); RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", LEFTARROWKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", PREV_CHAR); RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", RIGHTARROWKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", NEXT_CHAR); - RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", LEFTARROWKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "type", PREV_WORD); - RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", RIGHTARROWKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "type", NEXT_WORD); + RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", LEFTARROWKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0)->ptr, "type", PREV_WORD); + RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", RIGHTARROWKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0)->ptr, "type", NEXT_WORD); RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", UPARROWKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", PREV_LINE); RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", DOWNARROWKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", NEXT_LINE); RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", PAGEUPKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", PREV_PAGE); @@ -224,9 +224,9 @@ void ED_keymap_curve(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "CURVE_OT_vertex_add", LEFTMOUSE, KM_CLICK, KM_CTRL, 0); kmi = WM_keymap_add_item(keymap, "CURVE_OT_select_all", AKEY, KM_PRESS, 0, 0); - RNA_enum_set(kmi->ptr, "action", SEL_TOGGLE); + RNA_enum_set(kmi->ptr, "action", SEL_TOGGLE); kmi = WM_keymap_add_item(keymap, "CURVE_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0); - RNA_enum_set(kmi->ptr, "action", SEL_INVERT); + RNA_enum_set(kmi->ptr, "action", SEL_INVERT); WM_keymap_add_item(keymap, "CURVE_OT_select_row", RKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "CURVE_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0); @@ -264,6 +264,7 @@ void ED_keymap_curve(wmKeyConfig *keyconf) /* menus */ WM_keymap_add_menu(keymap, "VIEW3D_MT_hook", HKEY, KM_PRESS, KM_CTRL, 0); - ED_object_generic_keymap(keyconf, keymap, 3); + ED_keymap_proportional_cycle(keyconf, keymap); + ED_keymap_proportional_editmode(keyconf, keymap, TRUE); } diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 431ce15a26d..2fa7b4b2126 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -356,6 +356,11 @@ static CVKeyIndex *getCVKeyIndex(EditNurb *editnurb, void *cv) return BLI_ghash_lookup(editnurb->keyindex, cv); } +static CVKeyIndex *popCVKeyIndex(EditNurb *editnurb, void *cv) +{ + return BLI_ghash_pop(editnurb->keyindex, cv, NULL); +} + static BezTriple *getKeyIndexOrig_bezt(EditNurb *editnurb, BezTriple *bezt) { CVKeyIndex *index = getCVKeyIndex(editnurb, bezt); @@ -459,9 +464,7 @@ static void keyIndex_updateCV(EditNurb *editnurb, char *cv, } for (i = 0; i < count; i++) { - index = getCVKeyIndex(editnurb, cv); - - BLI_ghash_remove(editnurb->keyindex, cv, NULL, NULL); + index = popCVKeyIndex(editnurb, cv); if (index) { BLI_ghash_insert(editnurb->keyindex, newcv, index); @@ -496,11 +499,8 @@ static void keyIndex_updateNurb(EditNurb *editnurb, Nurb *nu, Nurb *newnu) static void keyIndex_swap(EditNurb *editnurb, void *a, void *b) { - CVKeyIndex *index1 = getCVKeyIndex(editnurb, a); - CVKeyIndex *index2 = getCVKeyIndex(editnurb, b); - - BLI_ghash_remove(editnurb->keyindex, a, NULL, NULL); - BLI_ghash_remove(editnurb->keyindex, b, NULL, NULL); + CVKeyIndex *index1 = popCVKeyIndex(editnurb, a); + CVKeyIndex *index2 = popCVKeyIndex(editnurb, b); if (index2) BLI_ghash_insert(editnurb->keyindex, a, index2); if (index1) BLI_ghash_insert(editnurb->keyindex, b, index1); @@ -1448,7 +1448,7 @@ static short isNurbselUV(Nurb *nu, int *u, int *v, int flag) if (*u == -1) *u = b; else return 0; } - else if (sel > 1) return 0; /* because sel==1 is still ok */ + else if (sel > 1) return 0; /* because sel == 1 is still ok */ } for (a = 0; a < nu->pntsu; a++) { @@ -2965,7 +2965,7 @@ static void subdividenurb(Object *obedit, int number_cuts) BKE_nurb_knot_calc_u(nu); } } - } /* End of 'else if (nu->pntsv==1)' */ + } /* End of 'else if (nu->pntsv == 1)' */ else if (nu->type == CU_NURBS) { /* This is a very strange test ... */ /** @@ -3085,7 +3085,7 @@ static void subdividenurb(Object *obedit, int number_cuts) nu->pntsv = (number_cuts + 1) * nu->pntsv - number_cuts; BKE_nurb_knot_calc_u(nu); BKE_nurb_knot_calc_v(nu); - } /* End of 'if (sel== nu->pntsu*nu->pntsv)' (subdivide entire NURB) */ + } /* End of 'if (sel == nu->pntsu*nu->pntsv)' (subdivide entire NURB) */ else { /* subdivide in v direction? */ sel = 0; @@ -3258,7 +3258,7 @@ static void findnearestNurbvert__doClosest(void *userData, Nurb *nu, BPoint *bp, static short findnearestNurbvert(ViewContext *vc, short sel, const int mval[2], Nurb **nurb, BezTriple **bezt, BPoint **bp) { - /* sel==1: selected gets a disadvantage */ + /* (sel == 1): selected gets a disadvantage */ /* in nurb and bezt or bp the nearest is written */ /* return 0 1 2: handlepunt */ struct { BPoint *bp; BezTriple *bezt; Nurb *nurb; int dist, hpoint, select, mval[2]; } data = {NULL}; @@ -3530,7 +3530,8 @@ void CURVE_OT_spline_type_set(wmOperatorType *ot) // {CU_CARDINAL, "CARDINAL", 0, "Cardinal", ""}, // {CU_BSPLINE, "B_SPLINE", 0, "B-Spline", ""}, {CU_NURBS, "NURBS", 0, "NURBS", ""}, - {0, NULL, 0, NULL, NULL}}; + {0, NULL, 0, NULL, NULL} + }; /* identifiers */ ot->name = "Set Spline Type"; @@ -3573,7 +3574,8 @@ void CURVE_OT_handle_type_set(wmOperatorType *ot) {5, "ALIGNED", 0, "Aligned", ""}, {6, "FREE_ALIGN", 0, "Free", ""}, {3, "TOGGLE_FREE_ALIGN", 0, "Toggle Free/Align", ""}, - {0, NULL, 0, NULL, NULL}}; + {0, NULL, 0, NULL, NULL} + }; /* identifiers */ ot->name = "Set Handle Type"; @@ -3765,8 +3767,8 @@ static void merge_2_nurb(wmOperator *op, ListBase *editnurb, Nurb *nu1, Nurb *nu if (is_u_selected(nu1, nu1->pntsu - 1) ) ; else { - /* For 2D curves blender uses orderv=0. It doesn't make any sense mathematically. */ - /* but after rotating orderu=0 will be confusing. */ + /* For 2D curves blender uses (orderv = 0). It doesn't make any sense mathematically. */ + /* but after rotating (orderu = 0) will be confusing. */ if (nu1->orderv == 0) nu1->orderv = 1; rotate_direction_nurb(nu1); @@ -4886,7 +4888,8 @@ void CURVE_OT_cyclic_toggle(wmOperatorType *ot) static EnumPropertyItem direction_items[] = { {0, "CYCLIC_U", 0, "Cyclic U", ""}, {1, "CYCLIC_V", 0, "Cyclic V", ""}, - {0, NULL, 0, NULL, NULL}}; + {0, NULL, 0, NULL, NULL} + }; /* identifiers */ ot->name = "Toggle Cyclic"; @@ -6007,7 +6010,8 @@ void CURVE_OT_delete(wmOperatorType *ot) {0, "SELECTED", 0, "Select", ""}, {1, "SEGMENT", 0, "Segment", ""}, {2, "ALL", 0, "All", ""}, - {0, NULL, 0, NULL, NULL}}; + {0, NULL, 0, NULL, NULL} + }; /* identifiers */ ot->name = "Delete"; @@ -6101,7 +6105,7 @@ int join_curve_exec(bContext *C, wmOperator *UNUSED(op)) /* trasnform all selected curves inverse in obact */ invert_m4_m4(imat, ob->obmat); - CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) + CTX_DATA_BEGIN(C, Base *, base, selected_editable_bases) { if (base->object->type == ob->type) { if (base->object != ob) { diff --git a/source/blender/editors/curve/lorem.c b/source/blender/editors/curve/lorem.c index 66b358e04e5..7823be3df6d 100644 --- a/source/blender/editors/curve/lorem.c +++ b/source/blender/editors/curve/lorem.c @@ -25,7 +25,7 @@ #include "curve_intern.h" -const char ED_lorem[]= { +const char ED_lorem[] = { 76, 111, 114, 101, 109, 32, 105, 112, 115, 117, 109, 32, 100, 111, 108, 111, 114, 32, 115, 105, 116, 32, 97, 109, 101, 116, 44, 32, 99, 111, 110, 115, 101, 99, 116, 101, 116, 117, 101, 114, 32, 97, 100, 105, 112, 105, 115, 99, 105, 110, 103, 32, 101, 108, 105, 116, 46, 32, 65, 108, 105, 113, 117, 97, 109, 32, 116, 114, 105, 115, 116, 105, 113, 117, 101, 32, 105, 110, 116, 101, 114, 100, 117, 109, 32, 115, 101, 109, 46, 32, 78, 117, 108, diff --git a/source/blender/editors/datafiles/Bfont.c b/source/blender/editors/datafiles/Bfont.c index 969bc5a844d..30126c97d34 100644 --- a/source/blender/editors/datafiles/Bfont.c +++ b/source/blender/editors/datafiles/Bfont.c @@ -30,8 +30,8 @@ * \brief DataToC output of file <Bfont> */ -int datatoc_Bfont_size= 25181; -char datatoc_Bfont[25181]= { +int datatoc_Bfont_size = 25181; +char datatoc_Bfont[25181] = { 128, 1, 228, 1, 0, 0, 37, 33, 80, 83, 45, 65, 100, 111, 98, 101, 70, 111, 110, 116, 45, 49, 46, 48, 58, 32, 66, 102, 111, 110, 116, 32, 48, 48, 49, 46, 48, 48, 49, 10, 49, 49, 32, 100, 105, 99, 116, 32, diff --git a/source/blender/editors/datafiles/startup.blend.c b/source/blender/editors/datafiles/startup.blend.c index 2a1d3a602d8..7337ab8c4e9 100644 --- a/source/blender/editors/datafiles/startup.blend.c +++ b/source/blender/editors/datafiles/startup.blend.c @@ -1,14 +1,13 @@ /* DataToC output of file <startup_blend> */ -int datatoc_startup_blend_size = 375392; +int datatoc_startup_blend_size = 379676; char datatoc_startup_blend[] = { - - 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 54, 51, 82, 69, 78, 68, 72, 0, 0, 0, 0,201,255,255,255,127, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 76, 69, 78, 68, 69, 82, 45,118, 50, 54, 51, 82, 69, 78, 68, 72, 0, 0, 0,144,195,255,255,255,127, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66, 48, 4, 0, 0, 16,197,255,255,255,127, 0, 0,217, 0, 0, 0, - 1, 0, 0, 0, 32, 32, 32, 54, 6, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1,104, 63,166, 5, 0, 0, 0, 0,120,184,168, 5, - 0, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 76, 79, 66, 48, 4, 0, 0,160,191,255,255,255,127, 0, 0, +218, 0, 0, 0, 1, 0, 0, 0, 32, 32, 32, 56, 8, 0, 0, 0,250, 0, 0, 0, 1, 0, 0, 1,184,100,201, 4, 0, 0, 0, 0, + 40, 92,222, 4, 0, 0, 0, 0, 0, 16, 0, 0,128, 32, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -40,1149 +39,1158 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 0, 0, 88, 1, 0, 0, 40, 39,147, 5, - 0, 0, 0, 0,154, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 87,105,110, 77, 97,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 0, 0, 88, 1, 0, 0, +248,149,200, 4, 0, 0, 0, 0,154, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 77, 87,105,110, 77, 97,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 40,147, 5, 0, 0, 0, 0,200, 40,147, 5, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, - 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,216,151, 87, 4, 0, 0, 0, 0,184,153, 87, 4, 0, 0, 0, 0,216,151, 87, 4, 0, 0, 0, 0,200,152, 87, 4, - 0, 0, 0, 0,184,153, 87, 4, 0, 0, 0, 0,216,227,132, 5, 0, 0, 0, 0,216,227,132, 5, 0, 0, 0, 0,216,227,132, 5, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,200, 40,147, 5, 0, 0, 0, 0,155, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,155, 87, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,104, 63,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 32, 4, 0, 0, 0, 0, 0, 0,238, 3, 0, 0, 0, 0, - 0, 0, 0, 0,120,111,103, 4, 0, 0, 0, 0,104,117,132, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0,216, 88,117, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,125,123, 5, - 0, 0, 0, 0,200,123,123, 5, 0, 0, 0, 0,152,124,123, 5, 0, 0, 0, 0,152,124,123, 5, 0, 0, 0, 0,104,117,132, 5, - 0, 0, 0, 0, 40, 68,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, - 8, 1, 0, 0, 24, 42,147, 5, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 65,110,105,109, 97,116,105,111,110, 0, - 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,137, 95, 4, 0, 0, 0, 0,216, 43,147, 5, 0, 0, 0, 0, 72, 44,147, 5, - 0, 0, 0, 0,136, 56,147, 5, 0, 0, 0, 0,248, 56,147, 5, 0, 0, 0, 0,184,125,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,104,137, 95, 4, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 44,140, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 44,140, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 48,137, 5, 0, 0, 0, 0,104,137, 95, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 48,137, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,136,135,137, 5, 0, 0, 0, 0,104, 44,140, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,222, 2, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,135,137, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,152,137, 5, - 0, 0, 0, 0, 24, 48,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,168,152,137, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 56,135, 5, 0, 0, 0, 0,136,135,137, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 56,135, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 61,135, 5, 0, 0, 0, 0,168,152,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8, 61,135, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0, 40, 76,135, 5, 0, 0, 0, 0, 88, 56,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40, 76,135, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 88,135, 5, - 0, 0, 0, 0, 8, 61,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,184, 88,135, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,104,133, 5, 0, 0, 0, 0, 40, 76,135, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,104,133, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 72,225,140, 5, 0, 0, 0, 0,184, 88,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4, 60, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,225,140, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,152, 68,137, 5, 0, 0, 0, 0,248,104,133, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152, 68,137, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,164,137, 5, - 0, 0, 0, 0, 72,225,140, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,248,164,137, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,144,139, 5, 0, 0, 0, 0,152, 68,137, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,144,139, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,213,132, 5, 0, 0, 0, 0,248,164,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,192, 1,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,213,132, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,168,134,139, 5, 0, 0, 0, 0,216,144,139, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,134,139, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 43,147, 5, - 0, 0, 0, 0,152,213,132, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 4, 1, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,104, 43,147, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 43,147, 5, 0, 0, 0, 0,168,134,139, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 43,147, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 43,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4, 60, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 44,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,184, 44,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 48,137, 5, 0, 0, 0, 0,104, 44,140, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 44,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 40, 45,147, 5, 0, 0, 0, 0, 72, 44,147, 5, 0, 0, 0, 0,168,152,137, 5, 0, 0, 0, 0,104, 44,140, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 45,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,152, 45,147, 5, 0, 0, 0, 0,184, 44,147, 5, 0, 0, 0, 0, 88, 56,135, 5, 0, 0, 0, 0, 24, 48,137, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 45,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 8, 46,147, 5, 0, 0, 0, 0, 40, 45,147, 5, 0, 0, 0, 0, 88, 56,135, 5, 0, 0, 0, 0,168,152,137, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 46,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,120, 46,147, 5, 0, 0, 0, 0,152, 45,147, 5, 0, 0, 0, 0,104,137, 95, 4, 0, 0, 0, 0, 8, 61,135, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 46,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,232, 46,147, 5, 0, 0, 0, 0, 8, 46,147, 5, 0, 0, 0, 0, 8, 61,135, 5, 0, 0, 0, 0,136,135,137, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 46,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 88, 47,147, 5, 0, 0, 0, 0,120, 46,147, 5, 0, 0, 0, 0, 88, 56,135, 5, 0, 0, 0, 0, 40, 76,135, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 47,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,200, 47,147, 5, 0, 0, 0, 0,232, 46,147, 5, 0, 0, 0, 0, 8, 61,135, 5, 0, 0, 0, 0,184, 88,135, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 47,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 56, 48,147, 5, 0, 0, 0, 0, 88, 47,147, 5, 0, 0, 0, 0,248,104,133, 5, 0, 0, 0, 0,136,135,137, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 48,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,168, 48,147, 5, 0, 0, 0, 0,200, 47,147, 5, 0, 0, 0, 0,248,104,133, 5, 0, 0, 0, 0,184, 88,135, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 48,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 24, 49,147, 5, 0, 0, 0, 0, 56, 48,147, 5, 0, 0, 0, 0,104,137, 95, 4, 0, 0, 0, 0, 72,225,140, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 49,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,136, 49,147, 5, 0, 0, 0, 0,168, 48,147, 5, 0, 0, 0, 0, 40, 76,135, 5, 0, 0, 0, 0,152, 68,137, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 49,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,248, 49,147, 5, 0, 0, 0, 0, 24, 49,147, 5, 0, 0, 0, 0, 8, 61,135, 5, 0, 0, 0, 0,152, 68,137, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 49,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,104, 50,147, 5, 0, 0, 0, 0,136, 49,147, 5, 0, 0, 0, 0,152, 68,137, 5, 0, 0, 0, 0, 72,225,140, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 50,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,216, 50,147, 5, 0, 0, 0, 0,248, 49,147, 5, 0, 0, 0, 0,248,164,137, 5, 0, 0, 0, 0, 72,225,140, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 50,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 72, 51,147, 5, 0, 0, 0, 0,104, 50,147, 5, 0, 0, 0, 0,152, 68,137, 5, 0, 0, 0, 0,248,164,137, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 51,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,184, 51,147, 5, 0, 0, 0, 0,216, 50,147, 5, 0, 0, 0, 0,168,152,137, 5, 0, 0, 0, 0,216,144,139, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 51,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 40, 52,147, 5, 0, 0, 0, 0, 72, 51,147, 5, 0, 0, 0, 0, 40, 76,135, 5, 0, 0, 0, 0,216,144,139, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 52,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,152, 52,147, 5, 0, 0, 0, 0,184, 51,147, 5, 0, 0, 0, 0,248,164,137, 5, 0, 0, 0, 0,216,144,139, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 52,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 8, 53,147, 5, 0, 0, 0, 0, 40, 52,147, 5, 0, 0, 0, 0,152,213,132, 5, 0, 0, 0, 0, 72,225,140, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 53,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,120, 53,147, 5, 0, 0, 0, 0,152, 52,147, 5, 0, 0, 0, 0,248,164,137, 5, 0, 0, 0, 0,168,134,139, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 53,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,232, 53,147, 5, 0, 0, 0, 0, 8, 53,147, 5, 0, 0, 0, 0,152,213,132, 5, 0, 0, 0, 0,168,134,139, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 53,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 88, 54,147, 5, 0, 0, 0, 0,120, 53,147, 5, 0, 0, 0, 0,184, 88,135, 5, 0, 0, 0, 0,104, 43,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 54,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,200, 54,147, 5, 0, 0, 0, 0,232, 53,147, 5, 0, 0, 0, 0, 40, 76,135, 5, 0, 0, 0, 0,104, 43,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 54,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 56, 55,147, 5, 0, 0, 0, 0, 88, 54,147, 5, 0, 0, 0, 0, 88, 56,135, 5, 0, 0, 0, 0,216, 43,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 55,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,168, 55,147, 5, 0, 0, 0, 0,200, 54,147, 5, 0, 0, 0, 0,248,104,133, 5, 0, 0, 0, 0,216, 43,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 55,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 24, 56,147, 5, 0, 0, 0, 0, 56, 55,147, 5, 0, 0, 0, 0,104, 43,147, 5, 0, 0, 0, 0,216, 43,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 56,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0,136, 56,147, 5, 0, 0, 0, 0,168, 55,147, 5, 0, 0, 0, 0,152,213,132, 5, 0, 0, 0, 0,168,152,137, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 56,147, 5, 0, 0, 0, 0,213, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 56,147, 5, 0, 0, 0, 0,168,134,139, 5, 0, 0, 0, 0,216,144,139, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,248, 56,147, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,200, 60,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,152,137, 5, 0, 0, 0, 0,104, 44,140, 5, - 0, 0, 0, 0, 24, 48,137, 5, 0, 0, 0, 0, 88, 56,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 88, 33,140, 5, 0, 0, 0, 0, 88, 33,140, 5, 0, 0, 0, 0,232, 57,147, 5, 0, 0, 0, 0, 88, 59,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 57,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 88, 59,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, - 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, - 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,152,151,200, 4, 0, 0, 0, 0,152,151,200, 4, 0, 0, 0, 0,152,151,200, 4, 0, 0, 0, 0, +152,151,200, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8,240,133, 3, 0, 0, 0, 0, 88,214,133, 3, 0, 0, 0, 0, 8,240,133, 3, 0, 0, 0, 0, +136, 69,133, 3, 0, 0, 0, 0, 88,214,133, 3, 0, 0, 0, 0,216, 42,133, 3, 0, 0, 0, 0,216, 42,133, 3, 0, 0, 0, 0, +216, 42,133, 3, 0, 0, 0, 0, 68, 65, 84, 65, 0, 1, 0, 0,152,151,200, 4, 0, 0, 0, 0,155, 1, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 2,134, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +184,100,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 7, 1, 0,126, 7,146, 4, 0, 0, 0, 0, 1, 0,238, 3, + 0, 0, 0, 0, 1, 0, 0, 0, 40,135,149, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0,136,189,149, 3, 0, 0, 0, 0,248, 64,187, 4, 0, 0, 0, 0,248, 64,187, 4, 0, 0, 0, 0, + 8,155,149, 3, 0, 0, 0, 0,104,153,149, 3, 0, 0, 0, 0, 56, 68,133, 3, 0, 0, 0, 0, 56,154,149, 3, 0, 0, 0, 0, + 88, 37,106, 3, 0, 0, 0, 0, 8,247,180, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 78, 0, 0, 8, 1, 0, 0,232,152,200, 4, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 65,110,105,109, 97,116, +105,111,110, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,247,186, 4, 0, 0, 0, 0, 72,157,200, 4, 0, 0, 0, 0, +184,157,200, 4, 0, 0, 0, 0,248,169,200, 4, 0, 0, 0, 0,104,170,200, 4, 0, 0, 0, 0,104,238,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 8,247,186, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136, 44,186, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +136, 44,186, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,112,149, 3, 0, 0, 0, 0, 8,247,186, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,112,149, 3, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,104, 25,189, 4, 0, 0, 0, 0,136, 44,186, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 4,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 25,189, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 56, 84,186, 4, 0, 0, 0, 0, 56,112,149, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 56, 84,186, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8, 87,187, 4, 0, 0, 0, 0, +104, 25,189, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 8, 87,187, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,164,188, 4, 0, 0, 0, 0, 56, 84,186, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,164,188, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,216,112,189, 4, 0, 0, 0, 0, 8, 87,187, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,112,189, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 40,221,188, 4, 0, 0, 0, 0,232,164,188, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4,195, 2, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 40,221,188, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,136,140, 3, 0, 0, 0, 0, +216,112,189, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 8,136,140, 3, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,154,200, 4, 0, 0, 0, 0, 40,221,188, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 60, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,154,200, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,168,154,200, 4, 0, 0, 0, 0, 8,136,140, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,154,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 24,155,200, 4, 0, 0, 0, 0, 56,154,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 88, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 24,155,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,155,200, 4, 0, 0, 0, 0, +168,154,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 88, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +136,155,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,155,200, 4, 0, 0, 0, 0, 24,155,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192, 1,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,155,200, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,104,156,200, 4, 0, 0, 0, 0,136,155,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,156,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +216,156,200, 4, 0, 0, 0, 0,248,155,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 4, 1, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,216,156,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,157,200, 4, 0, 0, 0, 0, +104,156,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 60, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 72,157,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,156,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 60, 2, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,157,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 40,158,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,112,149, 3, 0, 0, 0, 0, +136, 44,186, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,158,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,152,158,200, 4, 0, 0, 0, 0,184,157,200, 4, 0, 0, 0, 0,136, 44,186, 4, 0, 0, 0, 0, + 56, 84,186, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,158,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 8,159,200, 4, 0, 0, 0, 0, 40,158,200, 4, 0, 0, 0, 0, 56,112,149, 3, 0, 0, 0, 0, + 8, 87,187, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,159,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,120,159,200, 4, 0, 0, 0, 0,152,158,200, 4, 0, 0, 0, 0, 56, 84,186, 4, 0, 0, 0, 0, + 8, 87,187, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,159,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,232,159,200, 4, 0, 0, 0, 0, 8,159,200, 4, 0, 0, 0, 0, 8,247,186, 4, 0, 0, 0, 0, +232,164,188, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,159,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 88,160,200, 4, 0, 0, 0, 0,120,159,200, 4, 0, 0, 0, 0,232,164,188, 4, 0, 0, 0, 0, +104, 25,189, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,160,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,200,160,200, 4, 0, 0, 0, 0,232,159,200, 4, 0, 0, 0, 0, 8, 87,187, 4, 0, 0, 0, 0, +216,112,189, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,160,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 56,161,200, 4, 0, 0, 0, 0, 88,160,200, 4, 0, 0, 0, 0,232,164,188, 4, 0, 0, 0, 0, + 40,221,188, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,161,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,168,161,200, 4, 0, 0, 0, 0,200,160,200, 4, 0, 0, 0, 0, 8,136,140, 3, 0, 0, 0, 0, +104, 25,189, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,161,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 24,162,200, 4, 0, 0, 0, 0, 56,161,200, 4, 0, 0, 0, 0, 8,136,140, 3, 0, 0, 0, 0, + 40,221,188, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,162,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,136,162,200, 4, 0, 0, 0, 0,168,161,200, 4, 0, 0, 0, 0, 8,247,186, 4, 0, 0, 0, 0, + 56,154,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,162,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,248,162,200, 4, 0, 0, 0, 0, 24,162,200, 4, 0, 0, 0, 0,216,112,189, 4, 0, 0, 0, 0, +168,154,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,162,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,104,163,200, 4, 0, 0, 0, 0,136,162,200, 4, 0, 0, 0, 0,232,164,188, 4, 0, 0, 0, 0, +168,154,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,163,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,216,163,200, 4, 0, 0, 0, 0,248,162,200, 4, 0, 0, 0, 0, 56,154,200, 4, 0, 0, 0, 0, +168,154,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,163,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 72,164,200, 4, 0, 0, 0, 0,104,163,200, 4, 0, 0, 0, 0, 56,154,200, 4, 0, 0, 0, 0, + 24,155,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,164,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,184,164,200, 4, 0, 0, 0, 0,216,163,200, 4, 0, 0, 0, 0,168,154,200, 4, 0, 0, 0, 0, + 24,155,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,164,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 40,165,200, 4, 0, 0, 0, 0, 72,164,200, 4, 0, 0, 0, 0, 56, 84,186, 4, 0, 0, 0, 0, +136,155,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,165,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,152,165,200, 4, 0, 0, 0, 0,184,164,200, 4, 0, 0, 0, 0,216,112,189, 4, 0, 0, 0, 0, +136,155,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,165,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 8,166,200, 4, 0, 0, 0, 0, 40,165,200, 4, 0, 0, 0, 0, 24,155,200, 4, 0, 0, 0, 0, +136,155,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,166,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,120,166,200, 4, 0, 0, 0, 0,152,165,200, 4, 0, 0, 0, 0, 56,154,200, 4, 0, 0, 0, 0, +248,155,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,166,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,232,166,200, 4, 0, 0, 0, 0, 8,166,200, 4, 0, 0, 0, 0, 24,155,200, 4, 0, 0, 0, 0, +104,156,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,166,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 88,167,200, 4, 0, 0, 0, 0,120,166,200, 4, 0, 0, 0, 0,248,155,200, 4, 0, 0, 0, 0, +104,156,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,167,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,200,167,200, 4, 0, 0, 0, 0,232,166,200, 4, 0, 0, 0, 0, 40,221,188, 4, 0, 0, 0, 0, +216,156,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,167,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 56,168,200, 4, 0, 0, 0, 0, 88,167,200, 4, 0, 0, 0, 0,216,112,189, 4, 0, 0, 0, 0, +216,156,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,168,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,168,168,200, 4, 0, 0, 0, 0,200,167,200, 4, 0, 0, 0, 0, 8, 87,187, 4, 0, 0, 0, 0, + 72,157,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,168,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 24,169,200, 4, 0, 0, 0, 0, 56,168,200, 4, 0, 0, 0, 0, 8,136,140, 3, 0, 0, 0, 0, + 72,157,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,169,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,136,169,200, 4, 0, 0, 0, 0,168,168,200, 4, 0, 0, 0, 0,216,156,200, 4, 0, 0, 0, 0, + 72,157,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,169,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0,248,169,200, 4, 0, 0, 0, 0, 24,169,200, 4, 0, 0, 0, 0, 56, 84,186, 4, 0, 0, 0, 0, +248,155,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,169,200, 4, 0, 0, 0, 0, +214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,169,200, 4, 0, 0, 0, 0,136,155,200, 4, 0, 0, 0, 0, +104,156,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,104,170,200, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0, 56,174,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 84,186, 4, 0, 0, 0, 0, +136, 44,186, 4, 0, 0, 0, 0, 56,112,149, 3, 0, 0, 0, 0, 8, 87,187, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,168,247,200, 4, 0, 0, 0, 0,168,247,200, 4, 0, 0, 0, 0, 88,171,200, 4, 0, 0, 0, 0, +200,172,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,171,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +200,172,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,148, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 59,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,232, 57,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0, -255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, - 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,222, 2, 0, 0,222, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,172,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88,171,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, + 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0,222, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200, 60,147, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88, 85,147, 5, - 0, 0, 0, 0,248, 56,147, 5, 0, 0, 0, 0, 8, 61,135, 5, 0, 0, 0, 0,184, 88,135, 5, 0, 0, 0, 0,248,104,133, 5, - 0, 0, 0, 0,136,135,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, - 59, 1, 0, 0, 4, 4,216, 0, 60, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 84,147, 5, - 0, 0, 0, 0, 24, 84,147, 5, 0, 0, 0, 0,184, 61,147, 5, 0, 0, 0, 0, 40, 63,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,184, 61,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40, 63,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 98, 39, 38, 54, 0, 0, 88, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 87, 67, 0, 0,200, 65, 0, 0, 87, 67, - 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,216, 0, 26, 0,216, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 34, 1, 0, 0, - 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 56,174,200, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, +200,198,200, 4, 0, 0, 0, 0,104,170,200, 4, 0, 0, 0, 0,232,164,188, 4, 0, 0, 0, 0, 40,221,188, 4, 0, 0, 0, 0, + 8,136,140, 3, 0, 0, 0, 0,104, 25,189, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, + 0, 0, 0, 0, 59, 1, 0, 0, 4, 4,216, 0, 60, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +136,197,200, 4, 0, 0, 0, 0,136,197,200, 4, 0, 0, 0, 0, 40,175,200, 4, 0, 0, 0, 0,152,176,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0, 40, 63,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 61,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 71, 67, 1, 0,145,195, - 0, 0, 0, 0,199, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,216, 0, 34, 1,199, 0, - 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, - 33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 64,147, 5, 0, 0, 0, 0,120, 82,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,152, 64,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56, 66,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99, -111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99, -111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 40,175,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,152,176,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 98, 39, 38, 54, 0, 0, 88, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 87, 67, 0, 0,200, 65, + 0, 0, 87, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,216, 0, + 26, 0,216, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, + 34, 1, 0, 0, 59, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 26, 0, 0, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,199, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,152,176,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40,175,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 71, 67, + 1, 0,145,195, 0, 0, 0, 0,199, 0, 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 62, 1, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,216, 0, + 34, 1,199, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0,240, 4, 0, 0, + 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,178,200, 4, 0, 0, 0, 0,232,195,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 66,147, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0,216, 67,147, 5, 0, 0, 0, 0,152, 64,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0, 8,178,200, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168,179,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, + 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, + 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,199, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,135,255,199, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,179,200, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 72,181,200, 4, 0, 0, 0, 0, 8,178,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,216, 67,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120, 69,147, 5, 0, 0, 0, 0, 56, 66,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97, -121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97, -121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,199, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,199, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 69,147, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0, 24, 71,147, 5, 0, 0, 0, 0,216, 67,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0, 72,181,200, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,182,200, 4, 0, 0, 0, 0, +168,179,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140,254,199, 0,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,199, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 24, 71,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184, 72,147, 5, 0, 0, 0, 0,120, 69,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110, -116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110, -116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254,199, 0, 58, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,182,200, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0,136,184,200, 4, 0, 0, 0, 0, 72,181,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184, 72,147, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0, 88, 74,147, 5, 0, 0, 0, 0, 24, 71,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,199, 0,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 34,254,199, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0,136,184,200, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40,186,200, 4, 0, 0, 0, 0, +232,182,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, + 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254,199, 0, 58, 0, + 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 88, 74,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248, 75,147, 5, 0, 0, 0, 0,184, 72,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, - 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, - 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254,199, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,186,200, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0,200,187,200, 4, 0, 0, 0, 0,136,184,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248, 75,147, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0,152, 77,147, 5, 0, 0, 0, 0, 88, 74,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,199, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,242,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0,200,187,200, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,189,200, 4, 0, 0, 0, 0, + 40,186,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,152, 77,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56, 79,147, 5, 0, 0, 0, 0,248, 75,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111, -115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111, -115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115, -105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253,199, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254,199, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 79,147, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0,216, 80,147, 5, 0, 0, 0, 0,152, 77,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,189,200, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 8,191,200, 4, 0, 0, 0, 0,200,187,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,194,253,199, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,216, 80,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120, 82,147, 5, 0, 0, 0, 0, 56, 79,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117, -116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117, -116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253,199, 0,130, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0, 8,191,200, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168,192,200, 4, 0, 0, 0, 0, +104,189,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, + 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253,199, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 82,147, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 80,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,192,200, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 72,194,200, 4, 0, 0, 0, 0, 8,191,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253,199, 0, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -248, 0, 0, 0, 24, 84,147, 5, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0, 72,194,200, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,195,200, 4, 0, 0, 0, 0, +168,192,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253,199, 0,130, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,195,200, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,194,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 85,147, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 72, 90,147, 5, 0, 0, 0, 0,200, 60,147, 5, 0, 0, 0, 0,104,137, 95, 4, 0, 0, 0, 0, 72,225,140, 5, - 0, 0, 0, 0,152, 68,137, 5, 0, 0, 0, 0, 8, 61,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 23, 4, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 15, 15, 24, 4, 88, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 89,147, 5, 0, 0, 0, 0, 40, 89,147, 5, 0, 0, 0, 0, 72, 86,147, 5, 0, 0, 0, 0,184, 87,147, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 86,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,184, 87,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,140, 68, 0, 0, 0, 0, 0, 0,208, 65, 39,182,158, 55, - 0, 0,131, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,130, 68, - 0, 0,200, 65, 0,224,130, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0, 24, 4, 26, 0, 24, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 23, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 26, 0, - 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253,199, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 87,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72, 86,147, 5, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66,112,189, 17,192, -246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 23, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0, 0, 0,128, 63, - 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, - 8, 0, 24, 4, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 23, 4, 0, 0, 26, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,248, 0, 0, 0,136,197,200, 4, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 40, 89,147, 5, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200,198,200, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0,184,203,200, 4, 0, 0, 0, 0, 56,174,200, 4, 0, 0, 0, 0, 8,247,186, 4, 0, 0, 0, 0, + 56,154,200, 4, 0, 0, 0, 0,168,154,200, 4, 0, 0, 0, 0,232,164,188, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 15, 15, 24, 4, 88, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,152,202,200, 4, 0, 0, 0, 0,152,202,200, 4, 0, 0, 0, 0,184,199,200, 4, 0, 0, 0, 0, + 40,201,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,199,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 40,201,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,140, 68, 0, 0, 0, 0, 0, 0,208, 65, + 39,182,158, 55, 0, 0,131, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,224,130, 68, 0, 0,200, 65, 0,224,130, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0, 24, 4, 26, 0, 24, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72, 90,147, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,168, 96,147, 5, 0, 0, 0, 0, 88, 85,147, 5, 0, 0, 0, 0,184, 88,135, 5, 0, 0, 0, 0,104, 43,147, 5, - 0, 0, 0, 0,216, 43,147, 5, 0, 0, 0, 0,248,104,133, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, -240, 4, 0, 0, 61, 1, 0, 0, 59, 2, 0, 0, 3, 3,216, 0,255, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 94,147, 5, 0, 0, 0, 0, 24, 94,147, 5, 0, 0, 0, 0, 56, 91,147, 5, 0, 0, 0, 0,168, 92,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 91,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,168, 92,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 98, 39, 38, 54, - 0, 0, 88, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 87, 67, - 0, 0,200, 65, 0, 0, 87, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0,216, 0, 26, 0,216, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, -240, 4, 0, 0, 34, 2, 0, 0, 59, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 26, 0, - 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,201,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,184,199,200, 4, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, +112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 18, 0, 0, 0, 61, 0, 0, 0, + 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, + 4, 0, 0, 4, 8, 0, 24, 4, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 4, 0, 0, 26, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 4, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168, 92,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 91,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 71, 67, 0, 0, 83,195, 0, 0, 0, 0,199, 0, 0, 0,216, 0, 0, 0, 18, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0, -198, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 18, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 2, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, - 6, 0,216, 0,229, 0,199, 0,211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, -240, 4, 0, 0, 61, 1, 0, 0, 33, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0,229, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,152,202,200, 4, 0, 0, 0, 0,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, 24, 94,147, 5, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184,203,200, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0, 24,210,200, 4, 0, 0, 0, 0,200,198,200, 4, 0, 0, 0, 0, 40,221,188, 4, 0, 0, 0, 0, +216,156,200, 4, 0, 0, 0, 0, 72,157,200, 4, 0, 0, 0, 0, 8,136,140, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 4, 0, 0,240, 4, 0, 0, 61, 1, 0, 0, 59, 2, 0, 0, 3, 3,216, 0,255, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,136,207,200, 4, 0, 0, 0, 0,136,207,200, 4, 0, 0, 0, 0,168,204,200, 4, 0, 0, 0, 0, + 24,206,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,204,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 24,206,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, + 98, 39, 38, 54, 0, 0, 88, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 87, 67, 0, 0,200, 65, 0, 0, 87, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0,216, 0, 26, 0,216, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 4, 0, 0,240, 4, 0, 0, 34, 2, 0, 0, 59, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +216, 0, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,206,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,168,204,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 71, 67, 0, 0, 83,195, 0, 0, 0, 0,199, 0, 0, 0,216, 0, 0, 0, 18, 0, 0, 0,228, 0, 0, 0, + 0, 0, 0, 0,198, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,198, 0, 0, 0, 18, 0, 0, 0,228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 2, 0, 0, 2, 0, 3, 3, + 0, 0, 12, 4, 6, 0,216, 0,229, 0,199, 0,211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 4, 0, 0,240, 4, 0, 0, 61, 1, 0, 0, 33, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +216, 0,229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,114,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,168,114,137, 5, - 0, 0, 0, 0,238, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,120, 95,147, 5, 0, 0, 0, 0, 68, 65, 84, 65, -224, 0, 0, 0,120, 95,147, 5, 0, 0, 0, 0,237, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,120,184,168, 5, - 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,120,184,168, 5, - 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,210,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184,219,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184, 17,169, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,248,232,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,255,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 88,226,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,205,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216,204,168, 5, - 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,168, 96,147, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 56,110,147, 5, 0, 0, 0, 0, 72, 90,147, 5, 0, 0, 0, 0,248,164,137, 5, - 0, 0, 0, 0,216,144,139, 5, 0, 0, 0, 0, 40, 76,135, 5, 0, 0, 0, 0,152, 68,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0,194, 2, 0, 0, 1, 1, 87, 2,106, 2, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,108,147, 5, 0, 0, 0, 0,136,108,147, 5, 0, 0, 0, 0,152, 97,147, 5, - 0, 0, 0, 0, 88,103,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152, 97,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 8, 99,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0,192, 21, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 2, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128, 21, 68, 0, 0,200, 65, 0,128, 21, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 87, 2, 26, 0, 87, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 99,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,120,100,147, 5, 0, 0, 0, 0,152, 97,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, - 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, - 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 80, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,100,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,232,101,147, 5, 0, 0, 0, 0, 8, 99,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, - 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,101,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 88,103,147, 5, 0, 0, 0, 0,120,100,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, -147, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0, -147, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,148, 3,163, 0,130, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 23, 4, 0, 0, 23, 4, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,136,207,200, 4, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,103,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,101,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 2, 80, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,217,190, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0, +184,217,190, 4, 0, 0, 0, 0,238, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,232,208,200, 4, 0, 0, 0, 0, + 68, 65, 84, 65,224, 0, 0, 0,232,208,200, 4, 0, 0, 0, 0,237, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 40, 92,222, 4, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, + 40, 92,222, 4, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 8,118,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136,127,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +168,181,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,140,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +248,162,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 56,134,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +168,113,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, +152,112,222, 4, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, + 24,210,200, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,168,223,200, 4, 0, 0, 0, 0,184,203,200, 4, 0, 0, 0, 0, + 24,155,200, 4, 0, 0, 0, 0,136,155,200, 4, 0, 0, 0, 0,216,112,189, 4, 0, 0, 0, 0,168,154,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0,194, 2, 0, 0, 1, 1, 87, 2,106, 2, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,221,200, 4, 0, 0, 0, 0,248,221,200, 4, 0, 0, 0, 0, + 8,211,200, 4, 0, 0, 0, 0,200,216,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,211,200, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,120,212,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 21, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 2, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 21, 68, 0, 0,200, 65, 0,128, 21, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 87, 2, 26, 0, 87, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 87, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,212,200, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,232,213,200, 4, 0, 0, 0, 0, 8,211,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 80, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,213,200, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 88,215,200, 4, 0, 0, 0, 0,120,212,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, + 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0,193, 1, 0, 0,115, 0, 0, 0,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,215,200, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,200,216,200, 4, 0, 0, 0, 0,232,213,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0,128, 96,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128, 96,196, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, + 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, + 18, 0, 0, 0,147, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,148, 3,163, 0,130, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 23, 4, 0, 0, 23, 4, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,200,104,147, 5, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,200,104,147, 5, 0, 0, 0, 0,174, 0, 0, 0, - 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,167,141, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 74,215, 76,190, - 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, - 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, - 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, - 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192,248,209,213, 64, - 0, 0,128, 63,178,157,229, 62,209,162,227,190, 48,180, 81,191,184,158, 81,191,117, 90,127, 63, 13,114, 91, 62, 26, 63,185, 62, - 35, 44,185, 62,145,180,109,188,105,147,125, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65, -214,211,111, 65, 99,240,191, 62,110,116, 85, 63, 64,185, 70,188, 0, 0, 82,180, 48,221,185,190, 44, 45, 51, 62, 28, 11, 79, 63, - 0, 0, 56,179, 67,108,117,194,183,204,216, 65,105,156, 5,194,212,247,159,192,235, 62,114, 66, 59,254,213,193,158,225, 3, 66, - 55, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, - 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, - 0, 0,128, 63,178,157,229, 62,209,162,227,190, 48,180, 81,191,184,158, 81,191,117, 90,127, 63, 13,114, 91, 62, 26, 63,185, 62, - 35, 44,185, 62,145,180,109,188,105,147,125, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 9,185,108, 65, -214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,216,200, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,215,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,193, 1, 0, 0, 23, 4, 0, 0,115, 0, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 87, 2, 80, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56,218,200, 4, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 56,218,200, 4, 0, 0, 0, 0, +175, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,167,141, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, + 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, + 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190,142, 74, 70, 62, +166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65,111,121,173,192, +248,209,213, 64, 0, 0,128, 63,178,157,229, 62,209,162,227,190, 48,180, 81,191,184,158, 81,191,117, 90,127, 63, 13,114, 91, 62, + 26, 63,185, 62, 35, 44,185, 62,145,180,109,188,105,147,125, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, + 9,185,108, 65,214,211,111, 65, 99,240,191, 62,110,116, 85, 63, 64,185, 70,188, 0, 0, 82,180, 48,221,185,190, 44, 45, 51, 62, + 28, 11, 79, 63, 0, 0, 56,179, 67,108,117,194,183,204,216, 65,105,156, 5,194,212,247,159,192,235, 62,114, 66, 59,254,213,193, +158,225, 3, 66, 55, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, + 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +214,211,111,193, 0, 0,128, 63,178,157,229, 62,209,162,227,190, 48,180, 81,191,184,158, 81,191,117, 90,127, 63, 13,114, 91, 62, + 26, 63,185, 62, 35, 44,185, 62,145,180,109,188,105,147,125, 63,138, 84,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, + 9,185,108, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, - 0, 0, 0, 0,236, 15, 72, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,255,255, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 32, 33, 12, 66, 86,152,137, 66, -113, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,136,108,147, 5, - 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 56,110,147, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,232,118,147, 5, 0, 0, 0, 0,168, 96,147, 5, 0, 0, 0, 0, 72,225,140, 5, 0, 0, 0, 0,152,213,132, 5, - 0, 0, 0, 0,168,134,139, 5, 0, 0, 0, 0,248,164,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 1, 0, 0, 89, 0, 0, 0, 3, 1, 0, 0, 2, 2,192, 1,171, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,232,116,147, 5, 0, 0, 0, 0,232,116,147, 5, 0, 0, 0, 0, 40,111,147, 5, 0, 0, 0, 0,120,115,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,111,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,152,112,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0,224, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,223, 67, - 0, 0,200, 65, 0,128,223, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0,192, 1, 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 1, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 26, 0, - 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,112,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 8,114,147, 5, - 0, 0, 0, 0, 40,111,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 72, 67, 0, 0,254,194, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, 0, 0, 0, 4, - 6, 0,217, 0,145, 0,200, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -216, 0, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0,145, 0, - 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,114,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,120,115,147, 5, - 0, 0, 0, 0,152,112,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,163, 91, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65,214,211,111, 65, + 0, 0, 0, 0, 0, 0, 0, 0,236, 15, 72, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, +255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 32, 33, 12, 66, + 86,152,137, 66,113, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, +248,221,200, 4, 0, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, + 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, + 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,168,223,200, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0,152,231,200, 4, 0, 0, 0, 0, 24,210,200, 4, 0, 0, 0, 0, 56,154,200, 4, 0, 0, 0, 0, +248,155,200, 4, 0, 0, 0, 0,104,156,200, 4, 0, 0, 0, 0, 24,155,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,191, 1, 0, 0, 89, 0, 0, 0, 3, 1, 0, 0, 2, 2,192, 1,171, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88,230,200, 4, 0, 0, 0, 0, 88,230,200, 4, 0, 0, 0, 0,152,224,200, 4, 0, 0, 0, 0, +232,228,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,224,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 8,226,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,224, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,223, 67, 0, 0,200, 65, 0,128,223, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0,192, 1, 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,191, 1, 0, 0, 89, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +192, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,226,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +120,227,200, 4, 0, 0, 0, 0,152,224,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,254,194, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, + 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, + 0, 0, 0, 4, 6, 0,217, 0,145, 0,200, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,216, 0, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +217, 0,145, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,227,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +232,228,200, 4, 0, 0, 0, 0, 8,226,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +191, 1, 0, 0,191, 1, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,228,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,120,227,200, 4, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, + 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, + 18, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,230, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, +111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 0, 0,231, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +217, 0, 0, 0,191, 1, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +231, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 88,230,200, 4, 0, 0, 0, 0,182, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,152, 98,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0,152, 98,200, 4, 0, 0, 0, 0, + 38, 1, 0, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +152,231,200, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,104,238,200, 4, 0, 0, 0, 0,168,223,200, 4, 0, 0, 0, 0, +248,155,200, 4, 0, 0, 0, 0, 56, 84,186, 4, 0, 0, 0, 0,136,155,200, 4, 0, 0, 0, 0,104,156,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0,194, 2, 0, 0, 12, 12,192, 1,190, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,236,200, 4, 0, 0, 0, 0,216,236,200, 4, 0, 0, 0, 0, +136,232,200, 4, 0, 0, 0, 0,104,235,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,232,200, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,248,233,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 94, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, -191, 1, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,223, 67, 0, 0,200, 65, 0,128,223, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 1, 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0, 30, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,115,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,114,147, 5, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, 0, 0, 0, 0, - 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0, 18, 0, 0, 0, -230, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,230, 0, 0, 0, 18, 0, 0, 0,144, 0, 0, 0,111, 18,131, 58, -111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0,231, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,217, 0, 0, 0, -191, 1, 0, 0,115, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,231, 0,145, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,233,200, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,104,235,200, 4, 0, 0, 0, 0,136,232,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 67, + 0, 0, 0,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,201,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, + 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,200, 0,164, 1,200, 0,146, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 31, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,200, 0,164, 1, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,235,200, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,233,200, 4, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, + 0, 0, 72,194, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0,201,195, 0, 0, 0, 0,231, 0, 0, 0,248, 0, 0, 0, + 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, + 18, 0, 0, 0,163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72, 0, 64, 28, 70, 10,215, 35, 60, 0, 0, 72, 66, + 74, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 4, 4, 0,248, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,200, 0, 0, 0,191, 1, 0, 0, 31, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,248, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,232,116,147, 5, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 72, 1, 0, 0,216,236,200, 4, 0, 0, 0, 0, + 39, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40,118,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, - 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, 40,118,147, 5, 0, 0, 0, 0, 38, 1, 0, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232,118,147, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184,125,147, 5, 0, 0, 0, 0, 56,110,147, 5, 0, 0, 0, 0,152,213,132, 5, - 0, 0, 0, 0,168,152,137, 5, 0, 0, 0, 0,216,144,139, 5, 0, 0, 0, 0,168,134,139, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0,194, 2, 0, 0, 12, 12,192, 1,190, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,124,147, 5, 0, 0, 0, 0, 40,124,147, 5, 0, 0, 0, 0,216,119,147, 5, - 0, 0, 0, 0,184,122,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,119,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 72,121,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 94, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,224, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128,223, 67, 0, 0,200, 65, 0,128,223, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 1, 26, 0,192, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,191, 1, 0, 0, 5, 1, 0, 0, 30, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,192, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,104,238,200, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,231,200, 4, 0, 0, 0, 0,216,156,200, 4, 0, 0, 0, 0, +216,112,189, 4, 0, 0, 0, 0, 8, 87,187, 4, 0, 0, 0, 0, 72,157,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0,194, 2, 0, 0, 1, 1,216, 0,134, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,248,245,200, 4, 0, 0, 0, 0,248,245,200, 4, 0, 0, 0, 0, 88,239,200, 4, 0, 0, 0, 0, +200,240,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,239,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +200,240,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,165, 67, 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, + 0,128,164, 67, 0, 0,200, 65, 0,128,164, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0, 74, 1, 24, 0, 74, 1, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,121,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,184,122,147, 5, 0, 0, 0, 0,216,119,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 67, 0, 0, 0,194, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,201,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, -163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 4, 0, 0, - 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,200, 0,164, 1,200, 0,146, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 31, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,200, 0,164, 1, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,240,200, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88,239,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,122,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,121,147, 5, 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0, 72,194, - 0, 0, 0, 0, 0, 0, 32,193, 0, 0,104, 68, 0, 0,201,195, 0, 0, 0, 0,231, 0, 0, 0,248, 0, 0, 0, 18, 0, 0, 0, -163, 1, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,230, 0, 0, 0, 18, 0, 0, 0, -163, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72, 0, 64, 28, 70, 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 2, 4, 4, 0,248, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,200, 0, 0, 0,191, 1, 0, 0, 31, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,248, 0,164, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 72, 1, 0, 0, 40,124,147, 5, 0, 0, 0, 0, 39, 1, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 4, 0, 0,240, 4, 0, 0, 61, 2, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +216, 0,134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56,242,200, 4, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 56,242,200, 4, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, + 56,255, 13, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,100, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0, +221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0, +192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, 0,222,192,190,152, 9, 52,193, 0, 0,128, 63, +223,149, 47, 63, 55, 70, 58, 63,160, 56, 49,188, 0, 0, 0, 0, 88,126,162,190,229,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, + 7,165, 39, 63,150, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, 78,255,170, 64, 0, 0,128, 63, + 47,201,194, 63, 61, 73,145,191,244,250, 39,191, 8,165, 39,191,190,164,206, 63,209, 10,143, 63,180,164, 28, 63,149, 84, 28, 63, +224,153,196,188,136,239, 76, 64, 10,108,228,190, 52,247,227,190,125, 21, 64,191,126,113,172,191,216, 49, 49, 65,152, 9, 52, 65, +149, 70,158, 62, 24,234,167, 62,192,214,159,187, 0, 0, 6,181,196,188,181,189, 71,238,178, 61,127, 45,128, 62, 0, 0,226, 51, +168,120, 21,194,107, 5, 2, 66,203,135,213,193,147,214,159,192,177, 38, 19, 66,124,173,255,193, 96,101,210, 65,128, 40,160, 64, +221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0, +192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, 0,222,192,190,152, 9, 52,193, 0, 0,128, 63, + 47,201,194, 63, 61, 73,145,191,244,250, 39,191, 8,165, 39,191,190,164,206, 63,209, 10,143, 63,180,164, 28, 63,149, 84, 28, 63, +224,153,196,188,136,239, 76, 64, 10,108,228,190, 52,247,227,190,125, 21, 64,191,126,113,172,191,216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184,125,147, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,118,147, 5, 0, 0, 0, 0,104, 43,147, 5, 0, 0, 0, 0, 40, 76,135, 5, - 0, 0, 0, 0, 88, 56,135, 5, 0, 0, 0, 0,216, 43,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, -240, 4, 0, 0, 61, 2, 0, 0,194, 2, 0, 0, 1, 1,216, 0,134, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72,133,147, 5, 0, 0, 0, 0, 72,133,147, 5, 0, 0, 0, 0,168,126,147, 5, 0, 0, 0, 0, 24,128,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,126,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24,128,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0,165, 67, 0, 0, 0, 64, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0,128,164, 67, - 0, 0,200, 65, 0,128,164, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0, 74, 1, 24, 0, 74, 1, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, -240, 4, 0, 0, 61, 2, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,128,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,168,126,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, +241, 22, 72, 63, 78,162,246,190, 43, 8, 90,190, 2, 35,171,190, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +253,191,136, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 1, 2, 0, 0,255,255, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0,128, 63,190,133, 65, 66, 99,212, 90, 66, 27,183,118, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,248,245,200, 4, 0, 0, 0, 0, +176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 4, 0, 0, -240, 4, 0, 0, 61, 2, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0,134, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 1, 0, 3, 0, 8, 0,128, 0, 0, 0, 12, 66, 0, 0,128, 63, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, 56,248,200, 4, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, +184,100,201, 4, 0, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 82, 67,111,109,112,111,115,105,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,249,200, 4, 0, 0, 0, 0, + 56,255,200, 4, 0, 0, 0, 0,168,255,200, 4, 0, 0, 0, 0,216, 8,201, 4, 0, 0, 0, 0, 72, 9,201, 4, 0, 0, 0, 0, +120, 61,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,249,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +248,249,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,248,249,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,250,200, 4, 0, 0, 0, 0, +136,249,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +104,250,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,250,200, 4, 0, 0, 0, 0,248,249,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,250,200, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0, 72,251,200, 4, 0, 0, 0, 0,104,250,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,251,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +184,251,200, 4, 0, 0, 0, 0,216,250,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,184,251,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,252,200, 4, 0, 0, 0, 0, + 72,251,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 40,252,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,252,200, 4, 0, 0, 0, 0,184,251,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,252,200, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0, 8,253,200, 4, 0, 0, 0, 0, 40,252,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +126, 7, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,253,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +120,253,200, 4, 0, 0, 0, 0,152,252,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,234, 3, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,120,253,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,253,200, 4, 0, 0, 0, 0, + 8,253,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +232,253,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,254,200, 4, 0, 0, 0, 0,120,253,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,254,200, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,200,254,200, 4, 0, 0, 0, 0,232,253,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 3,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,254,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 56,255,200, 4, 0, 0, 0, 0, 88,254,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 56,255,200, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +200,254,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +168,255,200, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 0,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +248,249,200, 4, 0, 0, 0, 0,104,250,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 24, 0,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136, 0,201, 4, 0, 0, 0, 0,168,255,200, 4, 0, 0, 0, 0, +248,249,200, 4, 0, 0, 0, 0, 72,251,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +136, 0,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248, 0,201, 4, 0, 0, 0, 0, 24, 0,201, 4, 0, 0, 0, 0, +104,250,200, 4, 0, 0, 0, 0,184,251,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +248, 0,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104, 1,201, 4, 0, 0, 0, 0,136, 0,201, 4, 0, 0, 0, 0, + 72,251,200, 4, 0, 0, 0, 0,184,251,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +104, 1,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 1,201, 4, 0, 0, 0, 0,248, 0,201, 4, 0, 0, 0, 0, +216,250,200, 4, 0, 0, 0, 0,152,252,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +216, 1,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72, 2,201, 4, 0, 0, 0, 0,104, 1,201, 4, 0, 0, 0, 0, + 40,252,200, 4, 0, 0, 0, 0,152,252,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 72, 2,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184, 2,201, 4, 0, 0, 0, 0,216, 1,201, 4, 0, 0, 0, 0, +184,251,200, 4, 0, 0, 0, 0, 8,253,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +184, 2,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40, 3,201, 4, 0, 0, 0, 0, 72, 2,201, 4, 0, 0, 0, 0, + 72,251,200, 4, 0, 0, 0, 0, 8,253,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 40, 3,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152, 3,201, 4, 0, 0, 0, 0,184, 2,201, 4, 0, 0, 0, 0, + 40,252,200, 4, 0, 0, 0, 0, 8,253,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +152, 3,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8, 4,201, 4, 0, 0, 0, 0, 40, 3,201, 4, 0, 0, 0, 0, +184,251,200, 4, 0, 0, 0, 0,152,252,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 8, 4,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120, 4,201, 4, 0, 0, 0, 0,152, 3,201, 4, 0, 0, 0, 0, + 72,251,200, 4, 0, 0, 0, 0,120,253,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +120, 4,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 4,201, 4, 0, 0, 0, 0, 8, 4,201, 4, 0, 0, 0, 0, + 8,253,200, 4, 0, 0, 0, 0,232,253,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +232, 4,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 5,201, 4, 0, 0, 0, 0,120, 4,201, 4, 0, 0, 0, 0, +120,253,200, 4, 0, 0, 0, 0,232,253,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 88, 5,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 5,201, 4, 0, 0, 0, 0,232, 4,201, 4, 0, 0, 0, 0, +120,253,200, 4, 0, 0, 0, 0, 88,254,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +200, 5,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56, 6,201, 4, 0, 0, 0, 0, 88, 5,201, 4, 0, 0, 0, 0, +232,253,200, 4, 0, 0, 0, 0, 88,254,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 56, 6,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,168, 6,201, 4, 0, 0, 0, 0,200, 5,201, 4, 0, 0, 0, 0, +136,249,200, 4, 0, 0, 0, 0,200,254,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +168, 6,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 7,201, 4, 0, 0, 0, 0, 56, 6,201, 4, 0, 0, 0, 0, +200,254,200, 4, 0, 0, 0, 0, 56,255,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 24, 7,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136, 7,201, 4, 0, 0, 0, 0,168, 6,201, 4, 0, 0, 0, 0, +216,250,200, 4, 0, 0, 0, 0, 56,255,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +136, 7,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248, 7,201, 4, 0, 0, 0, 0, 24, 7,201, 4, 0, 0, 0, 0, + 40,252,200, 4, 0, 0, 0, 0, 56,255,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +248, 7,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104, 8,201, 4, 0, 0, 0, 0,136, 7,201, 4, 0, 0, 0, 0, + 88,254,200, 4, 0, 0, 0, 0,200,254,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +104, 8,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 8,201, 4, 0, 0, 0, 0,248, 7,201, 4, 0, 0, 0, 0, +232,253,200, 4, 0, 0, 0, 0, 56,255,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +216, 8,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 8,201, 4, 0, 0, 0, 0, +136,249,200, 4, 0, 0, 0, 0,120,253,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, + 72, 9,201, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24, 13,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72,251,200, 4, 0, 0, 0, 0,248,249,200, 4, 0, 0, 0, 0,104,250,200, 4, 0, 0, 0, 0,184,251,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,100,201, 4, 0, 0, 0, 0, 40,100,201, 4, 0, 0, 0, 0, + 56, 10,201, 4, 0, 0, 0, 0,168, 11,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 10,201, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,168, 11,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168, 11,201, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 10,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, + 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, + 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, + 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,129,147, 5, - 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,136,129,147, 5, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 56,255, 13, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,100, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1, 77,190, 0, 0, 0, 0,221,149, 47, 63, - 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, - 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, 0,222,192,190,152, 9, 52,193, 0, 0,128, 63,223,149, 47, 63, - 55, 70, 58, 63,160, 56, 49,188, 0, 0, 0, 0, 88,126,162,190,229,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63, -150, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, 78,255,170, 64, 0, 0,128, 63, 47,201,194, 63, - 61, 73,145,191,244,250, 39,191, 8,165, 39,191,190,164,206, 63,209, 10,143, 63,180,164, 28, 63,149, 84, 28, 63,224,153,196,188, -136,239, 76, 64, 10,108,228,190, 52,247,227,190,125, 21, 64,191,126,113,172,191,216, 49, 49, 65,152, 9, 52, 65,149, 70,158, 62, - 24,234,167, 62,192,214,159,187, 0, 0, 6,181,196,188,181,189, 71,238,178, 61,127, 45,128, 62, 0, 0,226, 51,168,120, 21,194, -107, 5, 2, 66,203,135,213,193,147,214,159,192,177, 38, 19, 66,124,173,255,193, 96,101,210, 65,128, 40,160, 64,221,149, 47, 63, - 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, - 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, 0,222,192,190,152, 9, 52,193, 0, 0,128, 63, 47,201,194, 63, - 61, 73,145,191,244,250, 39,191, 8,165, 39,191,190,164,206, 63,209, 10,143, 63,180,164, 28, 63,149, 84, 28, 63,224,153,196,188, -136,239, 76, 64, 10,108,228,190, 52,247,227,190,125, 21, 64,191,126,113,172,191,216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 24, 13,201, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0, 8, 18,201, 4, 0, 0, 0, 0, 72, 9,201, 4, 0, 0, 0, 0, 56,255,200, 4, 0, 0, 0, 0, + 40,252,200, 4, 0, 0, 0, 0,152,252,200, 4, 0, 0, 0, 0,216,250,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 15, 15, 94, 1, 92, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0,232, 16,201, 4, 0, 0, 0, 0,232, 16,201, 4, 0, 0, 0, 0, 8, 14,201, 4, 0, 0, 0, 0, +120, 15,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 14,201, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +120, 15,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,115, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 15,201, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8, 14,201, 4, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, + 50, 51, 74,193,154,209,131, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 18, 0, 0, 0, 65, 0, 0, 0, + 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, + 4, 0, 0, 4, 8, 0, 94, 1, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 6, 0, 0,126, 7, 0, 0, 26, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 1, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,232, 16,201, 4, 0, 0, 0, 0,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,102,103, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,241, 22, 72, 63, - 78,162,246,190, 43, 8, 90,190, 2, 35,171,190, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,191,136, 59, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 1, 2, 0, 0,255,255, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0,128, 63,190,133, 65, 66, 99,212, 90, 66, 27,183,118, 66, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 72,133,147, 5, 0, 0, 0, 0,175, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 1, 0, 7, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8, 18,201, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0,152, 42,201, 4, 0, 0, 0, 0, 24, 13,201, 4, 0, 0, 0, 0, 40,252,200, 4, 0, 0, 0, 0, + 8,253,200, 4, 0, 0, 0, 0,184,251,200, 4, 0, 0, 0, 0,152,252,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 6, 0, 0,126, 7, 0, 0, 93, 0, 0, 0,233, 3, 0, 0, 4, 4, 94, 1,141, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88, 41,201, 4, 0, 0, 0, 0, 88, 41,201, 4, 0, 0, 0, 0,248, 18,201, 4, 0, 0, 0, 0, +104, 20,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 18,201, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +104, 20,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 6, 0, 0,126, 7, 0, 0,208, 3, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, - 1, 0, 3, 0, 8, 0,128, 0, 0, 0, 12, 66, 0, 0,128, 63, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 20,201, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,248, 18,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,174, 67, 0,128, 92,196, 0, 0, 0, 0, + 0, 0, 0, 0,255,127,166, 67,255,191, 92,196, 0, 0, 0, 0, 77, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, + 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0, 94, 1,115, 3, 77, 1,115, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 6, 0, 0,126, 7, 0, 0, 93, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 1,115, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 21,201, 4, 0, 0, 0, 0, +184, 39,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 21,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +120, 23,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,248,134,147, 5, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104, 63,166, 5, - 0, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 67,111, -109,112,111,115,105,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,136,147, 5, 0, 0, 0, 0,248,141,147, 5, - 0, 0, 0, 0,104,142,147, 5, 0, 0, 0, 0,152,151,147, 5, 0, 0, 0, 0, 8,152,147, 5, 0, 0, 0, 0, 56,204,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,220,255, 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,136,147, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184,136,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,184,136,147, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40,137,147, 5, 0, 0, 0, 0, 72,136,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,137,147, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,137,147, 5, 0, 0, 0, 0,184,136,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,137,147, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0, 8,138,147, 5, 0, 0, 0, 0, 40,137,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,138,147, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,138,147, 5, - 0, 0, 0, 0,152,137,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,120,138,147, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,138,147, 5, 0, 0, 0, 0, 8,138,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,138,147, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,139,147, 5, 0, 0, 0, 0,120,138,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 6, 92, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,139,147, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,200,139,147, 5, 0, 0, 0, 0,232,138,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 92, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,139,147, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,140,147, 5, - 0, 0, 0, 0, 88,139,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 56,140,147, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,140,147, 5, 0, 0, 0, 0,200,139,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,140,147, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,141,147, 5, 0, 0, 0, 0, 56,140,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 6,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,141,147, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,136,141,147, 5, 0, 0, 0, 0,168,140,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3,140, 1, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,141,147, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,141,147, 5, - 0, 0, 0, 0, 24,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,248,141,147, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,141,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,142,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,142,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,136,147, 5, - 0, 0, 0, 0, 40,137,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,142,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,143,147, 5, 0, 0, 0, 0,104,142,147, 5, 0, 0, 0, 0,184,136,147, 5, - 0, 0, 0, 0, 8,138,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,143,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,143,147, 5, 0, 0, 0, 0,216,142,147, 5, 0, 0, 0, 0, 40,137,147, 5, - 0, 0, 0, 0,120,138,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,143,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,144,147, 5, 0, 0, 0, 0, 72,143,147, 5, 0, 0, 0, 0, 8,138,147, 5, - 0, 0, 0, 0,120,138,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,144,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,144,147, 5, 0, 0, 0, 0,184,143,147, 5, 0, 0, 0, 0,152,137,147, 5, - 0, 0, 0, 0, 88,139,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,144,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,145,147, 5, 0, 0, 0, 0, 40,144,147, 5, 0, 0, 0, 0,232,138,147, 5, - 0, 0, 0, 0, 88,139,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,145,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,145,147, 5, 0, 0, 0, 0,152,144,147, 5, 0, 0, 0, 0,120,138,147, 5, - 0, 0, 0, 0,200,139,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,145,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,145,147, 5, 0, 0, 0, 0, 8,145,147, 5, 0, 0, 0, 0, 8,138,147, 5, - 0, 0, 0, 0,200,139,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,145,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,146,147, 5, 0, 0, 0, 0,120,145,147, 5, 0, 0, 0, 0,232,138,147, 5, - 0, 0, 0, 0,200,139,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,146,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,146,147, 5, 0, 0, 0, 0,232,145,147, 5, 0, 0, 0, 0,120,138,147, 5, - 0, 0, 0, 0, 88,139,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,146,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,147,147, 5, 0, 0, 0, 0, 88,146,147, 5, 0, 0, 0, 0, 8,138,147, 5, - 0, 0, 0, 0, 56,140,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,147,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,147,147, 5, 0, 0, 0, 0,200,146,147, 5, 0, 0, 0, 0,200,139,147, 5, - 0, 0, 0, 0,168,140,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,147,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,148,147, 5, 0, 0, 0, 0, 56,147,147, 5, 0, 0, 0, 0, 56,140,147, 5, - 0, 0, 0, 0,168,140,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,148,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,148,147, 5, 0, 0, 0, 0,168,147,147, 5, 0, 0, 0, 0, 56,140,147, 5, - 0, 0, 0, 0, 24,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,148,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,148,147, 5, 0, 0, 0, 0, 24,148,147, 5, 0, 0, 0, 0,168,140,147, 5, - 0, 0, 0, 0, 24,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,148,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,149,147, 5, 0, 0, 0, 0,136,148,147, 5, 0, 0, 0, 0, 72,136,147, 5, - 0, 0, 0, 0,136,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,149,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,149,147, 5, 0, 0, 0, 0,248,148,147, 5, 0, 0, 0, 0,136,141,147, 5, - 0, 0, 0, 0,248,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,149,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,150,147, 5, 0, 0, 0, 0,104,149,147, 5, 0, 0, 0, 0,152,137,147, 5, - 0, 0, 0, 0,248,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,150,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,150,147, 5, 0, 0, 0, 0,216,149,147, 5, 0, 0, 0, 0,232,138,147, 5, - 0, 0, 0, 0,248,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,150,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,151,147, 5, 0, 0, 0, 0, 72,150,147, 5, 0, 0, 0, 0, 24,141,147, 5, - 0, 0, 0, 0,136,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,151,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,151,147, 5, 0, 0, 0, 0,184,150,147, 5, 0, 0, 0, 0,168,140,147, 5, - 0, 0, 0, 0,248,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,151,147, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,151,147, 5, 0, 0, 0, 0, 72,136,147, 5, - 0, 0, 0, 0, 56,140,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8,152,147, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,155,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,138,147, 5, - 0, 0, 0, 0,184,136,147, 5, 0, 0, 0, 0, 40,137,147, 5, 0, 0, 0, 0,120,138,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,243,146, 5, 0, 0, 0, 0,184,243,146, 5, 0, 0, 0, 0,248,152,147, 5, - 0, 0, 0, 0,104,154,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,152,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,104,154,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,154,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,152,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, - 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, - 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216,155,147, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,200,160,147, 5, 0, 0, 0, 0, 8,152,147, 5, 0, 0, 0, 0,248,141,147, 5, 0, 0, 0, 0,232,138,147, 5, - 0, 0, 0, 0, 88,139,147, 5, 0, 0, 0, 0,152,137,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, -126, 7, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 15, 15, 94, 1, 92, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0,168,159,147, 5, 0, 0, 0, 0,168,159,147, 5, 0, 0, 0, 0,200,156,147, 5, 0, 0, 0, 0, 56,158,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,156,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 56,158,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,115, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, - 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, -126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, - 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +120, 23,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24, 25,201, 4, 0, 0, 0, 0,216, 21,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,158,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,200,156,147, 5, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, 50, 51, 74,193, -154,209,131, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 93, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 18, 0, 0, 0, 65, 0, 0, 0, 0, 0,128, 63, - 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, - 8, 0, 94, 1, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, -126, 7, 0, 0, 26, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 66, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,168,159,147, 5, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 25,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +184, 26,201, 4, 0, 0, 0, 0,120, 23,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,200,160,147, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 88,185,147, 5, 0, 0, 0, 0,216,155,147, 5, 0, 0, 0, 0,232,138,147, 5, 0, 0, 0, 0,200,139,147, 5, - 0, 0, 0, 0,120,138,147, 5, 0, 0, 0, 0, 88,139,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, -126, 7, 0, 0, 93, 0, 0, 0,233, 3, 0, 0, 4, 4, 94, 1,141, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24,184,147, 5, 0, 0, 0, 0, 24,184,147, 5, 0, 0, 0, 0,184,161,147, 5, 0, 0, 0, 0, 40,163,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,161,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40,163,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, - 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, -126, 7, 0, 0,208, 3, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, - 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +184, 26,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88, 28,201, 4, 0, 0, 0, 0, 24, 25,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, +105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, +105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,163,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,184,161,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,174, 67, 0,128, 92,196, 0, 0, 0, 0, 0, 0, 0, 0, -255,127,166, 67,255,191, 92,196, 0, 0, 0, 0, 77, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, 0, 0, 0, 0, - 82, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0,114, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, - 6, 0, 94, 1,115, 3, 77, 1,115, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, -126, 7, 0, 0, 93, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1,115, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,164,147, 5, 0, 0, 0, 0,120,182,147, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 28,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +248, 29,201, 4, 0, 0, 0, 0,184, 26,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,164,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,166,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, - 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, - 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116, -101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, - 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,166,147, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,167,147, 5, 0, 0, 0, 0,152,164,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, + 0, 0, 58,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +248, 29,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152, 31,201, 4, 0, 0, 0, 0, 88, 28,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, + 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, + 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66, +108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 31,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 56, 33,201, 4, 0, 0, 0, 0,248, 29,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,167,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,169,147, 5, - 0, 0, 0, 0, 56,166,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101, -114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, - 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,169,147, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24,171,147, 5, 0, 0, 0, 0,216,167,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, + 0, 0, 10,254, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, + 56, 33,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216, 34,201, 4, 0, 0, 0, 0,152, 31,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, +109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, +109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24,171,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184,172,147, 5, - 0, 0, 0, 0,120,169,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, - 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254, - 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 34,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +120, 36,201, 4, 0, 0, 0, 0, 56, 33,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,172,147, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,174,147, 5, 0, 0, 0, 0, 24,171,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, + 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,218,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,174,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248,175,147, 5, - 0, 0, 0, 0,184,172,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100, -105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254, - 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +120, 36,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24, 38,201, 4, 0, 0, 0, 0,216, 34,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,175,147, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,177,147, 5, 0, 0, 0, 0, 88,174,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,177,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,179,147, 5, - 0, 0, 0, 0,248,175,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, - 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, - 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 38,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +184, 39,201, 4, 0, 0, 0, 0,120, 36,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,179,147, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,180,147, 5, 0, 0, 0, 0,152,177,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, + 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, + 0, 0, 40,253, 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +184, 39,201, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 38,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,180,147, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,182,147, 5, - 0, 0, 0, 0, 56,179,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112, -117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253, - 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,182,147, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,180,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 88, 41,201, 4, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 24,184,147, 5, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +152, 42,201, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40, 56,201, 4, 0, 0, 0, 0, 8, 18,201, 4, 0, 0, 0, 0, +200,254,200, 4, 0, 0, 0, 0, 88,254,200, 4, 0, 0, 0, 0,232,253,200, 4, 0, 0, 0, 0, 56,255,200, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 1, 1, 27, 3,140, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 54,201, 4, 0, 0, 0, 0,120, 54,201, 4, 0, 0, 0, 0, +136, 43,201, 4, 0, 0, 0, 0, 72, 49,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136, 43,201, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,248, 44,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 70, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 3, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 70, 68, 0, 0,200, 65, 0,128, 70, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 27, 3, 26, 0, 27, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 27, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 44,201, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,104, 46,201, 4, 0, 0, 0, 0,136, 43,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 5, 3, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,114, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 46,201, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,216, 47,201, 4, 0, 0, 0, 0,248, 44,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, + 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 47,201, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 72, 49,201, 4, 0, 0, 0, 0,104, 46,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, + 0,192,108,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,184,195, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, + 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, + 18, 0, 0, 0,129, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,130, 1,163, 0,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 49,201, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 47,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0, -160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,185,147, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,198,147, 5, 0, 0, 0, 0,200,160,147, 5, 0, 0, 0, 0,136,141,147, 5, - 0, 0, 0, 0, 24,141,147, 5, 0, 0, 0, 0,168,140,147, 5, 0, 0, 0, 0,248,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 1, 1, 27, 3,140, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,197,147, 5, 0, 0, 0, 0, 56,197,147, 5, 0, 0, 0, 0, 72,186,147, 5, - 0, 0, 0, 0, 8,192,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,186,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,184,187,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0,192, 70, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 3, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128, 70, 68, 0, 0,200, 65, 0,128, 70, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 27, 3, 26, 0, 27, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 27, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,187,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 40,189,147, 5, 0, 0, 0, 0, 72,186,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, - 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, - 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 3, 0, 0, 5, 3, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0,114, 1, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 27, 3,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,189,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,152,190,147, 5, 0, 0, 0, 0,184,187,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, - 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,184, 50,201, 4, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,184, 50,201, 4, 0, 0, 0, 0, +175, 0, 0, 0, 1, 0, 0, 0, 93,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,133,119, 64, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 1, 77,190, 0, 0, 0, 0,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62, +149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190, +152, 9, 52,193, 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,192, 56, 49,188, 0, 0, 0, 0, 87,126,162,190,228,251,159, 62, + 56, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191, 50,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, + 77,255,170, 64, 0, 0,128, 63, 42, 6,158, 63, 99, 28,157,191,244,250, 39,191, 8,165, 39,191,211,164,167, 63, 55,175,154, 63, +180,164, 28, 63,149, 84, 28, 63, 39,127,159,188,135,157, 93, 64, 8,108,228,190, 50,247,227,190, 4,213, 27,191,122,122,186,191, +216, 49, 49, 65,152, 9, 52, 65, 25, 25,195, 62,176,249,206, 62,128,238,196,187, 0, 0,192,179, 55, 15,168,189,201,118,165, 61, +152, 15,109, 62, 0, 0,152, 51,211,120, 21,194,144, 5, 2, 66, 6,136,213,193,193,214,159,192,219, 38, 19, 66,196,173,255,193, +154,101,210, 65,173, 40,160, 64,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62, +149, 84, 28,191, 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190, +152, 9, 52,193, 0, 0,128, 63, 42, 6,158, 63, 99, 28,157,191,244,250, 39,191, 8,165, 39,191,211,164,167, 63, 55,175,154, 63, +180,164, 28, 63,149, 84, 28, 63, 39,127,159,188,135,157, 93, 64, 8,108,228,190, 50,247,227,190, 4,213, 27,191,122,122,186,191, +216, 49, 49, 65,152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,190,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 8,192,147, 5, 0, 0, 0, 0, 40,189,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,192,108,196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,184,195, 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, -129, 1, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0, -129, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,130, 1,163, 0,112, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 6, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,192,147, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,190,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63,241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, 3, 35,171,190,214,211,111, 65,214,211,111, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 49,183, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65, 1, 2, 0, 0, +255,255, 0, 0, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63,190,133, 65, 66, +100,212, 90, 66, 31,183,118, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, +120, 54,201, 4, 0, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, + 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 3, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 27, 3,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,120,193,147, 5, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,120,193,147, 5, 0, 0, 0, 0,174, 0, 0, 0, - 1, 0, 0, 0, 93,101,230, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,133,119, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 65,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 72, 1, 77,190, - 0, 0, 0, 0,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, - 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, - 0, 0,128, 63,223,149, 47, 63, 55, 70, 58, 63,192, 56, 49,188, 0, 0, 0, 0, 87,126,162,190,228,251,159, 62, 56, 53,101, 63, - 0, 0, 0, 0, 7,165, 39, 63,150, 84, 28,191, 50,247,227, 62, 0, 0, 0, 0,110,101,239, 64,151, 62,208,192, 77,255,170, 64, - 0, 0,128, 63, 42, 6,158, 63, 99, 28,157,191,244,250, 39,191, 8,165, 39,191,211,164,167, 63, 55,175,154, 63,180,164, 28, 63, -149, 84, 28, 63, 39,127,159,188,135,157, 93, 64, 8,108,228,190, 50,247,227,190, 4,213, 27,191,122,122,186,191,216, 49, 49, 65, -152, 9, 52, 65, 25, 25,195, 62,176,249,206, 62,128,238,196,187, 0, 0,192,179, 55, 15,168,189,201,118,165, 61,152, 15,109, 62, - 0, 0,152, 51,211,120, 21,194,144, 5, 2, 66, 6,136,213,193,193,214,159,192,219, 38, 19, 66,196,173,255,193,154,101,210, 65, -173, 40,160, 64,221,149, 47, 63, 85,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, - 0, 0, 0, 0,191, 56, 49,188, 54, 53,101, 63, 50,247,227, 62, 0, 0, 0, 0, 90, 38,173,190,254,221,192,190,152, 9, 52,193, - 0, 0,128, 63, 42, 6,158, 63, 99, 28,157,191,244,250, 39,191, 8,165, 39,191,211,164,167, 63, 55,175,154, 63,180,164, 28, 63, -149, 84, 28, 63, 39,127,159,188,135,157, 93, 64, 8,108,228,190, 50,247,227,190, 4,213, 27,191,122,122,186,191,216, 49, 49, 65, -152, 9, 52, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, + 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 40, 56,201, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0,120, 61,201, 4, 0, 0, 0, 0,152, 42,201, 4, 0, 0, 0, 0,120,253,200, 4, 0, 0, 0, 0, + 72,251,200, 4, 0, 0, 0, 0, 8,253,200, 4, 0, 0, 0, 0,232,253,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 6, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 16, 16, 32, 6, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,248, 59,201, 4, 0, 0, 0, 0,248, 59,201, 4, 0, 0, 0, 0, 24, 57,201, 4, 0, 0, 0, 0, +136, 58,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24, 57,201, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +136, 58,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 66, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,224,195, 68, 0, 0,200, 65, 0,224,195, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0, 32, 6, 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 6, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136, 58,201, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 57,201, 4, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68, +128,195,217,195,192,225,108, 68, 96,240,187, 64, 62, 16,253, 67, 15, 6, 0, 0, 32, 6, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, + 0, 0, 0, 0, 14, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 14, 6, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,236, 81,184, 61, 10,215, 19, 64, 10, 0, 0, 0, 0, 0, 3, 0, + 0, 0, 0, 4, 0, 0, 32, 6, 67, 2, 15, 6, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 6, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 6, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 1, 0, 0,248, 59,201, 4, 0, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,250,150, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63,241, 22, 72, 63, 78,162,246,190, 44, 8, 90,190, 3, 35,171,190,214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 80, 49,183, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65, 1, 2, 0, 0,255,255, 0, 0, - 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63,190,133, 65, 66,100,212, 90, 66, - 31,183,118, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 56,197,147, 5, - 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 19, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232,198,147, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 56,204,147, 5, 0, 0, 0, 0, 88,185,147, 5, 0, 0, 0, 0, 56,140,147, 5, 0, 0, 0, 0, 8,138,147, 5, - 0, 0, 0, 0,200,139,147, 5, 0, 0, 0, 0,168,140,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 6, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 16, 16, 32, 6, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,184,202,147, 5, 0, 0, 0, 0,184,202,147, 5, 0, 0, 0, 0,216,199,147, 5, 0, 0, 0, 0, 72,201,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,199,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 72,201,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 66, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,195, 68, - 0, 0,200, 65, 0,224,195, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0, 32, 6, 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 6, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 26, 0, - 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,206, 97, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120, 61,201, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 56,201, 4, 0, 0, 0, 0,136,249,200, 4, 0, 0, 0, 0, +120,253,200, 4, 0, 0, 0, 0, 88,254,200, 4, 0, 0, 0, 0,200,254,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 6, 6, 4, 3,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,184, 66,201, 4, 0, 0, 0, 0,184, 66,201, 4, 0, 0, 0, 0,104, 62,201, 4, 0, 0, 0, 0, + 72, 65,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 62,201, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +216, 63,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 65, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,192, 64, 68, 0, 0,200, 65, 0,192, 64, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0, 4, 3, 26, 0, 4, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,201,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,216,199,147, 5, 0, 0, 0, 0, 0, 0, 32,193, 0, 0, 0, 68, 0, 0, 32,193, 0, 0, 0, 68,128,195,217,195, -192,225,108, 68, 96,240,187, 64, 62, 16,253, 67, 15, 6, 0, 0, 32, 6, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, - 14, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 14, 6, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,250, 70, 0, 0,250, 70,236, 81,184, 61, 10,215, 19, 64, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, - 0, 0, 32, 6, 67, 2, 15, 6, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 6, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 63,201, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 72, 65,201, 4, 0, 0, 0, 0,104, 62,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 48, 1, 0, 0,184,202,147, 5, 0, 0, 0, 0,192, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 19, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,206, 97, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 65,201, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,216, 63,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, + 0, 0,129,191, 0,128, 0, 64, 0, 0,100,190, 0,128,156, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 56,204,147, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,198,147, 5, 0, 0, 0, 0, 72,136,147, 5, 0, 0, 0, 0, 56,140,147, 5, - 0, 0, 0, 0, 24,141,147, 5, 0, 0, 0, 0,136,141,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 3, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 6, 6, 4, 3,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,248, 29,166, 5, 0, 0, 0, 0,248, 29,166, 5, 0, 0, 0, 0, 40,205,147, 5, 0, 0, 0, 0,136, 28,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,205,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,152,206,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 65, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 64, 68, - 0, 0,200, 65, 0,192, 64, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0, 4, 3, 26, 0, 4, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 26, 0, - 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 3, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 3,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,206,147, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,136, 28,166, 5, - 0, 0, 0, 0, 40,205,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 33, 0, 0,184, 66,201, 4, 0, 0, 0, 0,189, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0, +154,153,153, 62,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136, 28,166, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,152,206,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 0, 0,129,191, - 0,128, 0, 64, 0, 0,100,190, 0,128,156, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 3, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 33, 0, 0,248, 29,166, 5, 0, 0, 0, 0,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1302,6 +1310,7 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1311,7 +1320,6 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1432,3801 +1440,3564 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,184,100,201, 4, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, +104,254,220, 4, 0, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 82, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,102,201, 4, 0, 0, 0, 0, +184,107,201, 4, 0, 0, 0, 0, 40,108,201, 4, 0, 0, 0, 0,200,224,219, 4, 0, 0, 0, 0, 56,225,219, 4, 0, 0, 0, 0, +232,215,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 86,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,102,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +120,102,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,120,102,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,102,201, 4, 0, 0, 0, 0, + 8,102,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,146, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +232,102,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,103,201, 4, 0, 0, 0, 0,120,102,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 7,146, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,103,201, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,200,103,201, 4, 0, 0, 0, 0,232,102,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,103,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 56,104,201, 4, 0, 0, 0, 0, 88,103,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 4, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 56,104,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,104,201, 4, 0, 0, 0, 0, +200,103,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +168,104,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,105,201, 4, 0, 0, 0, 0, 56,104,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,100, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,105,201, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,136,105,201, 4, 0, 0, 0, 0,168,104,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +100, 6,100, 4, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,105,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +248,105,201, 4, 0, 0, 0, 0, 24,105,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 6,204, 3, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,248,105,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,106,201, 4, 0, 0, 0, 0, +136,105,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,204, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +104,106,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,106,201, 4, 0, 0, 0, 0,248,105,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,156, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,106,201, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0, 72,107,201, 4, 0, 0, 0, 0,104,106,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +100, 6,156, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,107,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +184,107,201, 4, 0, 0, 0, 0,216,106,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, 3, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,184,107,201, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72,107,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 6,252, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 40,108,201, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200,217,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +120,102,201, 4, 0, 0, 0, 0,232,102,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +200,217,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,218,219, 4, 0, 0, 0, 0, 40,108,201, 4, 0, 0, 0, 0, +120,102,201, 4, 0, 0, 0, 0,200,103,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 56,218,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,168,218,219, 4, 0, 0, 0, 0,200,217,219, 4, 0, 0, 0, 0, +232,102,201, 4, 0, 0, 0, 0, 56,104,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +168,218,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24,219,219, 4, 0, 0, 0, 0, 56,218,219, 4, 0, 0, 0, 0, +200,103,201, 4, 0, 0, 0, 0, 56,104,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 24,219,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136,219,219, 4, 0, 0, 0, 0,168,218,219, 4, 0, 0, 0, 0, + 8,102,201, 4, 0, 0, 0, 0,168,104,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +136,219,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248,219,219, 4, 0, 0, 0, 0, 24,219,219, 4, 0, 0, 0, 0, + 88,103,201, 4, 0, 0, 0, 0,168,104,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +248,219,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104,220,219, 4, 0, 0, 0, 0,136,219,219, 4, 0, 0, 0, 0, +200,103,201, 4, 0, 0, 0, 0, 24,105,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +104,220,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,220,219, 4, 0, 0, 0, 0,248,219,219, 4, 0, 0, 0, 0, + 56,104,201, 4, 0, 0, 0, 0, 24,105,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +216,220,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,221,219, 4, 0, 0, 0, 0,104,220,219, 4, 0, 0, 0, 0, +168,104,201, 4, 0, 0, 0, 0,136,105,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 72,221,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184,221,219, 4, 0, 0, 0, 0,216,220,219, 4, 0, 0, 0, 0, + 24,105,201, 4, 0, 0, 0, 0,136,105,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +184,221,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40,222,219, 4, 0, 0, 0, 0, 72,221,219, 4, 0, 0, 0, 0, + 56,104,201, 4, 0, 0, 0, 0,248,105,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 40,222,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,222,219, 4, 0, 0, 0, 0,184,221,219, 4, 0, 0, 0, 0, + 88,103,201, 4, 0, 0, 0, 0,248,105,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +152,222,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8,223,219, 4, 0, 0, 0, 0, 40,222,219, 4, 0, 0, 0, 0, +136,105,201, 4, 0, 0, 0, 0,248,105,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 8,223,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,223,219, 4, 0, 0, 0, 0,152,222,219, 4, 0, 0, 0, 0, + 8,102,201, 4, 0, 0, 0, 0,104,106,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +120,223,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232,223,219, 4, 0, 0, 0, 0, 8,223,219, 4, 0, 0, 0, 0, +168,104,201, 4, 0, 0, 0, 0,216,106,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +232,223,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,224,219, 4, 0, 0, 0, 0,120,223,219, 4, 0, 0, 0, 0, +104,106,201, 4, 0, 0, 0, 0,216,106,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 88,224,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200,224,219, 4, 0, 0, 0, 0,232,223,219, 4, 0, 0, 0, 0, +200,103,201, 4, 0, 0, 0, 0,104,106,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +200,224,219, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,224,219, 4, 0, 0, 0, 0, + 24,105,201, 4, 0, 0, 0, 0,216,106,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, + 56,225,219, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 8,229,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +200,103,201, 4, 0, 0, 0, 0,120,102,201, 4, 0, 0, 0, 0,232,102,201, 4, 0, 0, 0, 0, 56,104,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,101, 4, 0, 0,146, 4, 0, 0, 7, 7,127, 7, 46, 0, 1, 0, + 0, 0, 0, 0, 7, 0, 8, 0, 8,179,109, 3, 0, 0, 0, 0,216,253,220, 4, 0, 0, 0, 0,216,253,220, 4, 0, 0, 0, 0, + 40,226,219, 4, 0, 0, 0, 0,152,227,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152,134,145, 3, 0, 0, 0, 0, 40,204,184, 4, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,226,219, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,152,227,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,171, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,101, 4, 0, 0,126, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 40,181,109, 3, 0, 0, 0, 0, 72, 13,189, 4, 0, 0, 0, 0, 72, 13,189, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 61,133, 3, 0, 0, 0, 0,152, 63,133, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,227,219, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,226,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68, + 0, 0, 0, 0, 0, 0, 48, 65, 0, 0, 0, 0,255,191,237, 68, 0, 0, 0, 0, 0, 0,160, 65,110, 7, 0, 0,127, 7, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,109, 7, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,127, 7, 20, 0,110, 7, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,127, 4, 0, 0,146, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 20, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 40,180,109, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 64,133, 3, 0, 0, 0, 0, 8, 66,133, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8,229,219, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0,216, 26,220, 4, 0, 0, 0, 0, 56,225,219, 4, 0, 0, 0, 0,168,104,201, 4, 0, 0, 0, 0, +136,105,201, 4, 0, 0, 0, 0,248,105,201, 4, 0, 0, 0, 0, 88,103,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +101, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,203, 3, 0, 0, 4, 4, 26, 1,204, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, +136,174,109, 3, 0, 0, 0, 0,152, 25,220, 4, 0, 0, 0, 0,152, 25,220, 4, 0, 0, 0, 0,248,229,219, 4, 0, 0, 0, 0, +104,231,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,207,184, 4, 0, 0, 0, 0, +232,217,184, 4, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,229,219, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +104,231,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,141, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,140, 67, 0, 0,200, 65, 0,128,140, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0, 26, 1, 26, 0, 26, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +101, 6, 0, 0,126, 7, 0, 0,178, 3, 0, 0,203, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 1, 26, 0, 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8,178,109, 3, 0, 0, 0, 0,216,191,188, 4, 0, 0, 0, 0,216,191,188, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,136,209,186, 4, 0, 0, 0, 0, 56, 9,189, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,231,219, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,248,229,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0,128,108,196, 0, 0, 0, 0, + 0, 0, 0, 0, 1,128,132, 67, 2,128,108,196, 0, 0, 0, 0, 9, 1, 0, 0, 26, 1, 0, 0, 0, 0, 0, 0,177, 3, 0, 0, + 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0,177, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0, 26, 1,178, 3, 9, 1,178, 3, 0, 0,136, 89,189, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, +101, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,177, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 1,178, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +168,175,109, 3, 0, 0, 0, 0, 56, 69,145, 3, 0, 0, 0, 0,248, 62,194, 4, 0, 0, 0, 0,216,232,219, 4, 0, 0, 0, 0, +248, 23,220, 4, 0, 0, 0, 0, 8, 10,189, 4, 0, 0, 0, 0,120, 12,189, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,232,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +120,234,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,176,109, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,220,255, 9, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +120,234,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24,236,219, 4, 0, 0, 0, 0,216,232,219, 4, 0, 0, 0, 0, +184,253, 25, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 9, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,104, 63,166, 5, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,184, 90,167, 5, - 0, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 68,101, -102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 64,166, 5, 0, 0, 0, 0,104, 70,166, 5, - 0, 0, 0, 0,216, 70,166, 5, 0, 0, 0, 0, 72, 78,166, 5, 0, 0, 0, 0,184, 78,166, 5, 0, 0, 0, 0, 8,208,147, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 22,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184, 64,166, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 40, 65,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 40, 65,166, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152, 65,166, 5, 0, 0, 0, 0,184, 64,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152, 65,166, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8, 66,166, 5, 0, 0, 0, 0, 40, 65,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128, 7, 32, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8, 66,166, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,120, 66,166, 5, 0, 0, 0, 0,152, 65,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120, 66,166, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 66,166, 5, - 0, 0, 0, 0, 8, 66,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 3, 1, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,232, 66,166, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 67,166, 5, 0, 0, 0, 0,120, 66,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,248, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 67,166, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 67,166, 5, 0, 0, 0, 0,232, 66,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200, 67,166, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0, 56, 68,166, 5, 0, 0, 0, 0, 88, 67,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 6,248, 3, - 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56, 68,166, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 68,166, 5, - 0, 0, 0, 0,200, 67,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 6,108, 3, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,168, 68,166, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 69,166, 5, 0, 0, 0, 0, 56, 68,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7,108, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 69,166, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 69,166, 5, 0, 0, 0, 0,168, 68,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136, 69,166, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,248, 69,166, 5, 0, 0, 0, 0, 24, 69,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 6,140, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248, 69,166, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 70,166, 5, - 0, 0, 0, 0,136, 69,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 3, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,104, 70,166, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 69,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 6,144, 3, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 70,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72, 71,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 65,166, 5, - 0, 0, 0, 0,152, 65,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 71,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184, 71,166, 5, 0, 0, 0, 0,216, 70,166, 5, 0, 0, 0, 0, 40, 65,166, 5, - 0, 0, 0, 0,120, 66,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184, 71,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40, 72,166, 5, 0, 0, 0, 0, 72, 71,166, 5, 0, 0, 0, 0,152, 65,166, 5, - 0, 0, 0, 0,232, 66,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 72,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 72,166, 5, 0, 0, 0, 0,184, 71,166, 5, 0, 0, 0, 0,120, 66,166, 5, - 0, 0, 0, 0,232, 66,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 72,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8, 73,166, 5, 0, 0, 0, 0, 40, 72,166, 5, 0, 0, 0, 0,184, 64,166, 5, - 0, 0, 0, 0, 88, 67,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 73,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 73,166, 5, 0, 0, 0, 0,152, 72,166, 5, 0, 0, 0, 0, 8, 66,166, 5, - 0, 0, 0, 0, 88, 67,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 73,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232, 73,166, 5, 0, 0, 0, 0, 8, 73,166, 5, 0, 0, 0, 0,120, 66,166, 5, - 0, 0, 0, 0,200, 67,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 73,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88, 74,166, 5, 0, 0, 0, 0,120, 73,166, 5, 0, 0, 0, 0,232, 66,166, 5, - 0, 0, 0, 0,200, 67,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88, 74,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200, 74,166, 5, 0, 0, 0, 0,232, 73,166, 5, 0, 0, 0, 0, 88, 67,166, 5, - 0, 0, 0, 0, 56, 68,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200, 74,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 75,166, 5, 0, 0, 0, 0, 88, 74,166, 5, 0, 0, 0, 0,200, 67,166, 5, - 0, 0, 0, 0, 56, 68,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56, 75,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168, 75,166, 5, 0, 0, 0, 0,200, 74,166, 5, 0, 0, 0, 0,232, 66,166, 5, - 0, 0, 0, 0,168, 68,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168, 75,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24, 76,166, 5, 0, 0, 0, 0, 56, 75,166, 5, 0, 0, 0, 0, 8, 66,166, 5, - 0, 0, 0, 0,168, 68,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 76,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136, 76,166, 5, 0, 0, 0, 0,168, 75,166, 5, 0, 0, 0, 0, 56, 68,166, 5, - 0, 0, 0, 0,168, 68,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136, 76,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248, 76,166, 5, 0, 0, 0, 0, 24, 76,166, 5, 0, 0, 0, 0,184, 64,166, 5, - 0, 0, 0, 0, 24, 69,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248, 76,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104, 77,166, 5, 0, 0, 0, 0,136, 76,166, 5, 0, 0, 0, 0, 88, 67,166, 5, - 0, 0, 0, 0,136, 69,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104, 77,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216, 77,166, 5, 0, 0, 0, 0,248, 76,166, 5, 0, 0, 0, 0, 24, 69,166, 5, - 0, 0, 0, 0,136, 69,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216, 77,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72, 78,166, 5, 0, 0, 0, 0,104, 77,166, 5, 0, 0, 0, 0,120, 66,166, 5, - 0, 0, 0, 0, 24, 69,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72, 78,166, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 77,166, 5, 0, 0, 0, 0,200, 67,166, 5, - 0, 0, 0, 0,136, 69,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184, 78,166, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,136, 82,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 66,166, 5, - 0, 0, 0, 0, 40, 65,166, 5, 0, 0, 0, 0,152, 65,166, 5, 0, 0, 0, 0,232, 66,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,249, 3, 0, 0, 32, 4, 0, 0, 7, 7,129, 7, 40, 0, 1, 0, 0, 0, 0, 0, - 7, 0, 8, 0,248, 19, 64, 4, 0, 0, 0, 0, 40, 90,167, 5, 0, 0, 0, 0, 40, 90,167, 5, 0, 0, 0, 0,168, 79,166, 5, - 0, 0, 0, 0, 24, 81,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,127, 98, 4, - 0, 0, 0, 0,184,193,117, 5, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168, 79,166, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 24, 81,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,171, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 32,240, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0, 0,240, 68, 0, 0,200, 65, 0, 0,240, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,129, 7, 26, 0,129, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0,249, 3, 0, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,129, 7, 26, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 22, 64, 4, 0, 0, 0, 0,136,237,100, 4, 0, 0, 0, 0,136,237,100, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,242,148, 5, 0, 0, 0, 0, 56,129,123, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24, 81,166, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 79,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0, - 0, 0,200, 65, 0, 0, 0, 0, 0, 0,238, 68, 0, 0,128, 63, 0, 0,112, 65,112, 7, 0, 0,129, 7, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, - 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 14, 0,112, 7, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 19, 4, 0, 0, 32, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,129, 7, 14, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 21, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 60,133, 5, 0, 0, 0, 0, 56,132,123, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,136, 82,166, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0, 88,123,166, 5, 0, 0, 0, 0,184, 78,166, 5, 0, 0, 0, 0, 88, 67,166, 5, 0, 0, 0, 0, 56, 68,166, 5, - 0, 0, 0, 0,168, 68,166, 5, 0, 0, 0, 0, 8, 66,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 6, 0, 0, -128, 7, 0, 0, 0, 0, 0, 0,107, 3, 0, 0, 4, 4, 32, 1,108, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0,120, 15, 64, 4, - 0, 0, 0, 0, 24,122,166, 5, 0, 0, 0, 0, 24,122,166, 5, 0, 0, 0, 0,120, 83,166, 5, 0, 0, 0, 0,232, 84,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 75,118, 5, 0, 0, 0, 0,120, 60,135, 5, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 83,166, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,232, 84,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0,144, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,143, 67, - 0, 0,200, 65, 0,128,143, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0, 32, 1, 26, 0, 32, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 6, 0, 0, -128, 7, 0, 0, 82, 3, 0, 0,107, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 26, 0, - 4, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 18, 64, 4, - 0, 0, 0, 0, 24,214,139, 5, 0, 0, 0, 0, 24,214,139, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,232, 93,137, 5, 0, 0, 0, 0,120,135,123, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 84,166, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,120, 83,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0,128, 84,196, 0, 0, 0, 0, 0, 0, 0, 0, - 2,128,135, 67, 3,128, 84,196, 0, 0, 0, 0, 15, 1, 0, 0, 32, 1, 0, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 0, - 74, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, - 6, 0, 32, 1, 82, 3, 15, 1, 82, 3, 0, 0,136, 69,115, 5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 97, 6, 0, 0, -128, 7, 0, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 82, 3, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 16, 64, 4, - 0, 0, 0, 0, 88,174,149, 5, 0, 0, 0, 0,152,144, 99, 4, 0, 0, 0, 0, 88, 86,166, 5, 0, 0, 0, 0,120,120,166, 5, - 0, 0, 0, 0,200,126,123, 5, 0, 0, 0, 0, 72,139,123, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 86,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248, 87,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 17, 64, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, - 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, - 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116, -101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, - 15, 1, 36, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248, 87,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152, 89,166, 5, 0, 0, 0, 0, 88, 86,166, 5, 0, 0, 0, 0,136,175,227, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 15, 1, 61, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 89,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56, 91,166, 5, - 0, 0, 0, 0,248, 87,166, 5, 0, 0, 0, 0,136,178,227, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101, -114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, - 15, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 91,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 92,166, 5, 0, 0, 0, 0,152, 89,166, 5, 0, 0, 0, 0,152,181,227, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 15, 1,203, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 92,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120, 94,166, 5, - 0, 0, 0, 0, 56, 91,166, 5, 0, 0, 0, 0,168,184,227, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, - 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254, - 15, 1, 58, 0, 20, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 94,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 96,166, 5, 0, 0, 0, 0,216, 92,166, 5, 0, 0, 0, 0,120,187,227, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 15, 1, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24,236,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +184,237,219, 4, 0, 0, 0, 0,120,234,219, 4, 0, 0, 0, 0, 40, 0, 26, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 96,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184, 97,166, 5, - 0, 0, 0, 0,120, 94,166, 5, 0, 0, 0, 0, 8,204,185, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100, -105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254, - 15, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184, 97,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 99,166, 5, 0, 0, 0, 0, 24, 96,166, 5, 0, 0, 0, 0, 72,198,227, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,111,255, 9, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253, 15, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +184,237,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,239,219, 4, 0, 0, 0, 0, 24,236,219, 4, 0, 0, 0, 0, +152, 2, 26, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, +105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, +105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 99,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248,100,166, 5, - 0, 0, 0, 0,184, 97,166, 5, 0, 0, 0, 0, 24,201,227, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, - 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, - 15, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 9, 1,203, 0, 0, 0, 0, 0, 0, 0, 6, 0, + 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,100,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,102,166, 5, 0, 0, 0, 0, 88, 99,166, 5, 0, 0, 0, 0, 40,204,227, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,239,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +248,240,219, 4, 0, 0, 0, 0,184,237,219, 4, 0, 0, 0, 0, 8, 5, 26, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253, 15, 1, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 58,254, 9, 1, 58, 0, 20, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,102,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,104,166, 5, - 0, 0, 0, 0,248,100,166, 5, 0, 0, 0, 0, 40,207,227, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112, -117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,253, - 15, 1,134, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +248,240,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,242,219, 4, 0, 0, 0, 0, 88,239,219, 4, 0, 0, 0, 0, +120, 7, 26, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, + 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, + 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66, +108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 9, 1, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, + 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,104,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,105,166, 5, 0, 0, 0, 0,152,102,166, 5, 0, 0, 0, 0, 56,213,227, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,242,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 56,244,219, 4, 0, 0, 0, 0,248,240,219, 4, 0, 0, 0, 0,152,140,238, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 15, 1, 0, 0, 0, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 0, - 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10,254, 9, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,105,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,107,166, 5, - 0, 0, 0, 0, 56,104,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, - 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, - 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 99,101,110, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, - 41, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, + 56,244,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,245,219, 4, 0, 0, 0, 0,152,242,219, 4, 0, 0, 0, 0, + 8, 17, 26, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, +109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, +109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253, 9, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,107,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24,109,166, 5, 0, 0, 0, 0,216,105,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,245,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +120,247,219, 4, 0, 0, 0, 0, 56,244,219, 4, 0, 0, 0, 0,120, 19, 26, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,255, 41, 1, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,218,253, 9, 1, 0, 0, 0, 0, 0, 0, 4, 0, 6, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24,109,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184,110,166, 5, - 0, 0, 0, 0,120,107,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, - 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, - 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75,101,121,105, -110,103, 32, 83,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191,254, - 41, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,110,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,112,166, 5, 0, 0, 0, 0, 24,109,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +120,247,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24,249,219, 4, 0, 0, 0, 0,216,245,219, 4, 0, 0, 0, 0, +232, 21, 26, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114, 97,118,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131,254, 41, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253, 9, 1, 0, 0, 20, 0, 0, 0, 4, 0, 6, 0, + 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,112,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248,113,166, 5, - 0, 0, 0, 0,184,110,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, - 69, 95, 80, 84, 95,115,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, - 69, 95, 80, 84, 95,115,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,105,109,112, -108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27,254, - 41, 1, 80, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24,249,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +184,250,219, 4, 0, 0, 0, 0,120,247,219, 4, 0, 0, 0, 0, 88, 24, 26, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,113,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,115,166, 5, 0, 0, 0, 0, 88,112,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,111,112, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112,114,111,112, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,117,115,116,111,109, 32, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, + 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,223,253, 41, 1, 36, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 36,253, 9, 1,134, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,115,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,117,166, 5, - 0, 0, 0, 0,248,113,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, - 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, - 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +184,250,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,252,219, 4, 0, 0, 0, 0, 24,249,219, 4, 0, 0, 0, 0, + 56, 29, 26, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,255, -187, 0,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,117,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,118,166, 5, 0, 0, 0, 0,152,115,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105,110,103, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,253, 9, 1, 0, 0, 0, 0, 0, 0, 4, 0, 7, 0, + 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,252,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +248,253,219, 4, 0, 0, 0, 0,184,250,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,254,187, 0,171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 67, 69, 78, 69, 95, 80, 84, 95,115, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 99,101,110,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,118,166, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,120,166, 5, - 0, 0, 0, 0, 56,117,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, - 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, - 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,110,102,108, -117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,223,252, -187, 0, 86, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,135,255, 41, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,120,166, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,118,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 99,111,110,115,116,114, 97,105,110,116, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 99,111,110,115,116,114, 97,105,110,116, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 67,111,110,115,116,114, 97,105,110,116,115, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +248,253,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,255,219, 4, 0, 0, 0, 0, 88,252,219, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,255,187, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,117,110,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,110,105,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 24,122,166, 5, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 40,235,139, 5, 0, 0, 0, 0,255, 21, 0, 0, -160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,123,166, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72,128,166, 5, 0, 0, 0, 0,136, 82,166, 5, 0, 0, 0, 0,184, 64,166, 5, - 0, 0, 0, 0, 24, 69,166, 5, 0, 0, 0, 0,136, 69,166, 5, 0, 0, 0, 0, 88, 67,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 6, 0, 0, 0, 0, 0, 0,139, 0, 0, 0, 15, 15, 96, 6,140, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40,226, 63, 4, 0, 0, 0, 0, 40,127,166, 5, 0, 0, 0, 0, 40,127,166, 5, 0, 0, 0, 0, 72,124,166, 5, - 0, 0, 0, 0,184,125,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 75,135, 5, - 0, 0, 0, 0,200,159,139, 5, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,124,166, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,184,125,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,143, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,204, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 6, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,224,203, 68, 0, 0,200, 65, 0,224,203, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 96, 6, 26, 0, 96, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 6, 26, 0, 6, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72,228, 63, 4, 0, 0, 0, 0,120, 14,135, 5, 0, 0, 0, 0,120, 14,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,130,123, 5, 0, 0, 0, 0,184,144,123, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,125,166, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,124,166, 5, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, - 0, 0, 72, 66, 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 95, 6, 0, 0, 18, 0, 0, 0, -113, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, - 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 96, 6,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 6, 0, 0, 26, 0, 0, 0,139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 6,114, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72,227, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,145,123, 5, 0, 0, 0, 0,168,217,126, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 40,127,166, 5, 0, 0, 0, 0,191, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,255, 41, 1, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,255,219, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 56, 1,220, 4, 0, 0, 0, 0,248,253,219, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 67, 69, 78, 69, 95, 80, 84, 95,107,101,121,105,110,103, 95,115,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72,128,166, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 8,208,147, 5, 0, 0, 0, 0, 88,123,166, 5, 0, 0, 0, 0, 56, 68,166, 5, - 0, 0, 0, 0,200, 67,166, 5, 0, 0, 0, 0,232, 66,166, 5, 0, 0, 0, 0,168, 68,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 97, 6, 0, 0,128, 7, 0, 0,109, 3, 0, 0,247, 3, 0, 0, 3, 3, 32, 1,139, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 8,223, 63, 4, 0, 0, 0, 0, 24,132,166, 5, 0, 0, 0, 0, 24,132,166, 5, 0, 0, 0, 0, 56,129,166, 5, - 0, 0, 0, 0,168,130,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,148,118, 5, - 0, 0, 0, 0,248,243,119, 5, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,129,166, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,168,130,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,144, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128,143, 67, 0, 0,200, 65, 0,128,143, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 32, 1, 26, 0, 32, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 97, 6, 0, 0,128, 7, 0, 0,222, 3, 0, 0,247, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 1, 26, 0, 8, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40,225, 63, 4, 0, 0, 0, 0, 40,236,141, 5, 0, 0, 0, 0, 40,236,141, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,133,123, 5, 0, 0, 0, 0, 24,223,126, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,130,166, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,129,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128,135, 67, 0, 0,190,194, 0, 0, 0, 0, 15, 1, 0, 0, 32, 1, 0, 0, 18, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 14, 1, 0, 0, 18, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 0, 0, - 2, 0, 3, 3, 0, 0, 12, 4, 6, 0, 32, 1,113, 0, 15, 1, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 97, 6, 0, 0,128, 7, 0, 0,109, 3, 0, 0,221, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 1,113, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40,224, 63, 4, 0, 0, 0, 0, 88, 20,140, 5, 0, 0, 0, 0, 88, 20,140, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,136,123, 5, 0, 0, 0, 0,136,225,126, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0, 24,132,166, 5, 0, 0, 0, 0,184, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 75,101,121,105,110,103, 32, 83,101,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,191,254, 41, 1, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, + 56, 1,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216, 2,220, 4, 0, 0, 0, 0,152,255,219, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95,112,104,121,115,105, 99,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 89,170, 5, 0, 0, 0, 0,168, 89,170, 5, 0, 0, 0, 0,232,209,134, 5, - 0, 0, 0, 0, 0,115,101, 32, 83, 99,117,108,112,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, - 16, 0, 0, 0,232,209,134, 5, 0, 0, 0, 0,238, 0, 0, 0, 1, 0, 0, 0, 42, 11, 0, 0, 42, 11, 0, 0,120,133,166, 5, - 0, 0, 0, 0, 68, 65, 84, 65,160,178, 0, 0,120,133,166, 5, 0, 0, 0, 0,237, 0, 0, 0, 42, 11, 0, 0, 0, 0, 0, 0, - 2, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 20, 0, 0, 0, - 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 72,210,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184,219,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0,184, 17,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,248,232,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 8,255,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 88,226,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0,232,205,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0,216,204,168, 5, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 0, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, - 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 30, 0,255,255, - 3, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 30, 0,255,255, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 10, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 12, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 14, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 16, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 18, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 20, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 22, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 24, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 26, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 28, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 30, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 32, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 34, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 36, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 38, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 40, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 42, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 44, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 46, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 48, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 50, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 52, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 54, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 56, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 58, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 60, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 62, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 64, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 66, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 68, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 70, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 72, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 74, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 76, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 78, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 80, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 82, 0, - 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 2, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 4, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 6, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 8, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 10, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 12, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 14, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 16, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 18, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 20, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 22, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 24, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 26, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 28, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 30, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 32, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 34, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 36, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 38, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 40, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 42, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 44, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 46, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 48, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 50, 0, - 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 31, 0, 0, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 10, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 12, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 14, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 16, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 18, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 20, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 22, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 24, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 26, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 28, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 30, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 32, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 34, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 36, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 38, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 40, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 42, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 44, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 46, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 48, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 50, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 52, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 54, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 56, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 58, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 60, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 62, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 64, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 66, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 68, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 70, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 72, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 74, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 76, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 78, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 80, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 82, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 84, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 86, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 88, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 90, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 92, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 94, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 96, 0, - 1, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 21, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 23, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 25, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 27, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 29, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 31, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 33, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 35, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 37, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 39, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 41, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 43, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 45, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 47, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 49, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 51, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 53, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 55, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 57, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 59, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 61, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 63, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 65, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 67, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 69, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 71, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 73, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 75, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 77, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 79, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 81, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 83, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 85, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 87, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 89, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 91, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 93, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 95, 0, - 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 10, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 12, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 14, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 16, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 18, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 20, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 22, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 24, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 26, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 28, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 30, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 32, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 34, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 36, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 38, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 40, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 42, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 44, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 46, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 48, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 50, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 52, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 54, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 56, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 58, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 60, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 62, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 64, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 66, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 68, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 70, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 72, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 74, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 76, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 78, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 80, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 82, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 84, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 86, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 88, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 90, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 92, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 94, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 96, 0, - 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 24, 42,147, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,248,134,147, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 31, 0, 0, 0, - 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 2, 0, - 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 4, 0, - 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 6, 0, - 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 8, 0, - 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 10, 0, - 1, 0, 0, 0, 40, 39,147, 5, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 1, 0, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 3, 0, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 5, 0, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 7, 0, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 9, 0, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 11, 0, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 13, 0, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 15, 0, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 17, 0, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 19, 0, - 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0, 8,208,147, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,128,166, 5, - 0, 0, 0, 0, 24, 69,166, 5, 0, 0, 0, 0,120, 66,166, 5, 0, 0, 0, 0,200, 67,166, 5, 0, 0, 0, 0,136, 69,166, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 6, 0, 0,141, 0, 0, 0,247, 3, 0, 0, 1, 1, 96, 6, -107, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 72,229, 63, 4, 0, 0, 0, 0,120, 88,167, 5, 0, 0, 0, 0,120, 88,167, 5, - 0, 0, 0, 0,104, 56,167, 5, 0, 0, 0, 0, 72, 83,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,232, 31,125, 5, 0, 0, 0, 0,184,167,126, 5, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 56,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,216, 57,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,192,108, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,204, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,224,203, 68, 0, 0,200, 65, 0,224,203, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 96, 6, 26, 0, 96, 6, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 6, 0, 0,141, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 6, 26, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,239, 63, 4, 0, 0, 0, 0,200, 6,182, 5, 0, 0, 0, 0,200, 6,182, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,223,126, 5, 0, 0, 0, 0, 24, 50,127, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 57,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,200, 78,167, 5, 0, 0, 0, 0,104, 56,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0,128,178, 67, 0, 64, 30,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 30,196, 0, 0, 0, 0,143, 0, 0, 0, -160, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,121, 2,143, 0,121, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,127, 1, 0, 0,247, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,121, 2, 11, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0,160, 0, 50, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,236, 63, 4, 0, 0, 0, 0,232, 30,140, 5, 0, 0, 0, 0,232, 30,140, 5, - 0, 0, 0, 0, 72, 59,167, 5, 0, 0, 0, 0, 40, 77,167, 5, 0, 0, 0, 0,216, 46,127, 5, 0, 0, 0, 0,104,206,129, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72, 59,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 60,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,165,231, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, - 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,111, 98,106,101, - 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,143, 0,255, 1, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232, 60,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136, 62,167, 5, - 0, 0, 0, 0, 72, 59,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,114,117,115, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117,254, -143, 0,115, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136, 62,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40, 64,167, 5, 0, 0, 0, 0,232, 60,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, -104, 95,116,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, -104, 95,116,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,254,143, 0, 61, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114, 97,118,105,116,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131,254, 41, 1, 36, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40, 64,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 65,167, 5, - 0, 0, 0, 0,136, 62,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,115,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,115,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116,114,111, -107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69,254, -143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,200, 65,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104, 67,167, 5, 0, 0, 0, 0, 40, 64,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, -104, 95, 99,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115, -104, 95, 99,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104, 67,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8, 69,167, 5, - 0, 0, 0, 0,200, 65,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 97,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 97,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,112,112,101, - 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229,253, -143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 8, 69,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,168, 70,167, 5, 0, 0, 0, 0,104, 67,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,118,101,114,116, -101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,118,101,114,116, -101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149,253,143, 0,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168, 70,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72, 72,167, 5, - 0, 0, 0, 0, 8, 69,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,101,120,116, -117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,254, -143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72, 72,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 73,167, 5, 0, 0, 0, 0,168, 70,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,111,112,116, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,111,112,116, -105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 2,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +120, 4,220, 4, 0, 0, 0, 0, 56, 1,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 67, 69, 78, 69, 95, 80, 84, 95,115,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 67, 69, 78, 69, 95, 80, 84, 95,115,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232, 73,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136, 75,167, 5, - 0, 0, 0, 0, 72, 72,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,115,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,115,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,121,109,109, -101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,253, -143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83,105,109,112,108,105,102,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 27,254, 41, 1, 80, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136, 75,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40, 77,167, 5, 0, 0, 0, 0,232, 73,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,109,101,115,104, -101,100,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,109,101,115,104, -101,100,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,101,115,104, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,252,143, 0, 68, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +120, 4,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24, 6,220, 4, 0, 0, 0, 0,216, 2,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95, +112,114,111,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 69, 78, 69, 95, 80, 84, 95, 99,117,115,116,111,109, 95, +112,114,111,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,117,115,116,111,109, 32, 80,114,111,112,101,114,116,105,101, +115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,223,253, 41, 1, 36, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 6,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +184, 7,220, 4, 0, 0, 0, 0,120, 4,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40, 77,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,136, 75,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,105,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, - 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,105,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,101,115,104, - 32, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,235,251, -143, 0,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200, 78,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,216, 81,167, 5, 0, 0, 0, 0,216, 57,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0,128,178, 67, 0, 0, 90,195, 0, 0, 0, 0, 0, 0, 0, 0,227,102, 16, 67, 24, 30, 90,195, 0, 0, 0, 0,143, 0, 0, 0, -160, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,216, 0,143, 0,216, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,167, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,216, 0, 12, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,237, 63, 4, 0, 0, 0, 0,200, 86,170, 5, 0, 0, 0, 0,200, 86,170, 5, - 0, 0, 0, 0, 56, 80,167, 5, 0, 0, 0, 0, 56, 80,167, 5, 0, 0, 0, 0,232, 50,127, 5, 0, 0, 0, 0, 56,210,129, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 80,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,238, 63, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97, -116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97, -116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,101,114, 97,116,111,114, 0,105,116,109,111,100,101, 0,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, + 0, 0, 16,255,187, 0,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +184, 7,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88, 9,220, 4, 0, 0, 0, 0, 24, 6,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105, +110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,109, 97,112,112,105, +110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 97,112,112,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,254,187, 0,171, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 81,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 72, 83,167, 5, - 0, 0, 0, 0,200, 78,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 67, 0, 96,158,196, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 67, 0, 96,158,196, 0,128,142,195,163, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, - 6, 0,180, 0,214, 3,163, 0,214, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 6, 0, 0, - 95, 6, 0, 0,167, 0, 0, 0,247, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,231, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 9,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +248, 10,220, 4, 0, 0, 0, 0,184, 7,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 83,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,216, 81,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84, 69, 88, 84, 85, 82, 69, 95, 80, 84, 95,105,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 73,110,102,108,117,101,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,223,252,187, 0, 86, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0, - 95, 6, 0, 0,167, 0, 0, 0,247, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 5, 81, 3, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,230, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,200,229,129, 5, 0, 0, 0, 0,248,228,129, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 84,167, 5, - 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,184, 84,167, 5, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142,187,242, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,142, 6,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 11,210, 76,190, 0, 0, 0, 0, 68,239,209, 62, - 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188, -166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,210,111,193, 0, 0,128, 63, 68,239,209, 62, - 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, - 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, 62, 95, 68, 65, 51,120,173,192,115,208,213, 64, 0, 0,128, 63,178,157,229, 62, - 53, 8, 67,191,116,169, 81,191,184,158, 81,191,117, 90,127, 63,194, 3,188, 62,158, 53,185, 62, 35, 44,185, 62,145,180,109,188, -174, 65,217, 63,218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 33,171,108, 65, 33,210,111, 65,100,240,191, 62, -110,116, 85, 63, 64,185, 70,188, 0, 0, 82,180, 51,239, 88,190, 2, 33,209, 61,210,167,241, 62, 0, 0, 88, 51,197,112,117,194, -178,208,216, 65,220,158, 5,194,231,251,159,192,221, 54,114, 66, 29,247,213,193, 58,221, 3, 66, 25, 4,160, 64, 68,239,209, 62, - 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188, -166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,210,111,193, 0, 0,128, 63,178,157,229, 62, - 53, 8, 67,191,116,169, 81,191,184,158, 81,191,117, 90,127, 63,194, 3,188, 62,158, 53,185, 62, 35, 44,185, 62,145,180,109,188, -174, 65,217, 63,218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 33,171,108, 65, 33,210,111, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +248, 10,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152, 12,220, 4, 0, 0, 0, 0, 88, 9,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 99,111,110,115,116,114, + 97,105,110,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 74, 69, 67, 84, 95, 80, 84, 95, 99,111,110,115,116,114, + 97,105,110,116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 67,111,110,115,116,114, 97,105,110, +116,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160,255,187, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152, 12,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 56, 14,220, 4, 0, 0, 0, 0,248, 10,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,109,101,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95, 99,111,110,116,101,120,116, 95,109,101,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,184,255,171, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154,191,178, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154,191,178, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,154,191,178, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, - 56,186,224,190,237,203,148,190, 3,236,234,190, 33,210,111, 65, 33,210,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,134,210,162, 58, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 32, 33, 12, 66, 85,152,137, 66,113, 27,126, 66, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,120, 88,167, 5, 0, 0, 0, 0,175, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 1, 0, 7, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, + 56, 14,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216, 15,220, 4, 0, 0, 0, 0,152, 12,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,110,111,114,109, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, - 1, 0, 3, 0, 8, 24,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,122, 68, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,110,111,114,109, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,111,114,109, 97,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,184, 90,167, 5, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0,104,170,167, 5, - 0, 0, 0, 0,104, 63,166, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 71, 97, -109,101, 32, 76,111,103,105, 99, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,255,171, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 92,167, 5, 0, 0, 0, 0,184, 97,167, 5, - 0, 0, 0, 0, 40, 98,167, 5, 0, 0, 0, 0,232,106,167, 5, 0, 0, 0, 0, 88,107,167, 5, 0, 0, 0, 0,120,163,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8, 92,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120, 92,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,120, 92,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232, 92,167, 5, 0, 0, 0, 0, 8, 92,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 92,167, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88, 93,167, 5, 0, 0, 0, 0,120, 92,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 93,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,200, 93,167, 5, 0, 0, 0, 0,232, 92,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200, 93,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 94,167, 5, - 0, 0, 0, 0, 88, 93,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 56, 94,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168, 94,167, 5, 0, 0, 0, 0,200, 93,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168, 94,167, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24, 95,167, 5, 0, 0, 0, 0, 56, 94,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 95,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,136, 95,167, 5, 0, 0, 0, 0,168, 94,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6,140, 1, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136, 95,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 95,167, 5, - 0, 0, 0, 0, 24, 95,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,248, 95,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104, 96,167, 5, 0, 0, 0, 0,136, 95,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 96,167, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 96,167, 5, 0, 0, 0, 0,248, 95,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 64, 5,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 96,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0, 72, 97,167, 5, 0, 0, 0, 0,104, 96,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 5,234, 3, - 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72, 97,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,184, 97,167, 5, - 0, 0, 0, 0,216, 96,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,184, 97,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 97,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40, 98,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 98,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 92,167, 5, - 0, 0, 0, 0,232, 92,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152, 98,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8, 99,167, 5, 0, 0, 0, 0, 40, 98,167, 5, 0, 0, 0, 0,120, 92,167, 5, - 0, 0, 0, 0,200, 93,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8, 99,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 99,167, 5, 0, 0, 0, 0,152, 98,167, 5, 0, 0, 0, 0,232, 92,167, 5, - 0, 0, 0, 0, 56, 94,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120, 99,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232, 99,167, 5, 0, 0, 0, 0, 8, 99,167, 5, 0, 0, 0, 0,200, 93,167, 5, - 0, 0, 0, 0, 56, 94,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232, 99,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,100,167, 5, 0, 0, 0, 0,120, 99,167, 5, 0, 0, 0, 0,200, 93,167, 5, - 0, 0, 0, 0,168, 94,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 88,100,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,100,167, 5, 0, 0, 0, 0,232, 99,167, 5, 0, 0, 0, 0,168, 94,167, 5, - 0, 0, 0, 0, 24, 95,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,100,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,101,167, 5, 0, 0, 0, 0, 88,100,167, 5, 0, 0, 0, 0, 88, 93,167, 5, - 0, 0, 0, 0,136, 95,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 56,101,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,101,167, 5, 0, 0, 0, 0,200,100,167, 5, 0, 0, 0, 0, 24, 95,167, 5, - 0, 0, 0, 0,136, 95,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,168,101,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,102,167, 5, 0, 0, 0, 0, 56,101,167, 5, 0, 0, 0, 0, 8, 92,167, 5, - 0, 0, 0, 0,168, 94,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24,102,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,102,167, 5, 0, 0, 0, 0,168,101,167, 5, 0, 0, 0, 0, 8, 92,167, 5, - 0, 0, 0, 0,136, 95,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,102,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,102,167, 5, 0, 0, 0, 0, 24,102,167, 5, 0, 0, 0, 0, 56, 94,167, 5, - 0, 0, 0, 0,248, 95,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,102,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,103,167, 5, 0, 0, 0, 0,136,102,167, 5, 0, 0, 0, 0, 88, 93,167, 5, - 0, 0, 0, 0,248, 95,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,103,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,103,167, 5, 0, 0, 0, 0,248,102,167, 5, 0, 0, 0, 0, 24, 95,167, 5, - 0, 0, 0, 0,248, 95,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,103,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,104,167, 5, 0, 0, 0, 0,104,103,167, 5, 0, 0, 0, 0,104, 96,167, 5, - 0, 0, 0, 0,216, 96,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,104,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,104,167, 5, 0, 0, 0, 0,216,103,167, 5, 0, 0, 0, 0, 56, 94,167, 5, - 0, 0, 0, 0,216, 96,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,104,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,105,167, 5, 0, 0, 0, 0, 72,104,167, 5, 0, 0, 0, 0,248, 95,167, 5, - 0, 0, 0, 0,104, 96,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,105,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,105,167, 5, 0, 0, 0, 0,184,104,167, 5, 0, 0, 0, 0,168, 94,167, 5, - 0, 0, 0, 0, 72, 97,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,105,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,106,167, 5, 0, 0, 0, 0, 40,105,167, 5, 0, 0, 0, 0,104, 96,167, 5, - 0, 0, 0, 0, 72, 97,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,106,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,106,167, 5, 0, 0, 0, 0,152,105,167, 5, 0, 0, 0, 0,200, 93,167, 5, - 0, 0, 0, 0,184, 97,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,106,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,106,167, 5, 0, 0, 0, 0, 8,106,167, 5, 0, 0, 0, 0,216, 96,167, 5, - 0, 0, 0, 0,184, 97,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,106,167, 5, - 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,106,167, 5, 0, 0, 0, 0, 72, 97,167, 5, - 0, 0, 0, 0,184, 97,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,107,167, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40,111,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 93,167, 5, - 0, 0, 0, 0,120, 92,167, 5, 0, 0, 0, 0,232, 92,167, 5, 0, 0, 0, 0, 56, 94,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,169,167, 5, 0, 0, 0, 0,216,169,167, 5, 0, 0, 0, 0, 72,108,167, 5, - 0, 0, 0, 0,184,109,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,108,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,184,109,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,109,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,108,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,238, 68, 0, 0, 0, 0, 0, 0, 0, 64,112, 7, 0, 0,129, 7, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, - 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 40,111,167, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,184,135,167, 5, 0, 0, 0, 0, 88,107,167, 5, 0, 0, 0, 0,136, 95,167, 5, 0, 0, 0, 0, 24, 95,167, 5, - 0, 0, 0, 0,248, 95,167, 5, 0, 0, 0, 0, 88, 93,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, -126, 7, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 4, 4, 94, 1,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,120,134,167, 5, 0, 0, 0, 0,120,134,167, 5, 0, 0, 0, 0, 24,112,167, 5, 0, 0, 0, 0,136,113,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,112,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,136,113,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,174, 67, - 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, -126, 7, 0, 0,114, 1, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1, 26, 0, - 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,113,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24,112,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,174, 67, 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0, -255,127,166, 67,255,255,184,195, 0, 0, 0, 0, 77, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, - 78, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, - 6, 0, 94, 1,114, 1, 77, 1,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 0, 0, -126, 7, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 1,114, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,114,167, 5, 0, 0, 0, 0,216,132,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,114,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,116,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, - 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, - 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116, -101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255, - 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,116,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,118,167, 5, 0, 0, 0, 0,248,114,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216, 15,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +120, 17,220, 4, 0, 0, 0, 0, 56, 14,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95,116,101,120,116,117,114,101, 95,115,112, 97, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95,116,101,120,116,117,114,101, 95,115,112, 97, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,118,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,119,167, 5, - 0, 0, 0, 0,152,116,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101, -114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255, - 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84,101,120,116,117,114,101, 32, 83,112, 97, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 78,255,171, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,119,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,121,167, 5, 0, 0, 0, 0, 56,118,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115,105,111,110,115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +120, 17,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24, 19,220, 4, 0, 0, 0, 0,216, 15,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,101,120, 95,103, +114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,101,120, 95,103, +114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,101,114,116,101,120, 32, 71,114,111,117,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234,254,171, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24, 19,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +184, 20,220, 4, 0, 0, 0, 0,120, 17,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95,115,104, 97,112,101, 95,107,101,121,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,121,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24,123,167, 5, - 0, 0, 0, 0,216,119,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, - 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254, - 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95,115,104, 97,112,101, 95,107,101,121,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83,104, 97,112,101, 32, 75,101,121,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24,123,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184,124,167, 5, 0, 0, 0, 0,120,121,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, 95, 98,108,117, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66,108,117,114, 0, + 0, 0,134,254,171, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +184, 20,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88, 22,220, 4, 0, 0, 0, 0, 24, 19,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,117,118, 95,116,101,120,116,117, +114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95,117,118, 95,116,101,120,116,117, +114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 32, 77, 97,112,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41,254,171, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,124,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,126,167, 5, - 0, 0, 0, 0, 24,123,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100, -105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254, - 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 22,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +248, 23,220, 4, 0, 0, 0, 0,184, 20,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,101,120, 95, 99,111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,126,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248,127,167, 5, 0, 0, 0, 0,184,124,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114,109, 97,110, 99, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 95, 80, 84, 95,118,101,114,116,101,120, 95, 99,111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86,101,114,116,101,120, 32, 67,111,108,111,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,204,253,171, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,127,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,129,167, 5, - 0, 0, 0, 0, 88,126,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, - 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253, - 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +248, 23,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 22,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112, +114,111,112,115, 95,109,101,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 95, 80, 84, 95, 99,117,115,116,111,109, 95,112, +114,111,112,115, 95,109,101,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,117,115,116,111,109, 32, 80,114,111,112,101,114,116,105,101, +115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180,253,171, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,129,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,131,167, 5, 0, 0, 0, 0,248,127,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,152, 25,220, 4, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,131,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,132,167, 5, - 0, 0, 0, 0,152,129,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, - 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112, -117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253, - 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0,120, 98,186, 4, 0, 0, 0, 0, +255, 13, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +216, 26,220, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,200, 31,220, 4, 0, 0, 0, 0, 8,229,219, 4, 0, 0, 0, 0, + 8,102,201, 4, 0, 0, 0, 0,104,106,201, 4, 0, 0, 0, 0,216,106,201, 4, 0, 0, 0, 0,168,104,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 6, 0, 0, 0, 0, 0, 0,155, 0, 0, 0, 15, 15,100, 6,156, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56,129,109, 3, 0, 0, 0, 0,168, 30,220, 4, 0, 0, 0, 0,168, 30,220, 4, 0, 0, 0, 0, +200, 27,220, 4, 0, 0, 0, 0, 56, 29,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24,134,184, 4, 0, 0, 0, 0,184,229,184, 4, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200, 27,220, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 56, 29,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,143, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,204, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 6, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,204, 68, 0, 0,200, 65, 0, 96,204, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,100, 6, 26, 0,100, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,100, 6, 26, 0, 6, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88,131,109, 3, 0, 0, 0, 0,168, 71,145, 3, 0, 0, 0, 0,168, 71,145, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,185,133, 3, 0, 0, 0, 0,248, 73,189, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 29,220, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 27,220, 4, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 72, 66, 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 99, 6, 0, 0, + 18, 0, 0, 0,129, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, + 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,100, 6,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 6, 0, 0, 26, 0, 0, 0,155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,100, 6,130, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88,130,109, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 74,189, 4, 0, 0, 0, 0, 8, 78,189, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,168, 30,220, 4, 0, 0, 0, 0, +185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +200, 31,220, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,232,215,220, 4, 0, 0, 0, 0,216, 26,220, 4, 0, 0, 0, 0, +136,105,201, 4, 0, 0, 0, 0, 24,105,201, 4, 0, 0, 0, 0, 56,104,201, 4, 0, 0, 0, 0,248,105,201, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,101, 6, 0, 0,126, 7, 0, 0,205, 3, 0, 0, 99, 4, 0, 0, 3, 3, 26, 1,151, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 8, 0, 24,126,109, 3, 0, 0, 0, 0,152, 35,220, 4, 0, 0, 0, 0,152, 35,220, 4, 0, 0, 0, 0, +184, 32,220, 4, 0, 0, 0, 0, 40, 34,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40,238,184, 4, 0, 0, 0, 0, 24, 7,168, 4, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 32,220, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 40, 34,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,141, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 1, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,140, 67, 0, 0,200, 65, 0,128,140, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 26, 1, 26, 0, 26, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,101, 6, 0, 0,126, 7, 0, 0, 74, 4, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 26, 1, 26, 0, 8, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56,128,109, 3, 0, 0, 0, 0, 40, 20,194, 4, 0, 0, 0, 0, 40, 20,194, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 91,187, 4, 0, 0, 0, 0,168, 93,187, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 34,220, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 32,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, + 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,132, 67, 0, 0,214,194, 0, 0, 0, 0, 9, 1, 0, 0, 26, 1, 0, 0, + 18, 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, + 18, 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 18, 0, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0, 26, 1,125, 0, 9, 1,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,101, 6, 0, 0,126, 7, 0, 0,205, 3, 0, 0, 73, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 26, 1,125, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56,127,109, 3, 0, 0, 0, 0,152,153,203, 4, 0, 0, 0, 0,152,153,203, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 94,187, 4, 0, 0, 0, 0, 24, 96,187, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,152, 35,220, 4, 0, 0, 0, 0, +181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,132,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,131,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 21,177, 4, 0, 0, 0, 0,248, 21,177, 4, 0, 0, 0, 0, +104,222,190, 4, 0, 0, 0, 0, 0,115,101, 32, 83, 99,117,108,112,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 68, 65, 84, 65, 16, 0, 0, 0,104,222,190, 4, 0, 0, 0, 0,238, 0, 0, 0, 1, 0, 0, 0, 42, 11, 0, 0, 42, 11, 0, 0, +248, 36,220, 4, 0, 0, 0, 0, 68, 65, 84, 65,160,178, 0, 0,248, 36,220, 4, 0, 0, 0, 0,237, 0, 0, 0, 42, 11, 0, 0, + 0, 0, 0, 0, 2, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, + 20, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 8,118,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136,127,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,168,181,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,140,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,248,162,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 56,134,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,168,113,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216,120,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,152,112,222, 4, 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 0, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 2, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 4, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 6, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 8, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 10, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 12, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 14, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 16, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 18, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 20, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 22, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 24, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 26, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 28, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 30, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 32, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 34, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 36, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 38, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 40, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 42, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 44, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 46, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 48, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 50, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 52, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 54, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 56, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 58, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 60, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 62, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 64, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 66, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 31, 0, 68, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 3, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, 30, 0,255,255, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, + 30, 0,255,255, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 31, 0, 0, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 2, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 4, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 6, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 8, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 10, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 12, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 14, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 16, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 18, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 20, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 22, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 24, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 26, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 28, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 30, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 32, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 34, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 36, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 38, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 40, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 42, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 44, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 46, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 48, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 50, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 52, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 54, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 56, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 58, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 60, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 62, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 64, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 66, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 68, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 70, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 72, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 74, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 76, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 78, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 80, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 82, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, + 31, 0, 0, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 2, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 4, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 6, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 8, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 10, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 12, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 14, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 16, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 18, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 20, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 22, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 24, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 26, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 28, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 30, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 32, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 34, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 36, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 38, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 40, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 42, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 44, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 46, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 48, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 50, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 31, 0, 0, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 2, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 4, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 6, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 8, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 10, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 12, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 14, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 16, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 18, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 20, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 22, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 24, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 26, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 28, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 30, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 32, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 34, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 36, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 38, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 40, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 42, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 44, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 46, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 48, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 50, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 52, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 54, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 56, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 58, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 60, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 62, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 64, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 66, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 68, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 70, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 72, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 74, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 76, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 78, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 80, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 82, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 84, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 86, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 88, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 90, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 92, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 94, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, + 31, 0, 96, 0, 1, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 21, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 22, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 23, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 24, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 25, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 26, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 27, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 28, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 29, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 30, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 31, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 32, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 33, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 34, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 35, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 36, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 37, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 38, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 39, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 40, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 41, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 42, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 43, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 44, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 45, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 46, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 47, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 48, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 49, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 50, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 51, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 52, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 53, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 54, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 55, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 56, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 57, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 58, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 59, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 60, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 61, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 62, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 63, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 64, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 65, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 66, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 67, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 68, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 69, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 70, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 71, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 72, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 73, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 74, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 75, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 76, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 77, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 78, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 79, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 80, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 81, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 82, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 83, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 84, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 85, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 86, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 87, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 88, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 89, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 90, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 91, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 92, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 93, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 94, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 95, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 31, 0, 96, 0, 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 31, 0, 0, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 2, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 4, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 6, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 8, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 10, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 11, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 12, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 13, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 14, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 15, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 16, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 17, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 18, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 19, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 20, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 21, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 22, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 23, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 24, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 25, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 26, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 27, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 28, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 29, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 30, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 31, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 32, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 33, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 34, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 35, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 36, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 37, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 38, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 39, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 40, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 41, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 42, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 43, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 44, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 45, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 46, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 47, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 48, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 49, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 50, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 51, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 52, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 53, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 54, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 55, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 56, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 57, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 58, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 59, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 60, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 61, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 62, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 63, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 64, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 65, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 66, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 67, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 68, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 69, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 70, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 71, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 72, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 73, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 74, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 75, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 76, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 77, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 78, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 79, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 80, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 81, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 82, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 83, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 84, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 85, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 86, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 87, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 88, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 89, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 90, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 91, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 92, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 93, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 94, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 95, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, + 31, 0, 96, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,232,152,200, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 56,248,200, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,216, 43,222, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0,248,162,222, 4, 0, 0, 0, 0, + 31, 0, 0, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, 31, 0, 1, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, + 31, 0, 2, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, 31, 0, 3, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, + 31, 0, 4, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, 31, 0, 5, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, + 31, 0, 6, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, 31, 0, 7, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, + 31, 0, 8, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, 31, 0, 9, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, + 31, 0, 10, 0, 1, 0, 0, 0,248,149,200, 4, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 31, 0, 1, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 2, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 31, 0, 3, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 4, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 31, 0, 5, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 6, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 31, 0, 7, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 8, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 31, 0, 9, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 10, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 31, 0, 11, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 12, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 31, 0, 13, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 14, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 31, 0, 15, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 16, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 31, 0, 17, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 18, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 31, 0, 19, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, 31, 0, 20, 0, 1, 0, 0, 0, 8,118,222, 4, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0,232,215,220, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +200, 31,220, 4, 0, 0, 0, 0,104,106,201, 4, 0, 0, 0, 0,200,103,201, 4, 0, 0, 0, 0, 24,105,201, 4, 0, 0, 0, 0, +216,106,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 6, 0, 0,157, 0, 0, 0, 99, 4, 0, 0, + 1, 1,100, 6,199, 3, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 88,132,109, 3, 0, 0, 0, 0, 40,252,220, 4, 0, 0, 0, 0, + 40,252,220, 4, 0, 0, 0, 0,216,216,220, 4, 0, 0, 0, 0,248,246,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,168, 3,168, 4, 0, 0, 0, 0, 88, 79,171, 4, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +216,216,220, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 72,218,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,192,108, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,204, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 96,204, 68, 0, 0,200, 65, 0, 96,204, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,100, 6, 26, 0,100, 6, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 6, 0, 0,157, 0, 0, 0,182, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 6, 26, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,142,109, 3, 0, 0, 0, 0,184,213,193, 4, 0, 0, 0, 0, +184,213,193, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,190,149, 3, 0, 0, 0, 0, + 40,194,149, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 72,218,220, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,120,242,220, 4, 0, 0, 0, 0,216,216,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,178, 67, 0, 64, 53,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 53,196, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,212, 2, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,212, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,213, 2,143, 0,213, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,143, 1, 0, 0, 99, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,213, 2, 11, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, +160, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,139,109, 3, 0, 0, 0, 0,168,192,202, 4, 0, 0, 0, 0, +168,192,202, 4, 0, 0, 0, 0,184,219,220, 4, 0, 0, 0, 0,216,240,220, 4, 0, 0, 0, 0,248,194,149, 3, 0, 0, 0, 0, +104,197,149, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +184,219,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,221,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +104, 72, 29, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, +111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, +111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,143, 0,255, 1, 0, 0, 0, 0, 0, 0, 39, 0, + 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,120,134,167, 5, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,221,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +248,222,220, 4, 0, 0, 0, 0,184,219,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,189,254,143, 0, 43, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0, -160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184,135,167, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40,143,167, 5, 0, 0, 0, 0, 40,111,167, 5, 0, 0, 0, 0, 8, 92,167, 5, - 0, 0, 0, 0,168, 94,167, 5, 0, 0, 0, 0, 24, 95,167, 5, 0, 0, 0, 0,136, 95,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 17, 17, 32, 6,140, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,142,167, 5, 0, 0, 0, 0,152,142,167, 5, 0, 0, 0, 0,168,136,167, 5, - 0, 0, 0, 0, 40,141,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,136,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 24,138,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,224,195, 68, 0, 0,200, 65, 0,224,195, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 32, 6, 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +248,222,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,224,220, 4, 0, 0, 0, 0, 88,221,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, + 98,114,117,115,104, 95,116,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, + 98,114,117,115,104, 95,116,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,111,111,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,254,143, 0, 61, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,138,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 40,141,167, 5, 0, 0, 0, 0,168,136,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,185,195, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,185,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0, -113, 1, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, -113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,114, 1,203, 0,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,220, 0,114, 1, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,139,167, 5, - 0, 0, 0, 0,136,139,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,139,167, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,224,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 56,226,220, 4, 0, 0, 0, 0,248,222,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,115,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,115,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,196,255,203, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83,116,114,111,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,165,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0, 40,141,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,138,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0, 0, 0,112, 67, 0, 80, 31,195, 0,234,179, 68,224,198,182,194, -184,177,165, 67, 51, 5, 0, 0, 68, 5, 0, 0, 18, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 18, 0, 0, 0,113, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,250, 70, - 0, 0,250, 70, 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 68, 5,114, 1, 51, 5, - 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0, 31, 6, 0, 0, 26, 0, 0, 0, -139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, + 56,226,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,227,220, 4, 0, 0, 0, 0,152,224,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, + 98,114,117,115,104, 95, 99,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, + 98,114,117,115,104, 95, 99,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,117,114,118,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 72, 0, 0, 0,152,142,167, 5, 0, 0, 0, 0,193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0, 40,143,167, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,149,167, 5, 0, 0, 0, 0,184,135,167, 5, - 0, 0, 0, 0,104, 96,167, 5, 0, 0, 0, 0,216, 96,167, 5, 0, 0, 0, 0, 56, 94,167, 5, 0, 0, 0, 0,248, 95,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 9, 9, 62, 2, - 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,146,167, 5, 0, 0, 0, 0,248,146,167, 5, - 0, 0, 0, 0, 24,144,167, 5, 0, 0, 0, 0,136,145,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,144,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,136,145,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,230, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 15, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 61, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 15, 68, 0, 0,200, 65, 0, 64, 15, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 62, 2, 26, 0, 62, 2, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,227,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +120,229,220, 4, 0, 0, 0, 0, 56,226,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 97,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,145,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,144,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0,128,181, 67, 0, 0, 0, 0, 0,128,218, 67, 0, 0, 0, 0,131,248, 1, 68, 0, 0, 0, 0, 86, 26, 3, 68, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95, 97,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 61, 2, 0, 0, 0, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, - 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0, 62, 2, 67, 2, 62, 2, 67, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 65,112,112,101, 97,114, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,117,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 2, 0, 0,248,146,167, 5, - 0, 0, 0, 0,187, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +120,229,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 24,231,220, 4, 0, 0, 0, 0,216,227,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, +118,101,114,116,101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, +118,101,114,116,101,120,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149,253,143, 0,146, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 24,231,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +184,232,220, 4, 0, 0, 0, 0,120,229,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, 98,114,117,115,104, 95,116,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84,101,120,116,117,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 93,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +184,232,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88,234,220, 4, 0, 0, 0, 0, 24,231,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, + 95,111,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, + 95,111,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,254,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88,234,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +248,235,220, 4, 0, 0, 0, 0,184,232,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,115,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,115, 99,117,108,112,116, 95,115,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83,121,109,109,101,116,114,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,253,253,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,232,149,167, 5, 0, 0, 0, 0,215, 0, 0, 0, - 1, 0, 0, 0,120,163,167, 5, 0, 0, 0, 0, 40,143,167, 5, 0, 0, 0, 0, 72, 97,167, 5, 0, 0, 0, 0,184, 97,167, 5, - 0, 0, 0, 0,216, 96,167, 5, 0, 0, 0, 0,104, 96,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, - 63, 5, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 1, 1,251, 3, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,200,161,167, 5, 0, 0, 0, 0,200,161,167, 5, 0, 0, 0, 0,216,150,167, 5, 0, 0, 0, 0,152,156,167, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +248,235,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,152,237,220, 4, 0, 0, 0, 0, 88,234,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, +109,101,115,104,101,100,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, +109,101,115,104,101,100,105,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,101,115,104, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,150,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 72,152,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0,192,126, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,126, 68, - 0, 0,200, 65, 0,128,126, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, - 10, 0,251, 3, 26, 0,251, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, - 63, 5, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3, 26, 0, - 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,252,143, 0, 68, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,152,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,184,153,167, 5, - 0, 0, 0, 0,216,150,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, - 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, - 69, 1, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 67, 2, - 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,152,237,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 56,239,220, 4, 0, 0, 0, 0,248,235,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,105,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,153,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40,155,167, 5, - 0, 0, 0, 0, 72,152,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0, -231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, - 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, - 63, 5, 0, 0,167, 1, 0, 0,167, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,109,101,115,104,101,100,105,116, 95,111,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 77,101,115,104, 32, 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,155,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,152,156,167, 5, - 0, 0, 0, 0,184,153,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 67, 0, 0,109,196, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 67, 0, 0,109,196, 0,128,145,195,163, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0,144, 2, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,144, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, - 6, 0,180, 0,145, 2,163, 0,145, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 5, 0, 0, - 63, 5, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,235,251,143, 0,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,156,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40,155,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, + 56,239,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,216,240,220, 4, 0, 0, 0, 0,152,237,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, +119,101,105,103,104,116,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, +119,101,105,103,104,116,112, 97,105,110,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,101,105,103,104,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159,253,143, 0,190, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, - 63, 5, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251, 3, 67, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,216,240,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56,239,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,119,101,105,103,104,116,112, 97,105,110,116, 95,111,112,116,105, +111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95,119,101,105,103,104,116,112, 97,105,110,116, 95,111,112,116,105, +111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79,112,116,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,157,252,143, 0,234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,158,167, 5, - 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, 8,158,167, 5, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0,190, 35, 30, 61, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0,128, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,190, 35, 30, 61, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,149, 53,207, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,121,107, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,255,255,249,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,190, 35, 30, 61, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +120,242,220, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,136,245,220, 4, 0, 0, 0, 0, 72,218,220, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,178, 67, 0, 0, 90,195, 0, 0, 0, 0, 0, 0, 0, 0,227,102, 16, 67, 24, 30, 90,195, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,216, 0,143, 0,216, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,183, 0, 0, 0,142, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,216, 0, 12, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0,216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,140,109, 3, 0, 0, 0, 0, 56,133,193, 4, 0, 0, 0, 0, + 56,133,193, 4, 0, 0, 0, 0,232,243,220, 4, 0, 0, 0, 0,232,243,220, 4, 0, 0, 0, 0, 56, 25,193, 4, 0, 0, 0, 0, + 8,183,149, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +232,243,220, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152,141,109, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111, +112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111, +112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,112,101,114, 97,116,111,114, 0, 32, 77, 97,112, 0,111,100, +101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,245,220, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +248,246,220, 4, 0, 0, 0, 0,120,242,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 67, 0, 96,158,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 67, 0, 96,158,196, 0,128,142,195,163, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, + 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0,180, 0,214, 3,163, 0,214, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 99, 6, 0, 0, 99, 6, 0, 0,183, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +120,134,109, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,246,220, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,136,245,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 53,207, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,221, 57, 80, 61, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65, 0, 0, 5, 0,251,251, 0, 0, 92, 62, 55, 63, 56,186,224,190, -237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,180, 66, 0, 0,180, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,200,161,167, 5, 0, 0, 0, 0,175, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 1, 0, 7, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, - 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,122, 68, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, +160, 0, 0, 0, 99, 6, 0, 0,183, 0, 0, 0, 99, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +196, 5,173, 3, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, +120,133,109, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 40,123,186, 4, 0, 0, 0, 0, 88,122,186, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +104,248,220, 4, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,104,248,220, 4, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, +255,255,139, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159,152,219, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 6,128,191, 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 11,210, 76,190, 0, 0, 0, 0, + 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, +162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,210,111,193, 0, 0,128, 63, + 68,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 52,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0, +185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, 62, 95, 68, 65, 51,120,173,192,115,208,213, 64, 0, 0,128, 63, +177,157,229, 62, 56,113, 48,191,116,169, 81,191,184,158, 81,191,115, 90,127, 63, 0, 24,170, 62,158, 53,185, 62, 35, 44,185, 62, +143,180,109,188, 99,140,196, 63,218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 33,171,108, 65, 33,210,111, 65, + 39,240,191, 62,126,116, 85, 63, 96,189, 70,188, 0, 0,186,180, 48,202,111,190,126, 41,231, 61,228,142, 5, 63, 0, 0,224, 51, +197,112,117,194,178,208,216, 65,221,158, 5,194,231,251,159,192,221, 54,114, 66, 29,247,213,193, 59,221, 3, 66, 25, 4,160, 64, + 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0, +162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,210,111,193, 0, 0,128, 63, +177,157,229, 62, 56,113, 48,191,116,169, 81,191,184,158, 81,191,115, 90,127, 63, 0, 24,170, 62,158, 53,185, 62, 35, 44,185, 62, +143,180,109,188, 99,140,196, 63,218, 72,228,190, 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0, 33,171,108, 65, 33,210,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120,163,167, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,232,149,167, 5, 0, 0, 0, 0,168, 94,167, 5, 0, 0, 0, 0,200, 93,167, 5, 0, 0, 0, 0,184, 97,167, 5, - 0, 0, 0, 0, 72, 97,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,141, 1, 0, 0, -233, 3, 0, 0, 3, 3, 68, 1, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,167,167, 5, - 0, 0, 0, 0, 72,167,167, 5, 0, 0, 0, 0,104,164,167, 5, 0, 0, 0, 0,216,165,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,104,164,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,216,165,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,162, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,161, 67, 0, 0,200, 65, 0,128,161, 67, - 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 68, 1, 26, 0, 68, 1, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,141, 1, 0, 0, -166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,216,165,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,164,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,153, 67, 0, 64, 12,196, - 0, 0, 0, 0, 51, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0, 68, 1, 67, 2, 51, 1, - 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0,167, 1, 0, 0, -233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 24, 1, 0, 0, 72,167,167, 5, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 82,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,120, 82,137, 5, 0, 0, 0, 0,238, 0, 0, 0, - 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,168,168,167, 5, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0,168,168,167, 5, - 0, 0, 0, 0,237, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 19, 0, 0, 0, - 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 21, 0, 1, 0, - 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,210,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0,184,219,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184, 17,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0,248,232,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,255,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 88,226,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,205,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216,204,168, 5, 0, 0, 0, 0, 21, 0, 0, 0, - 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,104,170,167, 5, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 72,242,167, 5, 0, 0, 0, 0,184, 90,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 82, 77,111,116,105,111,110, 32, 84,114, 97, 99,107,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,171,167, 5, - 0, 0, 0, 0,104,177,167, 5, 0, 0, 0, 0,216,177,167, 5, 0, 0, 0, 0, 72,185,167, 5, 0, 0, 0, 0,184,185,167, 5, - 0, 0, 0, 0,248,225,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,184,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,171,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0, 40,172,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40,172,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,152,172,167, 5, - 0, 0, 0, 0,184,171,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 4, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,152,172,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 8,173,167, 5, 0, 0, 0, 0, 40,172,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 98, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,173,167, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,173,167, 5, 0, 0, 0, 0,152,172,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,173,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,232,173,167, 5, 0, 0, 0, 0, 8,173,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 4, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,173,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,174,167, 5, - 0, 0, 0, 0,120,173,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 88,174,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200,174,167, 5, 0, 0, 0, 0,232,173,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,174,167, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,175,167, 5, 0, 0, 0, 0, 88,174,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 88, 5, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,175,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,168,175,167, 5, 0, 0, 0, 0,200,174,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,175,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,176,167, 5, - 0, 0, 0, 0, 56,175,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,108, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 24,176,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136,176,167, 5, 0, 0, 0, 0,168,175,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,176,167, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,176,167, 5, 0, 0, 0, 0, 24,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 62, 6,120, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,176,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,104,177,167, 5, 0, 0, 0, 0,136,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2,120, 3, - 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,177,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,248,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2, 64, 4, 1, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,216,177,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,178,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40,172,167, 5, 0, 0, 0, 0,152,172,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 72,178,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,178,167, 5, 0, 0, 0, 0,216,177,167, 5, - 0, 0, 0, 0, 40,172,167, 5, 0, 0, 0, 0,120,173,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,184,178,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,179,167, 5, 0, 0, 0, 0, 72,178,167, 5, - 0, 0, 0, 0,152,172,167, 5, 0, 0, 0, 0,232,173,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 40,179,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,179,167, 5, 0, 0, 0, 0,184,178,167, 5, - 0, 0, 0, 0,120,173,167, 5, 0, 0, 0, 0,232,173,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,152,179,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,180,167, 5, 0, 0, 0, 0, 40,179,167, 5, - 0, 0, 0, 0,184,171,167, 5, 0, 0, 0, 0, 8,173,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 8,180,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,180,167, 5, 0, 0, 0, 0,152,179,167, 5, - 0, 0, 0, 0,184,171,167, 5, 0, 0, 0, 0, 56,175,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,120,180,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,180,167, 5, 0, 0, 0, 0, 8,180,167, 5, - 0, 0, 0, 0, 8,173,167, 5, 0, 0, 0, 0,168,175,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,232,180,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,181,167, 5, 0, 0, 0, 0,120,180,167, 5, - 0, 0, 0, 0, 56,175,167, 5, 0, 0, 0, 0,168,175,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 88,181,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,181,167, 5, 0, 0, 0, 0,232,180,167, 5, - 0, 0, 0, 0, 56,175,167, 5, 0, 0, 0, 0, 24,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,200,181,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,182,167, 5, 0, 0, 0, 0, 88,181,167, 5, - 0, 0, 0, 0,120,173,167, 5, 0, 0, 0, 0, 24,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 56,182,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,182,167, 5, 0, 0, 0, 0,200,181,167, 5, - 0, 0, 0, 0,232,173,167, 5, 0, 0, 0, 0,136,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,168,182,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,183,167, 5, 0, 0, 0, 0, 56,182,167, 5, - 0, 0, 0, 0,168,175,167, 5, 0, 0, 0, 0,136,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 24,183,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,183,167, 5, 0, 0, 0, 0,168,182,167, 5, - 0, 0, 0, 0, 24,176,167, 5, 0, 0, 0, 0,136,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,136,183,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,183,167, 5, 0, 0, 0, 0, 24,183,167, 5, - 0, 0, 0, 0, 24,176,167, 5, 0, 0, 0, 0,248,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,248,183,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,184,167, 5, 0, 0, 0, 0,136,183,167, 5, - 0, 0, 0, 0,136,176,167, 5, 0, 0, 0, 0,248,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,104,184,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,184,167, 5, 0, 0, 0, 0,248,183,167, 5, - 0, 0, 0, 0,120,173,167, 5, 0, 0, 0, 0,104,177,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,216,184,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,185,167, 5, 0, 0, 0, 0,104,184,167, 5, - 0, 0, 0, 0,232,173,167, 5, 0, 0, 0, 0,104,177,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 72,185,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,184,167, 5, - 0, 0, 0, 0,248,176,167, 5, 0, 0, 0, 0,104,177,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0,184,185,167, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,136,189,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,120,173,167, 5, 0, 0, 0, 0, 40,172,167, 5, 0, 0, 0, 0,152,172,167, 5, 0, 0, 0, 0,232,173,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 65, 4, 0, 0, 98, 4, 0, 0, 7, 7, 63, 6, - 34, 0, 1, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,241,167, 5, 0, 0, 0, 0,184,241,167, 5, - 0, 0, 0, 0,168,186,167, 5, 0, 0, 0, 0, 24,188,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,186,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24,188,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,163, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 65, 4, 0, 0, 90, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,188,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,186,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0,192,239, 68, 0, 0, 0, 0, 0, 0,200, 65, 0, 0, 0, 0, 0,192,197, 68, 0, 0,128, 64, 0, 0, 64, 65, 46, 6, 0, 0, - 63, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 45, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0, 63, 6, 8, 0, 46, 6, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 91, 4, 0, 0, 98, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,136,189,167, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120,194,167, 5, 0, 0, 0, 0,184,185,167, 5, 0, 0, 0, 0,184,171,167, 5, - 0, 0, 0, 0, 56,175,167, 5, 0, 0, 0, 0,168,175,167, 5, 0, 0, 0, 0, 8,173,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0,107, 0, 0, 0, 15, 15, 63, 6,108, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,193,167, 5, 0, 0, 0, 0, 88,193,167, 5, 0, 0, 0, 0,120,190,167, 5, - 0, 0, 0, 0,232,191,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120,190,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,232,191,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,191,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,190,167, 5, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, - 0, 0, 72, 66, 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 18, 0, 0, 0, - 81, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, - 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 63, 6, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 26, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 6, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 88,193,167, 5, 0, 0, 0, 0,191, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152, 67,178, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 67,178, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,152, 67,178, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, 33,210,111, 65,196, 18,107, 65, 0, 0, 0, 0, 0, 0, 0, 0, +146, 97,162, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 30, 33, 12, 66, 85,152,137, 66,113, 27,126, 66, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0, 40,252,220, 4, 0, 0, 0, 0, +176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120,194,167, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 56,210,167, 5, 0, 0, 0, 0,136,189,167, 5, 0, 0, 0, 0, 56,175,167, 5, - 0, 0, 0, 0, 24,176,167, 5, 0, 0, 0, 0,136,176,167, 5, 0, 0, 0, 0,168,175,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0,109, 0, 0, 0,119, 3, 0, 0, 20, 20, 63, 6, 11, 3, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,208,167, 5, 0, 0, 0, 0,184,208,167, 5, 0, 0, 0, 0,104,195,167, 5, - 0, 0, 0, 0, 72,207,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,195,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,216,196,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 19, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 0, 0, 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0,109, 0, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 3, 0, 0, 0, 1, 0, 3, 0, 8, 24,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,122, 68, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,104,254,220, 4, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, + 24, 78,221, 4, 0, 0, 0, 0,184,100,201, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 82, 71, 97,109,101, 32, 76,111,103,105, 99, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,255,220, 4, 0, 0, 0, 0, +104, 5,221, 4, 0, 0, 0, 0,216, 5,221, 4, 0, 0, 0, 0,152, 14,221, 4, 0, 0, 0, 0, 8, 15,221, 4, 0, 0, 0, 0, + 40, 71,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,255,220, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 40, 0,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 40, 0,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 0,221, 4, 0, 0, 0, 0, +184,255,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +152, 0,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8, 1,221, 4, 0, 0, 0, 0, 40, 0,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8, 1,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,120, 1,221, 4, 0, 0, 0, 0,152, 0,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120, 1,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +232, 1,221, 4, 0, 0, 0, 0, 8, 1,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,232, 1,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88, 2,221, 4, 0, 0, 0, 0, +120, 1,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 88, 2,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200, 2,221, 4, 0, 0, 0, 0,232, 1,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200, 2,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0, 56, 3,221, 4, 0, 0, 0, 0, 88, 2,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 6,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56, 3,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +168, 3,221, 4, 0, 0, 0, 0,200, 2,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,168, 3,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24, 4,221, 4, 0, 0, 0, 0, + 56, 3,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 24, 4,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136, 4,221, 4, 0, 0, 0, 0,168, 3,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 5,140, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136, 4,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,248, 4,221, 4, 0, 0, 0, 0, 24, 4,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 5,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248, 4,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +104, 5,221, 4, 0, 0, 0, 0,136, 4,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,140, 1, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,104, 5,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +248, 4,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +216, 5,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72, 6,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 0,221, 4, 0, 0, 0, 0,152, 0,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 72, 6,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184, 6,221, 4, 0, 0, 0, 0,216, 5,221, 4, 0, 0, 0, 0, + 40, 0,221, 4, 0, 0, 0, 0,120, 1,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +184, 6,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40, 7,221, 4, 0, 0, 0, 0, 72, 6,221, 4, 0, 0, 0, 0, +152, 0,221, 4, 0, 0, 0, 0,232, 1,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 40, 7,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152, 7,221, 4, 0, 0, 0, 0,184, 6,221, 4, 0, 0, 0, 0, +120, 1,221, 4, 0, 0, 0, 0,232, 1,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +152, 7,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8, 8,221, 4, 0, 0, 0, 0, 40, 7,221, 4, 0, 0, 0, 0, +120, 1,221, 4, 0, 0, 0, 0, 88, 2,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 8, 8,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120, 8,221, 4, 0, 0, 0, 0,152, 7,221, 4, 0, 0, 0, 0, + 88, 2,221, 4, 0, 0, 0, 0,200, 2,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +120, 8,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 8,221, 4, 0, 0, 0, 0, 8, 8,221, 4, 0, 0, 0, 0, + 8, 1,221, 4, 0, 0, 0, 0, 56, 3,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +232, 8,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 9,221, 4, 0, 0, 0, 0,120, 8,221, 4, 0, 0, 0, 0, +200, 2,221, 4, 0, 0, 0, 0, 56, 3,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 88, 9,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 9,221, 4, 0, 0, 0, 0,232, 8,221, 4, 0, 0, 0, 0, +184,255,220, 4, 0, 0, 0, 0, 88, 2,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +200, 9,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56, 10,221, 4, 0, 0, 0, 0, 88, 9,221, 4, 0, 0, 0, 0, +184,255,220, 4, 0, 0, 0, 0, 56, 3,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 56, 10,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,168, 10,221, 4, 0, 0, 0, 0,200, 9,221, 4, 0, 0, 0, 0, +232, 1,221, 4, 0, 0, 0, 0,168, 3,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +168, 10,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 11,221, 4, 0, 0, 0, 0, 56, 10,221, 4, 0, 0, 0, 0, + 8, 1,221, 4, 0, 0, 0, 0,168, 3,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 24, 11,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136, 11,221, 4, 0, 0, 0, 0,168, 10,221, 4, 0, 0, 0, 0, +200, 2,221, 4, 0, 0, 0, 0,168, 3,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +136, 11,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248, 11,221, 4, 0, 0, 0, 0, 24, 11,221, 4, 0, 0, 0, 0, + 24, 4,221, 4, 0, 0, 0, 0,136, 4,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +248, 11,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104, 12,221, 4, 0, 0, 0, 0,136, 11,221, 4, 0, 0, 0, 0, +232, 1,221, 4, 0, 0, 0, 0,136, 4,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +104, 12,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 12,221, 4, 0, 0, 0, 0,248, 11,221, 4, 0, 0, 0, 0, +168, 3,221, 4, 0, 0, 0, 0, 24, 4,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +216, 12,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72, 13,221, 4, 0, 0, 0, 0,104, 12,221, 4, 0, 0, 0, 0, + 88, 2,221, 4, 0, 0, 0, 0,248, 4,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 72, 13,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184, 13,221, 4, 0, 0, 0, 0,216, 12,221, 4, 0, 0, 0, 0, + 24, 4,221, 4, 0, 0, 0, 0,248, 4,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +184, 13,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40, 14,221, 4, 0, 0, 0, 0, 72, 13,221, 4, 0, 0, 0, 0, +120, 1,221, 4, 0, 0, 0, 0,104, 5,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, + 40, 14,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152, 14,221, 4, 0, 0, 0, 0,184, 13,221, 4, 0, 0, 0, 0, +136, 4,221, 4, 0, 0, 0, 0,104, 5,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +152, 14,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 14,221, 4, 0, 0, 0, 0, +248, 4,221, 4, 0, 0, 0, 0,104, 5,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, + 8, 15,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,216, 18,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +120, 1,221, 4, 0, 0, 0, 0, 40, 0,221, 4, 0, 0, 0, 0,152, 0,221, 4, 0, 0, 0, 0,232, 1,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 77,221, 4, 0, 0, 0, 0,136, 77,221, 4, 0, 0, 0, 0, +248, 15,221, 4, 0, 0, 0, 0,104, 17,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 15,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,104, 17,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 17,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 15,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, + 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,238, 68, 0, 0, 0, 0, 0, 0, 0, 64,112, 7, 0, 0,129, 7, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,196,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 72,198,167, 5, 0, 0, 0, 0,104,195,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 30,196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 30,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, -120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, -120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,121, 2,143, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,255, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,160, 0,121, 2, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,216, 18,221, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0,104, 43,221, 4, 0, 0, 0, 0, 8, 15,221, 4, 0, 0, 0, 0, 56, 3,221, 4, 0, 0, 0, 0, +200, 2,221, 4, 0, 0, 0, 0,168, 3,221, 4, 0, 0, 0, 0, 8, 1,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 4, 4, 94, 1,140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 40, 42,221, 4, 0, 0, 0, 0, 40, 42,221, 4, 0, 0, 0, 0,200, 19,221, 4, 0, 0, 0, 0, + 56, 21,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200, 19,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 56, 21,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0, 0,175, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,174, 67, 0, 0,200, 65, 0,128,174, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0, 94, 1, 26, 0, 94, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 6, 0, 0,126, 7, 0, 0,114, 1, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,198,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 88,201,167, 5, 0, 0, 0, 0,216,196,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, -119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,135, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,160, 0,120, 0, 0, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,199,167, 5, - 0, 0, 0, 0,184,199,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184,199,167, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 21,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,200, 19,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,174, 67, 0, 0, 61,196, 0, 0, 0, 0, + 0, 0, 0, 0,255,127,166, 67,255,255,184,195, 0, 0, 0, 0, 77, 1, 0, 0, 94, 1, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, + 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0, 94, 1,114, 1, 77, 1,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 6, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 1,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 22,221, 4, 0, 0, 0, 0, +136, 40,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168, 22,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 72, 24,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, + 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,220,255, 76, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0, 88,201,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,104,204,167, 5, 0, 0, 0, 0, 72,198,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 60,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 60,196, - 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,240, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,240, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,241, 2,143, 0, -241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 5, 0, 0, 62, 6, 0, 0,135, 0, 0, 0, -119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,241, 2, 0, 0, 4, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,202,167, 5, 0, 0, 0, 0,200,202,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,200,202,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, - 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, - 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,255,143, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, + 72, 24,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232, 25,221, 4, 0, 0, 0, 0,168, 22,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,204,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,216,205,167, 5, 0, 0, 0, 0, 88,201,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64,110,196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0,192,105,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0, -184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, - 2, 0, 3, 3, 0, 0, 2, 0, 6, 0,160, 0,185, 3,160, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,160, 0, 0, 0,160, 0, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255, 76, 1, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,205,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 72,207,167, 5, 0, 0, 0, 0,104,204,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, - 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0,124,146, 72,255,255,127,127, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232, 25,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +136, 27,221, 4, 0, 0, 0, 0, 72, 24,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,160, 0, 0, 0,160, 0, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,207,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,205,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 0, 0, 0, 0, 0, 0, -241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, - 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,255, 4,241, 2,255, 4,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,160, 0, 0, 0,158, 5, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,255, 4,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,111,255, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,184,208,167, 5, 0, 0, 0, 0,197, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +136, 27,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 29,221, 4, 0, 0, 0, 0,232, 25,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, +105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105,109,101,110,115, +105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254, 76, 1,203, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40, 29,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +200, 30,221, 4, 0, 0, 0, 0,136, 27,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0, 56,210,167, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,248,225,167, 5, 0, 0, 0, 0,120,194,167, 5, - 0, 0, 0, 0,248,176,167, 5, 0, 0, 0, 0,104,177,167, 5, 0, 0, 0, 0,232,173,167, 5, 0, 0, 0, 0,136,176,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 62, 6, 0, 0,121, 3, 0, 0, 63, 4, 0, 0, 20, 20,110, 3, -199, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,224,167, 5, 0, 0, 0, 0,120,224,167, 5, - 0, 0, 0, 0, 40,211,167, 5, 0, 0, 0, 0, 8,223,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,211,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,152,212,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,212, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 91, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 91, 68, 0, 0,200, 65, 0, 64, 91, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0,110, 3, 26, 0,110, 3, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 62, 6, 0, 0,121, 3, 0, 0,146, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,212,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 8,214,167, 5, 0, 0, 0, 0, 40,211,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0,128,178, 67, 0, 0, 84,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 84,194, 0, 0, 0, 0,143, 0, 0, 0, -160, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 53, 0,143, 0, 53, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,214,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24,217,167, 5, 0, 0, 0, 0,152,212,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, 0, 0, 0, 0,143, 0, 0, 0, -160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,120,215,167, 5, 0, 0, 0, 0,120,215,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120,215,167, 5, - 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,217,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40,220,167, 5, - 0, 0, 0, 0, 8,214,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 45,195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, - 6, 0,160, 0,173, 0,143, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, -209, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,218,167, 5, 0, 0, 0, 0,136,218,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,136,218,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, - 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, - 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97, -115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,255, -143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,220,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,152,221,167, 5, 0, 0, 0, 0, 24,217,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0, 0, 27,195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -159, 0, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,160, 0,173, 0,160, 0,155, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,112, 3, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,173, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,221,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 8,223,167, 5, 0, 0, 0, 0, 40,220,167, 5, 0, 0, 0, 0, 0, 0, 32,193, - 0,128, 91, 68,171,170,132,194, 0, 0, 0, 0, 0, 0, 32,193, 0,128, 91, 68, 0, 0, 27,195, 0, 0, 0, 0,189, 2, 0, 0, -206, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0,188, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -188, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72,255,255,127,127, 10,215, 35, 60, - 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 16, 0, 2, 4, 4, 0,206, 2,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113, 3, 0, 0, 62, 6, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,206, 2,173, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8,223,167, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,221,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, 0, 0,128,127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 46, 2, 0, 0, 0, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, - 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 10, 0, 46, 2,173, 0, 46, 2,173, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 58,254, 76, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,120,224,167, 5, - 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 2, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +200, 30,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104, 32,221, 4, 0, 0, 0, 0, 40, 29,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, + 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111,116,105,111,110, + 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105,111,110, 32, 66, +108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104, 32,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 8, 34,221, 4, 0, 0, 0, 0,200, 30,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,248,225,167, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56,210,167, 5, 0, 0, 0, 0, 24,176,167, 5, 0, 0, 0, 0,120,173,167, 5, 0, 0, 0, 0,104,177,167, 5, - 0, 0, 0, 0,248,176,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,121, 3, 0, 0, - 63, 4, 0, 0, 20, 20,208, 2,199, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,240,167, 5, - 0, 0, 0, 0, 56,240,167, 5, 0, 0, 0, 0,232,226,167, 5, 0, 0, 0, 0,200,238,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,232,226,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 88,228,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 52, 68, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 51, 68, 0, 0,200, 65, 0,192, 51, 68, - 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0,208, 2, 26, 0,208, 2, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,121, 3, 0, 0, -146, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10,254, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0, 88,228,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,200,229,167, 5, 0, 0, 0, 0,232,226,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 84,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 84,194, - 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 53, 0,143, 0, - 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, - 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, + 8, 34,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168, 35,221, 4, 0, 0, 0, 0,104, 32,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, +109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101,114,102,111,114, +109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,200,229,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,216,232,167, 5, 0, 0, 0, 0, 88,228,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, - 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,120, 0,143, 0, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, - 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,231,167, 5, 0, 0, 0, 0, 56,231,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 56,231,167, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, - 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, - 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216,232,167, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,232,235,167, 5, 0, 0, 0, 0,200,229,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 45,195, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, -172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,173, 0,143, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,234,167, 5, - 0, 0, 0, 0, 72,234,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72,234,167, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168, 35,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 72, 37,221, 4, 0, 0, 0, 0, 8, 34,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,232,235,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 88,237,167, 5, 0, 0, 0, 0,216,232,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64,110,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0,192,105,196, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 0, 6, 0,160, 0,185, 3,160, 0, -167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, - 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, + 0, 0,218,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0, 88,237,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,200,238,167, 5, 0, 0, 0, 0,232,235,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, - 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 18, 0, 0, 0,207, 2, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 18, 0, 0, 0,207, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0,124,146, 72, -255,255,127,127, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,208, 2,173, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0,147, 3, 0, 0, - 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2,173, 0, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, + 72, 37,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232, 38,221, 4, 0, 0, 0, 0,168, 35,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 1, 0, 0,200,238,167, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,237,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, - 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 0, 0, 0, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 10, 0,144, 1,173, 0,144, 1, -173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253, 76, 1, 0, 0, 20, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 56, 1, 0, 0, 56,240,167, 5, 0, 0, 0, 0,197, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 1, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, 72,242,167, 5, 0, 0, 0, 0,211, 0, 0, 0, - 1, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0,104,170,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 82, 83, 99,114,105,112,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,243,167, 5, - 0, 0, 0, 0, 72,249,167, 5, 0, 0, 0, 0,184,249,167, 5, 0, 0, 0, 0,232, 2,168, 5, 0, 0, 0, 0, 88, 3,168, 5, - 0, 0, 0, 0,184, 57,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,184,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152,243,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0, 8,244,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,244,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,120,244,167, 5, - 0, 0, 0, 0,152,243,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,120,244,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,244,167, 5, 0, 0, 0, 0, 8,244,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,244,167, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 88,245,167, 5, 0, 0, 0, 0,120,244,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,245,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,200,245,167, 5, 0, 0, 0, 0,232,244,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 3, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,245,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,246,167, 5, - 0, 0, 0, 0, 88,245,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0, 56,246,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,246,167, 5, 0, 0, 0, 0,200,245,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,246,167, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 24,247,167, 5, 0, 0, 0, 0, 56,246,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,247,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0,136,247,167, 5, 0, 0, 0, 0,168,246,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 1, - 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,247,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,247,167, 5, - 0, 0, 0, 0, 24,247,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, - 32, 0, 0, 0,248,247,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,248,167, 5, 0, 0, 0, 0,136,247,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,248,167, 5, - 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216,248,167, 5, 0, 0, 0, 0,248,247,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 5,236, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,248,167, 5, 0, 0, 0, 0,212, 0, 0, 0, - 1, 0, 0, 0, 72,249,167, 5, 0, 0, 0, 0,104,248,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,236, 2, - 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,249,167, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,216,248,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,184,249,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,250,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8,244,167, 5, 0, 0, 0, 0,120,244,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 40,250,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,250,167, 5, 0, 0, 0, 0,184,249,167, 5, - 0, 0, 0, 0, 8,244,167, 5, 0, 0, 0, 0, 88,245,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,152,250,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,251,167, 5, 0, 0, 0, 0, 40,250,167, 5, - 0, 0, 0, 0,120,244,167, 5, 0, 0, 0, 0,200,245,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 8,251,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,251,167, 5, 0, 0, 0, 0,152,250,167, 5, - 0, 0, 0, 0, 88,245,167, 5, 0, 0, 0, 0,200,245,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,120,251,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,251,167, 5, 0, 0, 0, 0, 8,251,167, 5, - 0, 0, 0, 0,200,245,167, 5, 0, 0, 0, 0, 56,246,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,232,251,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,252,167, 5, 0, 0, 0, 0,120,251,167, 5, - 0, 0, 0, 0,232,244,167, 5, 0, 0, 0, 0,168,246,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 88,252,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,252,167, 5, 0, 0, 0, 0,232,251,167, 5, - 0, 0, 0, 0,152,243,167, 5, 0, 0, 0, 0, 24,247,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,200,252,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,253,167, 5, 0, 0, 0, 0, 88,252,167, 5, - 0, 0, 0, 0, 88,245,167, 5, 0, 0, 0, 0, 24,247,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 56,253,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,253,167, 5, 0, 0, 0, 0,200,252,167, 5, - 0, 0, 0, 0, 56,246,167, 5, 0, 0, 0, 0,136,247,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,168,253,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,254,167, 5, 0, 0, 0, 0, 56,253,167, 5, - 0, 0, 0, 0,168,246,167, 5, 0, 0, 0, 0,136,247,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 24,254,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,254,167, 5, 0, 0, 0, 0,168,253,167, 5, - 0, 0, 0, 0, 24,247,167, 5, 0, 0, 0, 0,248,247,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,136,254,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,254,167, 5, 0, 0, 0, 0, 24,254,167, 5, - 0, 0, 0, 0,136,247,167, 5, 0, 0, 0, 0,248,247,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,248,254,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,255,167, 5, 0, 0, 0, 0,136,254,167, 5, - 0, 0, 0, 0,168,246,167, 5, 0, 0, 0, 0,104,248,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,104,255,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,255,167, 5, 0, 0, 0, 0,248,254,167, 5, - 0, 0, 0, 0, 56,246,167, 5, 0, 0, 0, 0,104,248,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,216,255,167, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72, 0,168, 5, 0, 0, 0, 0,104,255,167, 5, - 0, 0, 0, 0,200,245,167, 5, 0, 0, 0, 0,216,248,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 72, 0,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184, 0,168, 5, 0, 0, 0, 0,216,255,167, 5, - 0, 0, 0, 0,232,244,167, 5, 0, 0, 0, 0,216,248,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,184, 0,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40, 1,168, 5, 0, 0, 0, 0, 72, 0,168, 5, - 0, 0, 0, 0,104,248,167, 5, 0, 0, 0, 0,216,248,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 40, 1,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 1,168, 5, 0, 0, 0, 0,184, 0,168, 5, - 0, 0, 0, 0, 88,245,167, 5, 0, 0, 0, 0, 72,249,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,152, 1,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8, 2,168, 5, 0, 0, 0, 0, 40, 1,168, 5, - 0, 0, 0, 0, 56,246,167, 5, 0, 0, 0, 0, 72,249,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0, 8, 2,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 2,168, 5, 0, 0, 0, 0,152, 1,168, 5, - 0, 0, 0, 0,248,247,167, 5, 0, 0, 0, 0, 72,249,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,120, 2,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232, 2,168, 5, 0, 0, 0, 0, 8, 2,168, 5, - 0, 0, 0, 0, 24,247,167, 5, 0, 0, 0, 0,136,247,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,232, 2,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 2,168, 5, - 0, 0, 0, 0,152,243,167, 5, 0, 0, 0, 0,168,246,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0, 88, 3,168, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40, 7,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 88,245,167, 5, 0, 0, 0, 0, 8,244,167, 5, 0, 0, 0, 0,120,244,167, 5, 0, 0, 0, 0,200,245,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0, 5, 4, 0, 0, 7, 7,127, 7, - 93, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 64,168, 5, 0, 0, 0, 0,120, 64,168, 5, - 0, 0, 0, 0, 72, 4,168, 5, 0, 0, 0, 0,184, 5,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 4,168, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,184, 5,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,236, 3, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184, 5,168, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 4,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0,192,239, 68, 0, 0, 0, 0, 0, 0, 28, 66, 0, 0, 0, 0, 0,192,237, 68, 0, 0, 0, 0, 0, 0,134, 66,110, 7, 0, 0, -127, 7, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -109, 7, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,127, 7, 67, 0,110, 7, 67, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0,235, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 40, 7,168, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,184, 31,168, 5, 0, 0, 0, 0, 88, 3,168, 5, 0, 0, 0, 0,168,246,167, 5, - 0, 0, 0, 0,104,248,167, 5, 0, 0, 0, 0,216,248,167, 5, 0, 0, 0, 0,232,244,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, 4, 4,142, 1,236, 2, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 30,168, 5, 0, 0, 0, 0,120, 30,168, 5, 0, 0, 0, 0, 24, 8,168, 5, - 0, 0, 0, 0,136, 9,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24, 8,168, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,136, 9,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,199, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,128,198, 67, 0, 0,200, 65, 0,128,198, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0,210, 2, 0, 0,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,142, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136, 9,168, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 8,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,198, 67, 0, 0, 61,196, - 0, 0, 0, 0, 0, 0, 0, 0,254,127,190, 67,254,127, 52,196, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 0, 0, 0, 0, -209, 2, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, -209, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, - 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,142, 1,210, 2,125, 1,210, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,142, 1,210, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 10,168, 5, - 0, 0, 0, 0,216, 28,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248, 10,168, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0,152, 12,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,220,255,124, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232, 38,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, +136, 40,221, 4, 0, 0, 0, 0, 72, 37,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,152, 12,168, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56, 14,168, 5, 0, 0, 0, 0,248, 10,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101, -110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,114,101, -110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,124, 1, 61, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 14,168, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0,216, 15,168, 5, 0, 0, 0, 0,152, 12,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 40,253, 76, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, +136, 40,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 38,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,111,255,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,216, 15,168, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120, 17,168, 5, 0, 0, 0, 0, 56, 14,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105, -109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,100,105, -109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111,110,115, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,124, 1,203, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, 76, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,120, 17,168, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0, 24, 19,168, 5, 0, 0, 0, 0,216, 15,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 40, 42,221, 4, 0, 0, 0, 0,180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58,254,124, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 24, 19,168, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184, 20,168, 5, 0, 0, 0, 0,120, 17,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111, -116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,109,111, -116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, 77,111,116,105, -111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,124, 1, 0, 0, 20, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +104, 43,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,216, 50,221, 4, 0, 0, 0, 0,216, 18,221, 4, 0, 0, 0, 0, +184,255,220, 4, 0, 0, 0, 0, 88, 2,221, 4, 0, 0, 0, 0,200, 2,221, 4, 0, 0, 0, 0, 56, 3,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0,139, 1, 0, 0, 17, 17, 32, 6,140, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 50,221, 4, 0, 0, 0, 0, 72, 50,221, 4, 0, 0, 0, 0, + 88, 44,221, 4, 0, 0, 0, 0,216, 48,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 44,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,200, 45,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,196, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,224,195, 68, 0, 0,200, 65, 0,224,195, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 32, 6, 26, 0, 32, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,184, 20,168, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0, 88, 22,168, 5, 0, 0, 0, 0, 24, 19,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200, 45,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,216, 48,221, 4, 0, 0, 0, 0, 88, 44,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, + 0, 0,185,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 0, 0,185,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, + 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, + 0, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,114, 1,203, 0,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,220, 0,114, 1, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 47,221, 4, 0, 0, 0, 0, 56, 47,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 47,221, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 76, 79, 71, 73, 67, 95, 80, 84, 95,112,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10,254,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80,114,111,112,101,114,116,105,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,196,255,203, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0, 88, 22,168, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248, 23,168, 5, 0, 0, 0, 0,184, 20,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101, -114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,101, -114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253,124, 1, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,216, 48,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +200, 45,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 68, 0, 0, 0, 0, 0, 0,112, 67, 0, 80, 31,195, 0,234,179, 68, +224,198,182,194,184,177,165, 67, 51, 5, 0, 0, 68, 5, 0, 0, 18, 0, 0, 0,113, 1, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 5, 0, 0, 18, 0, 0, 0,113, 1, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,250, 70, 0, 0,250, 70, 0, 0, 0, 63, 72,225,154, 63, 10, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 68, 5, +114, 1, 51, 5, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0, 31, 6, 0, 0, + 26, 0, 0, 0,139, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 5,114, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248, 23,168, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0,152, 25,168, 5, 0, 0, 0, 0, 88, 22,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 72, 0, 0, 0, 72, 50,221, 4, 0, 0, 0, 0,194, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0,216, 50,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,152, 57,221, 4, 0, 0, 0, 0, +104, 43,221, 4, 0, 0, 0, 0, 24, 4,221, 4, 0, 0, 0, 0,136, 4,221, 4, 0, 0, 0, 0,232, 1,221, 4, 0, 0, 0, 0, +168, 3,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,141, 1, 0, 0,233, 3, 0, 0, + 9, 9, 62, 2, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 54,221, 4, 0, 0, 0, 0, +168, 54,221, 4, 0, 0, 0, 0,200, 51,221, 4, 0, 0, 0, 0, 56, 53,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +200, 51,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 56, 53,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 15, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,218,253,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 15, 68, 0, 0,200, 65, 0, 64, 15, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 62, 2, 26, 0, 62, 2, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,141, 1, 0, 0,166, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,152, 25,168, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56, 27,168, 5, 0, 0, 0, 0,248, 23,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, - 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,116, - 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 56, 53,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 51,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,181, 67, 0, 0, 0, 0, 0,128,218, 67, 0, 0, 0, 0,131,248, 1, 68, 0, 0, 0, 0, 86, 26, 3, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253,124, 1, 0, 0, 20, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 2, 0, 0, 0, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0, 62, 2, 67, 2, 62, 2, 67, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 5, 0, 0,126, 7, 0, 0,167, 1, 0, 0,233, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56, 27,168, 5, 0, 0, 0, 0,214, 0, 0, 0, - 1, 0, 0, 0,216, 28,168, 5, 0, 0, 0, 0,152, 25,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 2, 0, 0, +168, 54,221, 4, 0, 0, 0, 0,190, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40,253,124, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 88, 1, 0, 0,216, 28,168, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 27,168, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97, -107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 98, 97, -107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253,124, 1, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0,120, 30,168, 5, 0, 0, 0, 0,180, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0,184, 31,168, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 72, 45,168, 5, 0, 0, 0, 0, 40, 7,168, 5, - 0, 0, 0, 0,248,247,167, 5, 0, 0, 0, 0, 72,249,167, 5, 0, 0, 0, 0, 56,246,167, 5, 0, 0, 0, 0,136,247,167, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0,167, 3, 0, 0, 1, 1,247, 2, - 63, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 43,168, 5, 0, 0, 0, 0,152, 43,168, 5, - 0, 0, 0, 0,168, 32,168, 5, 0, 0, 0, 0,104, 38,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168, 32,168, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24, 34,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 61, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -246, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 61, 68, 0, 0,200, 65, 0,128, 61, 68, 0, 0,200, 65, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,247, 2, 26, 0,247, 2, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24, 34,168, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,136, 35,168, 5, 0, 0, 0, 0,168, 32,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0, -160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,249, 2, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 37, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136, 35,168, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,248, 36,168, 5, 0, 0, 0, 0, 24, 34,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0, -160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0,131, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 36,168, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,104, 38,168, 5, 0, 0, 0, 0,136, 35,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0,163, 0, 0, 0, -180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, -162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 38,168, 5, - 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 36,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,152, 57,221, 4, 0, 0, 0, 0, +216, 0, 0, 0, 1, 0, 0, 0, 40, 71,221, 4, 0, 0, 0, 0,216, 50,221, 4, 0, 0, 0, 0,248, 4,221, 4, 0, 0, 0, 0, +104, 5,221, 4, 0, 0, 0, 0,136, 4,221, 4, 0, 0, 0, 0, 24, 4,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 69, 1, 0, 0, 63, 5, 0, 0,141, 1, 0, 0,233, 3, 0, 0, 1, 1,251, 3, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,120, 69,221, 4, 0, 0, 0, 0,120, 69,221, 4, 0, 0, 0, 0,136, 58,221, 4, 0, 0, 0, 0, + 72, 64,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136, 58,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +248, 59,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, + 0, 0, 0, 0, 0,192,126, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0,128,126, 68, 0, 0,200, 65, 0,128,126, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, + 4, 0, 12, 0, 10, 0,251, 3, 26, 0,251, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 69, 1, 0, 0, 63, 5, 0, 0,141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +251, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 59,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +104, 61,221, 4, 0, 0, 0, 0,136, 58,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 69, 1, 0, 0, 69, 1, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 67, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 39,168, 5, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,216, 39,168, 5, - 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 74,141,193, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, 0, 0, 0, 0, - 0, 0, 0, 0,225,215,163,188, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63, -143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, 53,177,205,190, -142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0,164, 96, 68, 65, -111,121,173,192,248,209,213, 64, 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63, -166,235,149, 62, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, - 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,217,236,191, 62, 54,117, 85, 63,224,246, 70,188, 0,160, 32,182,252, 5,136,190, - 43, 33, 3, 62,235,135, 23, 63, 0, 0, 96, 53,215,104, 25,196,133,132,135, 67, 37, 9,167,195,136,252, 71,194, 3, 54, 25, 68, -158, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, 70,119,105, 63, -143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191,184,158, 81,191,117, 90,127, 63, -166,235,149, 62, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, 42, 61,228,190, 0, 0, 0, 0, - 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 61,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +216, 62,221, 4, 0, 0, 0, 0,248, 59,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, + 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 69, 1, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,167, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 62,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 72, 64,221, 4, 0, 0, 0, 0,104, 61,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 67, 0, 0,109,196, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 67, 0, 0,109,196, 0,128,145,195,163, 0, 0, 0,180, 0, 0, 0, 0, 0, 0, 0,144, 2, 0, 0, + 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0,144, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 1, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 4, 6, 0,180, 0,145, 2,163, 0,145, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 63, 5, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 64,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,216, 62,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190,214,211,111, 65, -214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,107,227, 29, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 30, 33, 12, 66, 86,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 96, 1, 0, 0,152, 43,168, 5, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, -205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 69, 1, 0, 0, 63, 5, 0, 0,167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +251, 3, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63, - 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72, 45,168, 5, - 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 88, 51,168, 5, 0, 0, 0, 0,184, 31,168, 5, 0, 0, 0, 0,152,243,167, 5, - 0, 0, 0, 0, 24,247,167, 5, 0, 0, 0, 0,136,247,167, 5, 0, 0, 0, 0,168,246,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 18, 18,240, 5,104, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 49,168, 5, 0, 0, 0, 0,136, 49,168, 5, 0, 0, 0, 0, 56, 46,168, 5, - 0, 0, 0, 0,168, 47,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 46,168, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0,168, 47,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,160, 67, 0, 0, 0, 0, - 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 5, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +184, 65,221, 4, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0,184, 65,221, 4, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, +190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0, 0,128, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, +190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, +149, 53,207, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,121,107, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,249,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, +190, 35, 30, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 40,139, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,111, 18, 3,187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168, 47,168, 5, 0, 0, 0, 0,216, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 46,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, - 0, 0, 51, 67, 0, 0, 0, 0, 0,224,187, 68, 0, 0, 0, 0, 0, 0,167, 67,223, 5, 0, 0,240, 5, 0, 0, 0, 0, 0, 0, - 77, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, 0, 0, 0, 0, - 77, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, - 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,240, 5, 78, 1,223, 5, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 5, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 24, 49,168, 5, 0, 0, 0, 0,194, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 88,220,132, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 88,220,132, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 1, 0, 0,136, 49,168, 5, 0, 0, 0, 0,195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 49,168, 5, 0, 0, 0, 0, 24, 49,168, 5, 0, 0, 0, 0, - 62, 62, 62, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,207, 3,116, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 53,207, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, +221, 57, 80, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 65, 0, 0, 5, 0,251,251, 0, 0, 92, 62, 55, 63, + 56,186,224,190,237,203,148,190, 3,236,234,190, 1, 0, 0, 0, 0, 0,128, 63, 0, 0,180, 66, 0, 0,180, 66, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,120, 69,221, 4, 0, 0, 0, 0, +176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 7, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,122, 68, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112,121,116,104,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 4, 0, 0, 8, 4, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88, 51,168, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, -184, 57,168, 5, 0, 0, 0, 0, 72, 45,168, 5, 0, 0, 0, 0,104,248,167, 5, 0, 0, 0, 0, 56,246,167, 5, 0, 0, 0, 0, -200,245,167, 5, 0, 0, 0, 0,216,248,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, -237, 2, 0, 0,167, 3, 0, 0, 3, 3,142, 1,187, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 40, 55,168, 5, 0, 0, 0, 0, 40, 55,168, 5, 0, 0, 0, 0, 72, 52,168, 5, 0, 0, 0, 0,184, 53,168, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 40, 71,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,152, 57,221, 4, 0, 0, 0, 0, 88, 2,221, 4, 0, 0, 0, 0,120, 1,221, 4, 0, 0, 0, 0, +104, 5,221, 4, 0, 0, 0, 0,248, 4,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0, +141, 1, 0, 0,233, 3, 0, 0, 3, 3, 68, 1, 93, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +248, 74,221, 4, 0, 0, 0, 0,248, 74,221, 4, 0, 0, 0, 0, 24, 72,221, 4, 0, 0, 0, 0,136, 73,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0, 72, 52,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,184, 53,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,199, 67, + 68, 65, 84, 65, 40, 1, 0, 0, 24, 72,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,136, 73,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,162, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,198, 67, 0, 0,200, 65, - 0,128,198, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,142, 1, - 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, -237, 2, 0, 0, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,161, 67, 0, 0,200, 65, + 0,128,161, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 68, 1, + 26, 0, 68, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0, +141, 1, 0, 0,166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,184, 53,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 52,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,190, 67, - 0, 0, 15,195, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0,142, 1, -161, 0,125, 1,143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, - 7, 3, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,161, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,136, 73,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 72,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,153, 67, + 0, 64, 12,196, 0, 0, 0, 0, 51, 1, 0, 0, 68, 1, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 1, 0, 0, 18, 0, 0, 0, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, 6, 0, 68, 1, + 67, 2, 51, 1, 49, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 1, 0, 0, +167, 1, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 1, 67, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 24, 1, 0, 0, 40, 55,168, 5, 0, 0, 0, 0,184, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 24, 1, 0, 0,248, 74,221, 4, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 52,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,241,190, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,200,241,190, 4, 0, 0, 0, 0, +238, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0, 88, 76,221, 4, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0, + 88, 76,221, 4, 0, 0, 0, 0,237, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, + 19, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, + 21, 0, 1, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,118,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,136,127,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,181,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,232,140,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,248,162,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 56,134,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,113,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,152,112,222, 4, 0, 0, 0, 0, + 21, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, 24, 78,221, 4, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0,104,254,220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 77,111,116,105,111,110, 32, 84,114, 97, 99,107,105,110,103, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +104, 79,221, 4, 0, 0, 0, 0, 24, 85,221, 4, 0, 0, 0, 0,136, 85,221, 4, 0, 0, 0, 0,248, 92,221, 4, 0, 0, 0, 0, +104, 93,221, 4, 0, 0, 0, 0,168,133,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 79,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,216, 79,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216, 79,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 72, 80,221, 4, 0, 0, 0, 0,104, 79,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 72, 80,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184, 80,221, 4, 0, 0, 0, 0, +216, 79,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 98, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +184, 80,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40, 81,221, 4, 0, 0, 0, 0, 72, 80,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 40, 81,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,152, 81,221, 4, 0, 0, 0, 0,184, 80,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152, 81,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 8, 82,221, 4, 0, 0, 0, 0, 40, 81,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 64, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 8, 82,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 82,221, 4, 0, 0, 0, 0, +152, 81,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +120, 82,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232, 82,221, 4, 0, 0, 0, 0, 8, 82,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88, 5, 64, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232, 82,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0, 88, 83,221, 4, 0, 0, 0, 0,120, 82,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,108, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 83,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +200, 83,221, 4, 0, 0, 0, 0,232, 82,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,108, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,200, 83,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 84,221, 4, 0, 0, 0, 0, + 88, 83,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 56, 84,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168, 84,221, 4, 0, 0, 0, 0,200, 83,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 62, 6,120, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168, 84,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0, 24, 85,221, 4, 0, 0, 0, 0, 56, 84,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +208, 2,120, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 85,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,168, 84,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2, 64, 4, 1, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,136, 85,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248, 85,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,216, 79,221, 4, 0, 0, 0, 0, 72, 80,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,248, 85,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104, 86,221, 4, 0, 0, 0, 0, +136, 85,221, 4, 0, 0, 0, 0,216, 79,221, 4, 0, 0, 0, 0, 40, 81,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,104, 86,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 86,221, 4, 0, 0, 0, 0, +248, 85,221, 4, 0, 0, 0, 0, 72, 80,221, 4, 0, 0, 0, 0,152, 81,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,216, 86,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72, 87,221, 4, 0, 0, 0, 0, +104, 86,221, 4, 0, 0, 0, 0, 40, 81,221, 4, 0, 0, 0, 0,152, 81,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 72, 87,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184, 87,221, 4, 0, 0, 0, 0, +216, 86,221, 4, 0, 0, 0, 0,104, 79,221, 4, 0, 0, 0, 0,184, 80,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,184, 87,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40, 88,221, 4, 0, 0, 0, 0, + 72, 87,221, 4, 0, 0, 0, 0,104, 79,221, 4, 0, 0, 0, 0,232, 82,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 40, 88,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152, 88,221, 4, 0, 0, 0, 0, +184, 87,221, 4, 0, 0, 0, 0,184, 80,221, 4, 0, 0, 0, 0, 88, 83,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,152, 88,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8, 89,221, 4, 0, 0, 0, 0, + 40, 88,221, 4, 0, 0, 0, 0,232, 82,221, 4, 0, 0, 0, 0, 88, 83,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 8, 89,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120, 89,221, 4, 0, 0, 0, 0, +152, 88,221, 4, 0, 0, 0, 0,232, 82,221, 4, 0, 0, 0, 0,200, 83,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,120, 89,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 89,221, 4, 0, 0, 0, 0, + 8, 89,221, 4, 0, 0, 0, 0, 40, 81,221, 4, 0, 0, 0, 0,200, 83,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,232, 89,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 90,221, 4, 0, 0, 0, 0, +120, 89,221, 4, 0, 0, 0, 0,152, 81,221, 4, 0, 0, 0, 0, 56, 84,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 88, 90,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 90,221, 4, 0, 0, 0, 0, +232, 89,221, 4, 0, 0, 0, 0, 88, 83,221, 4, 0, 0, 0, 0, 56, 84,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,200, 90,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56, 91,221, 4, 0, 0, 0, 0, + 88, 90,221, 4, 0, 0, 0, 0,200, 83,221, 4, 0, 0, 0, 0, 56, 84,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 56, 91,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,168, 91,221, 4, 0, 0, 0, 0, +200, 90,221, 4, 0, 0, 0, 0,200, 83,221, 4, 0, 0, 0, 0,168, 84,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,168, 91,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 92,221, 4, 0, 0, 0, 0, + 56, 91,221, 4, 0, 0, 0, 0, 56, 84,221, 4, 0, 0, 0, 0,168, 84,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 24, 92,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136, 92,221, 4, 0, 0, 0, 0, +168, 91,221, 4, 0, 0, 0, 0, 40, 81,221, 4, 0, 0, 0, 0, 24, 85,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,136, 92,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248, 92,221, 4, 0, 0, 0, 0, + 24, 92,221, 4, 0, 0, 0, 0,152, 81,221, 4, 0, 0, 0, 0, 24, 85,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,248, 92,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +136, 92,221, 4, 0, 0, 0, 0,168, 84,221, 4, 0, 0, 0, 0, 24, 85,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0,104, 93,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 56, 97,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 40, 81,221, 4, 0, 0, 0, 0,216, 79,221, 4, 0, 0, 0, 0, 72, 80,221, 4, 0, 0, 0, 0, +152, 81,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 65, 4, 0, 0, 98, 4, 0, 0, + 7, 7, 63, 6, 34, 0, 1, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,149,221, 4, 0, 0, 0, 0, +104,149,221, 4, 0, 0, 0, 0, 88, 94,221, 4, 0, 0, 0, 0,200, 95,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 88, 94,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,200, 95,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,163, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,216, 52,137, 5, 0, 0, 0, 0, -238, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0,136, 56,168, 5, 0, 0, 0, 0, 68, 65, 84, 65,224, 0, 0, 0, -136, 56,168, 5, 0, 0, 0, 0,237, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, - 19, 0, 0, 0, 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, - 21, 0, 1, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 72,210,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,184,219,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,184, 17,169, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0,248,232,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,255,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 88,226,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,205,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 1, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216,204,168, 5, 0, 0, 0, 0, - 21, 0, 0, 0, 1, 0, 1, 0,120,184,168, 5, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,184, 57,168, 5, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 51,168, 5, 0, 0, 0, 0, 24,247,167, 5, 0, 0, 0, 0, - 88,245,167, 5, 0, 0, 0, 0, 72,249,167, 5, 0, 0, 0, 0,248,247,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,247, 2, 0, 0,105, 1, 0, 0,167, 3, 0, 0, 9, 9,248, 2, 63, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,136, 61,168, 5, 0, 0, 0, 0,136, 61,168, 5, 0, 0, 0, 0,168, 58,168, 5, 0, 0, 0, 0, - 24, 60,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168, 58,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, - 24, 60,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 0, 62, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,192, 61, 68, 0, 0,200, 65, 0,192, 61, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 0, 10, 0,248, 2, 26, 0,248, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,247, 2, 0, 0,105, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -248, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 65, 4, 0, 0, 90, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +200, 95,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 94,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0, 0, 0,200, 65, 0, 0, 0, 0, 0,192,197, 68, 0, 0,128, 64, 0, 0, 64, 65, + 46, 6, 0, 0, 63, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 45, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0, 63, 6, 8, 0, 46, 6, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 91, 4, 0, 0, 98, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24, 60,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,168, 58,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, 0,192, 22, 68, -248,150, 23, 68, 8, 41,100, 68, 46,224, 62, 67,233, 15,206, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, 36, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, - 0, 0, 0, 4, 10, 0,248, 2, 37, 2,248, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,247, 2, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -248, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, + 56, 97,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40,102,221, 4, 0, 0, 0, 0,104, 93,221, 4, 0, 0, 0, 0, +104, 79,221, 4, 0, 0, 0, 0,232, 82,221, 4, 0, 0, 0, 0, 88, 83,221, 4, 0, 0, 0, 0,184, 80,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0,107, 0, 0, 0, 15, 15, 63, 6,108, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,101,221, 4, 0, 0, 0, 0, 8,101,221, 4, 0, 0, 0, 0, + 40, 98,221, 4, 0, 0, 0, 0,152, 99,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40, 98,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,152, 99,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,199, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152, 99,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 98,221, 4, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, + 0, 0, 0, 0, 0, 0, 72, 66, 88,218,103,194, 40,147,141, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, + 18, 0, 0, 0, 81, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, + 72, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 4, 8, 0, 63, 6, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, 26, 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 8,101,221, 4, 0, 0, 0, 0, +185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, + 40,102,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,232,117,221, 4, 0, 0, 0, 0, 56, 97,221, 4, 0, 0, 0, 0, +232, 82,221, 4, 0, 0, 0, 0,200, 83,221, 4, 0, 0, 0, 0, 56, 84,221, 4, 0, 0, 0, 0, 88, 83,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0,109, 0, 0, 0,119, 3, 0, 0, 20, 20, 63, 6, 11, 3, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,116,221, 4, 0, 0, 0, 0,104,116,221, 4, 0, 0, 0, 0, + 24,103,221, 4, 0, 0, 0, 0,248,114,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,103,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,136,104,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 19, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,199, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,192,199, 68, 0, 0,200, 65, 0,192,199, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0, 63, 6, 26, 0, 63, 6, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 6, 0, 0,109, 0, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 63, 6, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,104,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,248,105,221, 4, 0, 0, 0, 0, 24,103,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, + 0, 64, 30,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 30,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 0, 0, 0, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 0, 0, 0, 0,120, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,121, 2,143, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,255, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 0,121, 2, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,105,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 8,109,221, 4, 0, 0, 0, 0,136,104,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, + 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0,135, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 0,120, 0, 0, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +104,107,221, 4, 0, 0, 0, 0,104,107,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,107,221, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 8,109,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 24,112,221, 4, 0, 0, 0, 0, +248,105,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 64, 60,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 64, 60,196, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,240, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,240, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, +241, 2,143, 0,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 5, 0, 0, 62, 6, 0, 0, +135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,241, 2, 0, 0, 4, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,110,221, 4, 0, 0, 0, 0,120,110,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0,120,110,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95, +103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95, +103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80, +101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,255,143, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 2, 0, 0,136, 61,168, 5, 0, 0, 0, 0,187, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0,205,204,204, 61,231, 1, 0, 0,243, 1, 0, 0,122, 1, 0, 0,124, 1, 0, 0,231, 1, 0, 0,243, 1, 0, 0, - 4, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,112,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,136,113,221, 4, 0, 0, 0, 0, 8,109,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 64,110,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0,192,105,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, + 18, 0, 0, 0,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 0, 6, 0,160, 0,185, 3,160, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,160, 0, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,113,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,248,114,221, 4, 0, 0, 0, 0, 24,112,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, + 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, 0,124,146, 72,255,255,127,127, 0, 0, 0, 0, 0, 0, 0, 0, +105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,160, 0, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,114,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,113,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 4, 0, 0, + 0, 0, 0, 0,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, + 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,255, 4,241, 2,255, 4,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,158, 5, 0, 0,135, 0, 0, 0,119, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255, 4,241, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,104,116,221, 4, 0, 0, 0, 0, +198, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0,232,117,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,168,133,221, 4, 0, 0, 0, 0, + 40,102,221, 4, 0, 0, 0, 0,168, 84,221, 4, 0, 0, 0, 0, 24, 85,221, 4, 0, 0, 0, 0,152, 81,221, 4, 0, 0, 0, 0, + 56, 84,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 62, 6, 0, 0,121, 3, 0, 0, 63, 4, 0, 0, + 20, 20,110, 3,199, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,132,221, 4, 0, 0, 0, 0, + 40,132,221, 4, 0, 0, 0, 0,216,118,221, 4, 0, 0, 0, 0,184,130,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +216,118,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 72,120,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,212, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128, 91, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,109, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64, 91, 68, 0, 0,200, 65, 0, 64, 91, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0,110, 3, 26, 0,110, 3, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 62, 6, 0, 0,121, 3, 0, 0,146, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 72,120,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,184,121,221, 4, 0, 0, 0, 0,216,118,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,178, 67, 0, 0, 84,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 84,194, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 53, 0,143, 0, 53, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +184,121,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,200,124,221, 4, 0, 0, 0, 0, 72,120,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0,240,194, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 40,123,221, 4, 0, 0, 0, 0, 40,123,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, + 40,123,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101, +114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101, +114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101,101,110, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,124,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, +216,127,221, 4, 0, 0, 0, 0,184,121,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 45,195, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,172, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,172, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, + 18, 0, 0, 0, 6, 0,160, 0,173, 0,143, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +209, 2, 0, 0,209, 2, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,126,221, 4, 0, 0, 0, 0, + 56,126,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 56,126,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 78, 0, 0, 8, 1, 0, 0, 8, 65,168, 5, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 40,136,168, 5, 0, 0, 0, 0, - 72,242,167, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 85, 86, 32, 69,100,105, -116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 66,168, 5, 0, 0, 0, 0,104, 69,168, 5, 0, 0, 0, 0, -216, 69,168, 5, 0, 0, 0, 0, 56, 74,168, 5, 0, 0, 0, 0,168, 74,168, 5, 0, 0, 0, 0,200,118,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 88, 66,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,200, 66,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -200, 66,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56, 67,168, 5, 0, 0, 0, 0, 88, 66,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56, 67,168, 5, 0, 0, 0, 0, -212, 0, 0, 0, 1, 0, 0, 0,168, 67,168, 5, 0, 0, 0, 0,200, 66,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168, 67,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, - 24, 68,168, 5, 0, 0, 0, 0, 56, 67,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 24, 68,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,136, 68,168, 5, 0, 0, 0, 0, -168, 67,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -136, 68,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248, 68,168, 5, 0, 0, 0, 0, 24, 68,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248, 68,168, 5, 0, 0, 0, 0, -212, 0, 0, 0, 1, 0, 0, 0,104, 69,168, 5, 0, 0, 0, 0,136, 68,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 3,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104, 69,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,248, 68,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 3, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,216, 69,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72, 70,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,200, 66,168, 5, 0, 0, 0, 0, 56, 67,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 72, 70,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184, 70,168, 5, 0, 0, 0, 0, -216, 69,168, 5, 0, 0, 0, 0,200, 66,168, 5, 0, 0, 0, 0, 24, 68,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,184, 70,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40, 71,168, 5, 0, 0, 0, 0, - 72, 70,168, 5, 0, 0, 0, 0, 56, 67,168, 5, 0, 0, 0, 0,136, 68,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 40, 71,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 71,168, 5, 0, 0, 0, 0, -184, 70,168, 5, 0, 0, 0, 0, 24, 68,168, 5, 0, 0, 0, 0,136, 68,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,152, 71,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8, 72,168, 5, 0, 0, 0, 0, - 40, 71,168, 5, 0, 0, 0, 0, 24, 68,168, 5, 0, 0, 0, 0,248, 68,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 8, 72,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120, 72,168, 5, 0, 0, 0, 0, -152, 71,168, 5, 0, 0, 0, 0, 88, 66,168, 5, 0, 0, 0, 0,104, 69,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,120, 72,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232, 72,168, 5, 0, 0, 0, 0, - 8, 72,168, 5, 0, 0, 0, 0, 88, 66,168, 5, 0, 0, 0, 0, 24, 68,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,232, 72,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88, 73,168, 5, 0, 0, 0, 0, -120, 72,168, 5, 0, 0, 0, 0,248, 68,168, 5, 0, 0, 0, 0,104, 69,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 88, 73,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200, 73,168, 5, 0, 0, 0, 0, -232, 72,168, 5, 0, 0, 0, 0,136, 68,168, 5, 0, 0, 0, 0,248, 68,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,200, 73,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56, 74,168, 5, 0, 0, 0, 0, - 88, 73,168, 5, 0, 0, 0, 0,168, 67,168, 5, 0, 0, 0, 0,104, 69,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 56, 74,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -200, 73,168, 5, 0, 0, 0, 0,168, 67,168, 5, 0, 0, 0, 0,136, 68,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,168, 74,168, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,120, 78,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 24, 68,168, 5, 0, 0, 0, 0,200, 66,168, 5, 0, 0, 0, 0, 56, 67,168, 5, 0, 0, 0, 0, -136, 68,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 5, 4, 0, 0, - 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,135,168, 5, 0, 0, 0, 0, -152,135,168, 5, 0, 0, 0, 0,152, 75,168, 5, 0, 0, 0, 0, 8, 77,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -152, 75,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 8, 77,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +216,127,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 72,129,221, 4, 0, 0, 0, 0,200,124,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0, 0, 27,195, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 8, 4, 0, 0, 2, 0, 3, 3, 0, 0, 2, 4, 6, 0,160, 0,173, 0,160, 0,155, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209, 2, 0, 0,112, 3, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,173, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 72,129,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,184,130,221, 4, 0, 0, 0, 0,216,127,221, 4, 0, 0, 0, 0, + 0, 0, 32,193, 0,128, 91, 68,171,170,132,194, 0, 0, 0, 0, 0, 0, 32,193, 0,128, 91, 68, 0, 0, 27,195, 0, 0, 0, 0, +189, 2, 0, 0,206, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0,188, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,188, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,146, 72,255,255,127,127, + 10,215, 35, 60, 0, 0, 72, 66, 74, 0, 0, 0, 0, 0, 0, 2, 16, 0, 2, 4, 4, 0,206, 2,173, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113, 3, 0, 0, 62, 6, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,206, 2,173, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +184,130,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,129,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, 0, 0,128,255, 0, 0,128,127, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 46, 2, 0, 0, 0, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 10, 0, 46, 2,173, 0, 46, 2,173, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, + 40,132,221, 4, 0, 0, 0, 0,198, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 2, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,168,133,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,232,117,221, 4, 0, 0, 0, 0,200, 83,221, 4, 0, 0, 0, 0, 40, 81,221, 4, 0, 0, 0, 0, + 24, 85,221, 4, 0, 0, 0, 0,168, 84,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0, +121, 3, 0, 0, 63, 4, 0, 0, 20, 20,208, 2,199, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +232,147,221, 4, 0, 0, 0, 0,232,147,221, 4, 0, 0, 0, 0,152,134,221, 4, 0, 0, 0, 0,120,146,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,152,134,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 8,136,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 52, 68, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 51, 68, 0, 0,200, 65, + 0,192, 51, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 0, 0, 10, 0,208, 2, + 26, 0,208, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0, +121, 3, 0, 0,146, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2, 26, 0, 0, 0, 1, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 8,136,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,120,137,221, 4, 0, 0, 0, 0, +152,134,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0, 84,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 0, 84,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, + 53, 0,143, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,120,137,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,136,140,221, 4, 0, 0, 0, 0, + 8,136,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, 0, 0,240,194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, + 0, 0,240,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, +120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,138,221, 4, 0, 0, 0, 0,232,138,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0,232,138,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95, +108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95, +108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78,101,119, 32, 83, 99,114,101, +101,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255,143, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,140,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0,152,143,221, 4, 0, 0, 0, 0,120,137,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,178, 67, + 0, 0, 45,195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 45,195, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, + 0, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, + 0, 0, 0, 0,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0,173, 0,143, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +248,141,221, 4, 0, 0, 0, 0,248,141,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,141,221, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 76, 73, 80, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,255,143, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,152,143,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 8,145,221, 4, 0, 0, 0, 0, +136,140,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 64,110,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, + 0,192,105,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,159, 0, 0, 0, 18, 0, 0, 0,184, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 8, 0, 0, 0, 2, 0, 3, 3, 0, 0, 2, 0, 6, 0,160, 0, +185, 3,160, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0, 8,145,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,120,146,221, 4, 0, 0, 0, 0, +152,143,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,122, 67, + 0, 0, 32,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 18, 0, 0, 0,207, 2, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,207, 2, 0, 0, 18, 0, 0, 0,172, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 0, + 0,124,146, 72,255,255,127,127, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,208, 2, +173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,207, 2, 0, 0, +147, 3, 0, 0, 63, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 2,173, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 1, 0, 0,120,146,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8,145,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, 0, 0,128,127, + 0, 0,128,255, 0, 0,128,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 1, 0, 0, 0, 0, 0, 0,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 10, 0,144, 1, +173, 0,144, 1,173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 56, 1, 0, 0,232,147,221, 4, 0, 0, 0, 0,198, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,200, 0, 0, 0, 0, 1, 0, + 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,248,149,221, 4, 0, 0, 0, 0, +212, 0, 0, 0, 1, 0, 0, 0,184,228,221, 4, 0, 0, 0, 0, 24, 78,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 83, 99,114,105,112,116,105,110,103, 0,103, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72,151,221, 4, 0, 0, 0, 0,248,156,221, 4, 0, 0, 0, 0,104,157,221, 4, 0, 0, 0, 0,152,166,221, 4, 0, 0, 0, 0, + 8,167,221, 4, 0, 0, 0, 0,104,221,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,151,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,184,151,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,184,151,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 40,152,221, 4, 0, 0, 0, 0, 72,151,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0, 40,152,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,152,221, 4, 0, 0, 0, 0, +184,151,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, +152,152,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,153,221, 4, 0, 0, 0, 0, 40,152,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,153,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,120,153,221, 4, 0, 0, 0, 0,152,152,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120,153,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +232,153,221, 4, 0, 0, 0, 0, 8,153,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,168, 3, 0, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,232,153,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,154,221, 4, 0, 0, 0, 0, +120,153,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,168, 3, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 88,154,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,154,221, 4, 0, 0, 0, 0,232,153,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,154,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0, 56,155,221, 4, 0, 0, 0, 0, 88,154,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56,155,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, +168,155,221, 4, 0, 0, 0, 0,200,154,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 5,104, 1, 1, 0, 0, 0, + 68, 65, 84, 65, 32, 0, 0, 0,168,155,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,156,221, 4, 0, 0, 0, 0, + 56,155,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2,104, 1, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, + 24,156,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,156,221, 4, 0, 0, 0, 0,168,155,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 5,236, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136,156,221, 4, 0, 0, 0, 0, +213, 0, 0, 0, 1, 0, 0, 0,248,156,221, 4, 0, 0, 0, 0, 24,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +126, 7,236, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248,156,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,136,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 2,168, 3, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,104,157,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,157,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,184,151,221, 4, 0, 0, 0, 0, 40,152,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,216,157,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,158,221, 4, 0, 0, 0, 0, +104,157,221, 4, 0, 0, 0, 0,184,151,221, 4, 0, 0, 0, 0, 8,153,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 72,158,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184,158,221, 4, 0, 0, 0, 0, +216,157,221, 4, 0, 0, 0, 0, 40,152,221, 4, 0, 0, 0, 0,120,153,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,184,158,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40,159,221, 4, 0, 0, 0, 0, + 72,158,221, 4, 0, 0, 0, 0, 8,153,221, 4, 0, 0, 0, 0,120,153,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 40,159,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,159,221, 4, 0, 0, 0, 0, +184,158,221, 4, 0, 0, 0, 0,120,153,221, 4, 0, 0, 0, 0,232,153,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,152,159,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8,160,221, 4, 0, 0, 0, 0, + 40,159,221, 4, 0, 0, 0, 0,152,152,221, 4, 0, 0, 0, 0, 88,154,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 8,160,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,160,221, 4, 0, 0, 0, 0, +152,159,221, 4, 0, 0, 0, 0, 72,151,221, 4, 0, 0, 0, 0,200,154,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,120,160,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232,160,221, 4, 0, 0, 0, 0, + 8,160,221, 4, 0, 0, 0, 0, 8,153,221, 4, 0, 0, 0, 0,200,154,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,232,160,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88,161,221, 4, 0, 0, 0, 0, +120,160,221, 4, 0, 0, 0, 0,232,153,221, 4, 0, 0, 0, 0, 56,155,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 88,161,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200,161,221, 4, 0, 0, 0, 0, +232,160,221, 4, 0, 0, 0, 0, 88,154,221, 4, 0, 0, 0, 0, 56,155,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,200,161,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56,162,221, 4, 0, 0, 0, 0, + 88,161,221, 4, 0, 0, 0, 0,200,154,221, 4, 0, 0, 0, 0,168,155,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 56,162,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,168,162,221, 4, 0, 0, 0, 0, +200,161,221, 4, 0, 0, 0, 0, 56,155,221, 4, 0, 0, 0, 0,168,155,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,168,162,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24,163,221, 4, 0, 0, 0, 0, + 56,162,221, 4, 0, 0, 0, 0, 88,154,221, 4, 0, 0, 0, 0, 24,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 24,163,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136,163,221, 4, 0, 0, 0, 0, +168,162,221, 4, 0, 0, 0, 0,232,153,221, 4, 0, 0, 0, 0, 24,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,136,163,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248,163,221, 4, 0, 0, 0, 0, + 24,163,221, 4, 0, 0, 0, 0,120,153,221, 4, 0, 0, 0, 0,136,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,248,163,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104,164,221, 4, 0, 0, 0, 0, +136,163,221, 4, 0, 0, 0, 0,152,152,221, 4, 0, 0, 0, 0,136,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,104,164,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,164,221, 4, 0, 0, 0, 0, +248,163,221, 4, 0, 0, 0, 0, 24,156,221, 4, 0, 0, 0, 0,136,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,216,164,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,165,221, 4, 0, 0, 0, 0, +104,164,221, 4, 0, 0, 0, 0, 8,153,221, 4, 0, 0, 0, 0,248,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 72,165,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184,165,221, 4, 0, 0, 0, 0, +216,164,221, 4, 0, 0, 0, 0,232,153,221, 4, 0, 0, 0, 0,248,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,184,165,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40,166,221, 4, 0, 0, 0, 0, + 72,165,221, 4, 0, 0, 0, 0,168,155,221, 4, 0, 0, 0, 0,248,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0, 40,166,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,166,221, 4, 0, 0, 0, 0, +184,165,221, 4, 0, 0, 0, 0,200,154,221, 4, 0, 0, 0, 0, 56,155,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 40, 0, 0, 0,152,166,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40,166,221, 4, 0, 0, 0, 0, 72,151,221, 4, 0, 0, 0, 0, 88,154,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0, 8,167,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,216,170,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8,153,221, 4, 0, 0, 0, 0,184,151,221, 4, 0, 0, 0, 0, 40,152,221, 4, 0, 0, 0, 0, +120,153,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0, 5, 4, 0, 0, + 7, 7,127, 7, 93, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,228,221, 4, 0, 0, 0, 0, + 40,228,221, 4, 0, 0, 0, 0,248,167,221, 4, 0, 0, 0, 0,104,169,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +248,167,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,104,169,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, 4, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,236, 3, 0, 0, 5, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 8, 77,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 75,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0, -112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 5, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, +104,169,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,167,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0,192,239, 68, 0, 0, 0, 0, 0, 0, 28, 66, 0, 0, 0, 0, 0,192,237, 68, 0, 0, 0, 0, 0, 0,134, 66, +110, 7, 0, 0,127, 7, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,109, 7, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,127, 7, 67, 0,110, 7, 67, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,169, 3, 0, 0,235, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -120, 78,168, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,200,118,168, 5, 0, 0, 0, 0,168, 74,168, 5, 0, 0, 0, 0, - 88, 66,168, 5, 0, 0, 0, 0, 24, 68,168, 5, 0, 0, 0, 0,248, 68,168, 5, 0, 0, 0, 0,104, 69,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 6, 6,200, 3,234, 3, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 85,168, 5, 0, 0, 0, 0, 88, 85,168, 5, 0, 0, 0, 0, -104, 79,168, 5, 0, 0, 0, 0,232, 83,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 79,168, 5, 0, 0, 0, 0, -216, 0, 0, 0, 1, 0, 0, 0,216, 80,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,114, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192,113, 68, 0, 0,200, 65, 0,192,113, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,200, 3, 26, 0,200, 3, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,200, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 80,168, 5, 0, 0, 0, 0, -216, 0, 0, 0, 1, 0, 0, 0,232, 83,168, 5, 0, 0, 0, 0,104, 79,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 67, - 0,192,115,196, 0, 0, 0, 0, 0, 0, 0, 0,254,255, 74, 67,254,255,115,196, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, - 0, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, - 0, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, - 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,208, 3,203, 0,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,220, 0,208, 3, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 82,168, 5, 0, 0, 0, 0, 72, 82,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 72, 82,168, 5, 0, 0, 0, 0, -214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, +216,170,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,104,195,221, 4, 0, 0, 0, 0, 8,167,221, 4, 0, 0, 0, 0, + 88,154,221, 4, 0, 0, 0, 0, 24,156,221, 4, 0, 0, 0, 0,136,156,221, 4, 0, 0, 0, 0,152,152,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,235, 2, 0, 0, 4, 4,142, 1,236, 2, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,194,221, 4, 0, 0, 0, 0, 40,194,221, 4, 0, 0, 0, 0, +200,171,221, 4, 0, 0, 0, 0, 56,173,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,171,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 56,173,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,199, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,128,198, 67, 0, 0,200, 65, 0,128,198, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0,210, 2, 0, 0,235, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,255,202, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,173,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,171,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,198, 67, + 0, 0, 61,196, 0, 0, 0, 0, 0, 0, 0, 0,254,127,190, 67,254,127, 52,196, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, + 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0,126, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, + 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, + 10, 1, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,142, 1,210, 2,125, 1,210, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,209, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,142, 1,210, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +168,174,221, 4, 0, 0, 0, 0,136,192,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,174,221, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 72,176,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 85, 84, 84, 79, 78, 83, 95, 80, 84, 95, 99,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 1, 0, 0,232, 83,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -216, 80,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 51, 51, 43,191,154,153,213, 63, - 51, 51,131,191,154,153, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236, 2, 0, 0, 0, 0, 0, 0,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67,111,110,116,101,120,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0,199, 3, 0, 0, - 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236, 2,208, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,255,124, 1, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 33, 0, 0, 88, 85,168, 5, 0, 0, 0, 0,185, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62,100, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0, 72,176,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,177,221, 4, 0, 0, 0, 0, +168,174,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,114,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,255,124, 1, 61, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,177,221, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0,136,179,221, 4, 0, 0, 0, 0, 72,176,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,108, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 76, 97,121,101,114,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,255,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0,136,179,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 40,181,221, 4, 0, 0, 0, 0, +232,177,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,100,105,109,101,110,115,105,111,110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,105,109,101,110,115,105,111, +110,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,254,124, 1,203, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 40,181,221, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0,200,182,221, 4, 0, 0, 0, 0,136,179,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95, 97,110,116,105, 97,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 65,110,116,105, 45, 65,108,105, 97,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,254,124, 1, 58, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0,200,182,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,184,221, 4, 0, 0, 0, 0, + 40,181,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,109,111,116,105,111,110, 95, 98,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 97,109,112,108,101,100, 32, + 77,111,116,105,111,110, 32, 66,108,117,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,254,124, 1, 0, 0, + 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,104,184,221, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 8,186,221, 4, 0, 0, 0, 0,200,182,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,115,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 83,104, 97,100,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,254,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0, 8,186,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,168,187,221, 4, 0, 0, 0, 0, +104,184,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,112,101,114,102,111,114,109, 97,110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,101,114,102,111,114,109, 97, +110, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,242,253,124, 1, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,187,221, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0, 72,189,221, 4, 0, 0, 0, 0, 8,186,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110, +103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,112,111,115,116, 95,112,114,111, 99,101,115,115,105,110, +103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80,111,115,116, 32, 80,114,111, 99,101,115,115,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,218,253,124, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0, 72,189,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,232,190,221, 4, 0, 0, 0, 0, +168,187,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95,115,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,116, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,194,253,124, 1, 0, 0, + 20, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,232,190,221, 4, 0, 0, 0, 0, +215, 0, 0, 0, 1, 0, 0, 0,136,192,221, 4, 0, 0, 0, 0, 72,189,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, 84, 95,111,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 79,117,116,112,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253,124, 1,130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 88, 1, 0, 0,136,192,221, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +232,190,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 69, 78, 68, 69, 82, 95, 80, + 84, 95, 98, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 97,107,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253,124, 1, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,248, 0, 0, 0, 40,194,221, 4, 0, 0, 0, 0, +180, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255, 21, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65,160, 0, 0, 0,104,195,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,248,208,221, 4, 0, 0, 0, 0, +216,170,221, 4, 0, 0, 0, 0,168,155,221, 4, 0, 0, 0, 0,248,156,221, 4, 0, 0, 0, 0,232,153,221, 4, 0, 0, 0, 0, + 56,155,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0,167, 3, 0, 0, + 1, 1,247, 2, 63, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,207,221, 4, 0, 0, 0, 0, + 72,207,221, 4, 0, 0, 0, 0, 88,196,221, 4, 0, 0, 0, 0, 24,202,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 88,196,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,200,197,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,192, 61, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,246, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128, 61, 68, 0, 0,200, 65, 0,128, 61, 68, 0, 0,200, 65, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,247, 2, 26, 0,247, 2, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,105, 1, 0, 0,130, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +200,197,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 56,199,221, 4, 0, 0, 0, 0, 88,196,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15, 67, 0, 64, 70,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67,255,127, 70,196, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0, 43, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,160, 0, 44, 3,143, 0, 26, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,249, 2, 0, 0,131, 1, 0, 0,167, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 37, 2, 0, 0, 5, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 56,199,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,168,200,221, 4, 0, 0, 0, 0,200,197,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 67, 0, 0,206,194, 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 0, 0,206,194, 0, 0, 0, 0, +143, 0, 0, 0,160, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,142, 0, 0, 0, 18, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,102, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0,131, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6, 0, 34, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, +168,200,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 24,202,221, 4, 0, 0, 0, 0, 56,199,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 67, 0,128,142,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0, 0, 26,196, 0, 0, 0, 0, +163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0,121, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0,122, 2,163, 0,104, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0,239, 5, 0, 0,131, 1, 0, 0,167, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, + 24,202,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,200,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249, 2, 0, 0,239, 5, 0, 0,131, 1, 0, 0,167, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,203,221, 4, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, +136,203,221, 4, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 74,141,193, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1,128,191, 0, 0,128,191, + 0, 0, 0, 0, 0, 0, 0, 0,225,215,163,188, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, + 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,176, 84, 89,188, 0, 0, 0, 0, + 53,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, +164, 96, 68, 65,111,121,173,192,248,209,213, 64, 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191,184,158, 81,191, +117, 90,127, 63,166,235,149, 62, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, 42, 61,228,190, + 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65,217,236,191, 62, 54,117, 85, 63,224,246, 70,188, 0,160, 32,182, +252, 5,136,190, 43, 33, 3, 62,235,135, 23, 63, 0, 0, 96, 53,215,104, 25,196,133,132,135, 67, 37, 9,167,195,136,252, 71,194, + 3, 54, 25, 68,158, 87,135,195,205,209,166, 67,151,254, 71, 66, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, + 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,214,211,111,193, 0, 0,128, 63,178,157,229, 62, 30,132, 27,191,222,160, 81,191,184,158, 81,191, +117, 90,127, 63,166,235,149, 62, 9, 46,185, 62, 35, 44,185, 62,145,180,109,188,212, 60,173, 63,129, 63,228,190, 42, 61,228,190, + 0, 0, 0, 0, 0, 0, 0, 0, 96,132,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5234,10 +5005,57 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 86, 45, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, +214,211,111, 65,214,211,111, 65, 0, 0, 0, 0, 0, 0, 0, 0,107,227, 29, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 30, 33, 12, 66, 86,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 96, 1, 0, 0, 72,207,221, 4, 0, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, + 0, 0,128, 63, 10,215, 35, 60, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, +248,208,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 8,215,221, 4, 0, 0, 0, 0,104,195,221, 4, 0, 0, 0, 0, + 72,151,221, 4, 0, 0, 0, 0,200,154,221, 4, 0, 0, 0, 0, 56,155,221, 4, 0, 0, 0, 0, 88,154,221, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0,103, 1, 0, 0, 18, 18,240, 5,104, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,213,221, 4, 0, 0, 0, 0, 56,213,221, 4, 0, 0, 0, 0, +232,209,221, 4, 0, 0, 0, 0, 88,211,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,209,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 88,211,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,160, 67, + 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,190, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0,224,189, 68, 0, 0,200, 65, 0,224,189, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,240, 5, 26, 0,240, 5, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,211,221, 4, 0, 0, 0, 0, +217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,209,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, + 0, 0, 0, 0, 0, 0, 51, 67, 0, 0, 0, 0, 0,224,187, 68, 0, 0, 0, 0, 0, 0,167, 67,223, 5, 0, 0,240, 5, 0, 0, + 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 5, 0, 0, + 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 2, 2, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,240, 5, 78, 1,223, 5, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,239, 5, 0, 0, 26, 0, 0, 0,103, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 5, 78, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,200,212,221, 4, 0, 0, 0, 0, +195, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 24,205,185, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 24,205,185, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,136, 1, 0, 0, 56,213,221, 4, 0, 0, 0, 0,196, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,212,221, 4, 0, 0, 0, 0,200,212,221, 4, + 0, 0, 0, 0, 62, 62, 62, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5245,22 +5063,83 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,112,121,116,104,111,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 4, 0, 0, 8, 4, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8,215,221, 4, 0, 0, 0, 0,216, 0, 0, 0, + 1, 0, 0, 0,104,221,221, 4, 0, 0, 0, 0,248,208,221, 4, 0, 0, 0, 0, 24,156,221, 4, 0, 0, 0, 0,232,153,221, 4, + 0, 0, 0, 0,120,153,221, 4, 0, 0, 0, 0,136,156,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0, +126, 7, 0, 0,237, 2, 0, 0,167, 3, 0, 0, 3, 3,142, 1,187, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,216,218,221, 4, 0, 0, 0, 0,216,218,221, 4, 0, 0, 0, 0,248,215,221, 4, 0, 0, 0, 0,104,217,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,215,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,104,217,221, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0,199, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,141, 1, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,128,198, 67, + 0, 0,200, 65, 0,128,198, 67, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, + 10, 0,142, 1, 26, 0,142, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0, +126, 7, 0, 0,237, 2, 0, 0, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1, 26, 0, + 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104,217,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,248,215,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,141, 67, 0, 0,244,194, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,190, 67, 0, 0, 15,195, 0, 0, 0, 0,125, 1, 0, 0,142, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, +124, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,124, 1, 0, 0, 18, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 18, 6, 0, 0, 2, 0, 3, 3, 0, 0, 12, 4, + 6, 0,142, 1,161, 0,125, 1,143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 5, 0, 0, +126, 7, 0, 0, 7, 3, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,142, 1,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 24, 1, 0, 0,216,218,221, 4, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,251,190, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65, 16, 0, 0, 0,200,251,190, 4, + 0, 0, 0, 0,238, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 0, 14, 0, 0, 0, 56,220,221, 4, 0, 0, 0, 0, 68, 65, 84, 65, +224, 0, 0, 0, 56,220,221, 4, 0, 0, 0, 0,237, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 40, 92,222, 4, + 0, 0, 0, 0, 19, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, 20, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, + 0, 0, 0, 0, 21, 0, 1, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 8,118,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,136,127,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,181,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,232,140,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,248,162,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 56,134,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,168,113,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,152,112,222, 4, + 0, 0, 0, 0, 21, 0, 0, 0, 1, 0, 1, 0, 40, 92,222, 4, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,104,221,221, 4, + 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,215,221, 4, 0, 0, 0, 0,200,154,221, 4, + 0, 0, 0, 0, 8,153,221, 4, 0, 0, 0, 0,248,156,221, 4, 0, 0, 0, 0,168,155,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0,105, 1, 0, 0,167, 3, 0, 0, 9, 9,248, 2, 63, 2, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,225,221, 4, 0, 0, 0, 0, 56,225,221, 4, 0, 0, 0, 0, 88,222,221, 4, + 0, 0, 0, 0,200,223,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,222,221, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0,200,223,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230, 67, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 62, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,192, 61, 68, 0, 0,200, 65, 0,192, 61, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,248, 2, 26, 0,248, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0,105, 1, 0, 0,130, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,248, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,223,221, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,222,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,189, 68, 0, 0, 0, 0, + 0,192, 22, 68,248,150, 23, 68, 8, 41,100, 68, 46,224, 62, 67,233, 15,206, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0, 0, 0, 0, 0, + 36, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,215, 35, 60, 0, 0,122, 68, 0, 0, 0, 0, + 1, 0, 3, 0, 0, 0, 0, 4, 10, 0,248, 2, 37, 2,248, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,247, 2, 0, 0,131, 1, 0, 0,167, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,248, 2, 37, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 2, 0, 0, 56,225,221, 4, 0, 0, 0, 0,190, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,231, 1, 0, 0,243, 1, 0, 0,122, 1, 0, 0,124, 1, 0, 0,231, 1, 0, 0, +243, 1, 0, 0, 4, 0, 0, 0,124, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5277,27 +5156,130 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0,184,228,221, 4, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,216, 43,222, 4, + 0, 0, 0, 0,248,149,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 85, 86, + 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,230,221, 4, 0, 0, 0, 0, 24,233,221, 4, + 0, 0, 0, 0,136,233,221, 4, 0, 0, 0, 0,232,237,221, 4, 0, 0, 0, 0, 88,238,221, 4, 0, 0, 0, 0,120, 26,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8,230,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,230,221, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,120,230,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,230,221, 4, 0, 0, 0, 0, 8,230,221, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,230,221, 4, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,231,221, 4, 0, 0, 0, 0,120,230,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,126, 7, 5, 4, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,231,221, 4, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0,200,231,221, 4, 0, 0, 0, 0,232,230,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200,231,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,232,221, 4, + 0, 0, 0, 0, 88,231,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 56,232,221, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,232,221, 4, 0, 0, 0, 0,200,231,221, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,232,221, 4, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,233,221, 4, 0, 0, 0, 0, 56,232,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200, 3,234, 3, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,233,221, 4, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,232,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 3, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,136,233,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248,233,221, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,230,221, 4, 0, 0, 0, 0,232,230,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,248,233,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104,234,221, 4, + 0, 0, 0, 0,136,233,221, 4, 0, 0, 0, 0,120,230,221, 4, 0, 0, 0, 0,200,231,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,234,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216,234,221, 4, + 0, 0, 0, 0,248,233,221, 4, 0, 0, 0, 0,232,230,221, 4, 0, 0, 0, 0, 56,232,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,234,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72,235,221, 4, + 0, 0, 0, 0,104,234,221, 4, 0, 0, 0, 0,200,231,221, 4, 0, 0, 0, 0, 56,232,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 72,235,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184,235,221, 4, + 0, 0, 0, 0,216,234,221, 4, 0, 0, 0, 0,200,231,221, 4, 0, 0, 0, 0,168,232,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,184,235,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40,236,221, 4, + 0, 0, 0, 0, 72,235,221, 4, 0, 0, 0, 0, 8,230,221, 4, 0, 0, 0, 0, 24,233,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,236,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152,236,221, 4, + 0, 0, 0, 0,184,235,221, 4, 0, 0, 0, 0, 8,230,221, 4, 0, 0, 0, 0,200,231,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,236,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8,237,221, 4, + 0, 0, 0, 0, 40,236,221, 4, 0, 0, 0, 0,168,232,221, 4, 0, 0, 0, 0, 24,233,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,237,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120,237,221, 4, + 0, 0, 0, 0,152,236,221, 4, 0, 0, 0, 0, 56,232,221, 4, 0, 0, 0, 0,168,232,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,120,237,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232,237,221, 4, + 0, 0, 0, 0, 8,237,221, 4, 0, 0, 0, 0, 88,231,221, 4, 0, 0, 0, 0, 24,233,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,232,237,221, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,120,237,221, 4, 0, 0, 0, 0, 88,231,221, 4, 0, 0, 0, 0, 56,232,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,238,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40,242,221, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,231,221, 4, 0, 0, 0, 0,120,230,221, 4, 0, 0, 0, 0,232,230,221, 4, + 0, 0, 0, 0, 56,232,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, + 5, 4, 0, 0, 7, 7,127, 7, 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 43,222, 4, + 0, 0, 0, 0, 72, 43,222, 4, 0, 0, 0, 0, 72,239,221, 4, 0, 0, 0, 0,184,240,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0, 72,239,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,184,240,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,224,239, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,239, 68, 0, 0,200, 65, 0,192,239, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,127, 7, 26, 0,127, 7, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,235, 3, 0, 0, + 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 7, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,184,240,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,239,221, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, + 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 0, + 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0, 40,242,221, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,120, 26,222, 4, 0, 0, 0, 0, 88,238,221, 4, + 0, 0, 0, 0, 8,230,221, 4, 0, 0, 0, 0,200,231,221, 4, 0, 0, 0, 0,168,232,221, 4, 0, 0, 0, 0, 24,233,221, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 6, 6,200, 3, +234, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,249,221, 4, 0, 0, 0, 0, 8,249,221, 4, + 0, 0, 0, 0, 24,243,221, 4, 0, 0, 0, 0,152,247,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,243,221, 4, + 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,136,244,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,215, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0,114, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +199, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192,113, 68, 0, 0,200, 65, 0,192,113, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,200, 3, 26, 0,200, 3, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,199, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,244,221, 4, + 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,152,247,221, 4, 0, 0, 0, 0, 24,243,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91, 67, 0,192,115,196, 0, 0, 0, 0, 0, 0, 0, 0,254,255, 74, 67,254,255,115,196, 0, 0, 0, 0,203, 0, 0, 0, +220, 0, 0, 0, 0, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +202, 0, 0, 0, 0, 0, 0, 0,207, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,208, 3,203, 0,208, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,219, 0, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,208, 3, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,248,245,221, 4, 0, 0, 0, 0,248,245,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,248,245,221, 4, + 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 77, 65, 71, 69, 95, 80, 84, 95,103,112,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71,114,101, 97,115,101, 32, 80,101,110, 99,105,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,255,202, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,247,221, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,136,244,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 67, 51, 51, 43,191, +154,153,213, 63, 51, 51,131,191,154,153, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236, 2, 0, 0, 0, 0, 0, 0,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0, 0, +199, 3, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236, 2,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 40, 33, 0, 0, 8,249,221, 4, 0, 0, 0, 0,189, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 65, 0, 0, 0, 0,154,153,153, 62, 0, 0, 0, 0,100, 0, 0, 0,154,153,153, 62, +100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5424,102 +5406,42 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,160, 0, 0, 0,200,118,168, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120, 78,168, 5, 0, 0, 0, 0,104, 69,168, 5, 0, 0, 0, 0,248, 68,168, 5, 0, 0, 0, 0,136, 68,168, 5, 0, 0, 0, 0, -168, 67,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, - 1, 1,182, 3,234, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,133,168, 5, 0, 0, 0, 0, -232,133,168, 5, 0, 0, 0, 0,184,119,168, 5, 0, 0, 0, 0,184,128,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -184,119,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 40,121,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,109, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,181, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64,109, 68, 0, 0,200, 65, 0, 64,109, 68, 0, 0,200, 65, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,182, 3, 26, 0,182, 3, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 40,121,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 56,124,168, 5, 0, 0, 0, 0,184,119,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 32, 67, 0, 0, 86,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 86,196, 0, 0, 0, 0, -143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, 88, 3,143, 0, 88, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,104, 4, 0, 0,146, 0, 0, 0,233, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 88, 3, 0, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,152,122,168, 5, 0, 0, 0, 0,152,122,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, -152,122,168, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, -111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111,111,108,115, 95, -111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,143, 0,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,124,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, - 72,127,168, 5, 0, 0, 0, 0, 40,121,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0,242,194, 0, 0, 0, 0, - 0, 0, 0, 0,231,102, 16, 67, 91, 90,242,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, - 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, 3, 0, 0,104, 4, 0, 0, 26, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -160, 0,120, 0, 0, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,125,168, 5, 0, 0, 0, 0, -168,125,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0,168,125,168, 5, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,216,255,144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, - 72,127,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,184,128,168, 5, 0, 0, 0, 0, 56,124,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 67, 0,128,126,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,255,191,126,196, 0, 0, 0, 0, -163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, 13, 4,163, 0,251, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,126, 7, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, -184,128,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,127,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 4, 0, 0,126, 7, 0, 0, 26, 0, 0, 0,233, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 3,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,130,168, 5, 0, 0, 0, 0, 68, 65, 84, 65,112, 3, 0, 0, - 40,130,168, 5, 0, 0, 0, 0,174, 0, 0, 0, 1, 0, 0, 0, 72,246,172, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, 0, 0,128,191, - 0, 0, 0, 0, 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, - 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 95,192, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,160, 84, 89,188, 0, 0, 0, 0, - 52,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, 0, 0, 0, 0, -188,173, 54, 64,136, 95,161,191,147,231,198, 63, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, 48,180, 81,191,184,158, 81,191, -189,188,157, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63,138, 84,228,190, 42, 61,228,190, - 0, 0, 0, 0, 0, 0, 0, 0,100, 98, 82, 64, 0, 25, 95, 64,121, 92,155, 62,151,198, 44, 63,192,214, 32,188, 0, 0, 40,180, -195, 15,188,190,132, 75, 53, 62,216,125, 81, 63, 0, 0,192,179,115, 77,100,193, 17,173,201, 64,181,148,248,192,203,247,159,192, -233, 74, 87, 65,247, 46,190,192, 88,106,234, 64, 45, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, 0, 0, 0, 0, - 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 95,192, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, 48,180, 81,191,184,158, 81,191, -189,188,157, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63,138, 84,228,190, 42, 61,228,190, - 0, 0, 0, 0, 0, 0, 0, 0,100, 98, 82, 64, 0, 25, 95, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5527,338 +5449,78 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, 3,236,234,190, - 0, 25, 95, 64, 0, 25, 95, 64, 0, 0, 0, 0, 0, 0, 0, 0,114,145,245, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 30, 33, 12, 66, 85,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 96, 1, 0, 0,232,133,168, 5, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 51, 51, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, 0, 0, 12, 66, - 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, 8, 1, 0, 0, - 40,136,168, 5, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 65,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 86,105,100,101,111, 32, 69,100,105,116,105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,120,137,168, 5, 0, 0, 0, 0, 72,142,168, 5, 0, 0, 0, 0,184,142,168, 5, 0, 0, 0, 0, - 40,150,168, 5, 0, 0, 0, 0,152,150,168, 5, 0, 0, 0, 0,248,175,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -120,137,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,232,137,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,232,137,168, 5, 0, 0, 0, 0, -212, 0, 0, 0, 1, 0, 0, 0, 88,138,168, 5, 0, 0, 0, 0,120,137,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88,138,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, -200,138,168, 5, 0, 0, 0, 0,232,137,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,222, 2, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,200,138,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 56,139,168, 5, 0, 0, 0, 0, - 88,138,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, - 56,139,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,168,139,168, 5, 0, 0, 0, 0,200,138,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,168,139,168, 5, 0, 0, 0, 0, -212, 0, 0, 0, 1, 0, 0, 0, 24,140,168, 5, 0, 0, 0, 0, 56,139,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -240, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24,140,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, -136,140,168, 5, 0, 0, 0, 0,168,139,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 92, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0,136,140,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,248,140,168, 5, 0, 0, 0, 0, - 24,140,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, -248,140,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0,104,141,168, 5, 0, 0, 0, 0,136,140,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 2,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,104,141,168, 5, 0, 0, 0, 0, -212, 0, 0, 0, 1, 0, 0, 0,216,141,168, 5, 0, 0, 0, 0,248,140,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,216,141,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, - 72,142,168, 5, 0, 0, 0, 0,104,141,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 92, 1, 0, 0, 0, 0, - 68, 65, 84, 65, 32, 0, 0, 0, 72,142,168, 5, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -216,141,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 68, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -184,142,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,143,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -232,137,168, 5, 0, 0, 0, 0, 88,138,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 40,143,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152,143,168, 5, 0, 0, 0, 0,184,142,168, 5, 0, 0, 0, 0, -232,137,168, 5, 0, 0, 0, 0, 56,139,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -152,143,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8,144,168, 5, 0, 0, 0, 0, 40,143,168, 5, 0, 0, 0, 0, - 88,138,168, 5, 0, 0, 0, 0,168,139,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 8,144,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,120,144,168, 5, 0, 0, 0, 0,152,143,168, 5, 0, 0, 0, 0, - 56,139,168, 5, 0, 0, 0, 0,168,139,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -120,144,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232,144,168, 5, 0, 0, 0, 0, 8,144,168, 5, 0, 0, 0, 0, -168,139,168, 5, 0, 0, 0, 0, 24,140,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -232,144,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88,145,168, 5, 0, 0, 0, 0,120,144,168, 5, 0, 0, 0, 0, -120,137,168, 5, 0, 0, 0, 0,136,140,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 88,145,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200,145,168, 5, 0, 0, 0, 0,232,144,168, 5, 0, 0, 0, 0, - 56,139,168, 5, 0, 0, 0, 0,248,140,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -200,145,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 56,146,168, 5, 0, 0, 0, 0, 88,145,168, 5, 0, 0, 0, 0, -136,140,168, 5, 0, 0, 0, 0,104,141,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 56,146,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168,146,168, 5, 0, 0, 0, 0,200,145,168, 5, 0, 0, 0, 0, -104,141,168, 5, 0, 0, 0, 0,216,141,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -168,146,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24,147,168, 5, 0, 0, 0, 0, 56,146,168, 5, 0, 0, 0, 0, -248,140,168, 5, 0, 0, 0, 0,216,141,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 24,147,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136,147,168, 5, 0, 0, 0, 0,168,146,168, 5, 0, 0, 0, 0, - 24,140,168, 5, 0, 0, 0, 0, 72,142,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -136,147,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,248,147,168, 5, 0, 0, 0, 0, 24,147,168, 5, 0, 0, 0, 0, -200,138,168, 5, 0, 0, 0, 0, 72,142,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -248,147,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,104,148,168, 5, 0, 0, 0, 0,136,147,168, 5, 0, 0, 0, 0, -136,140,168, 5, 0, 0, 0, 0, 72,142,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -104,148,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,216,148,168, 5, 0, 0, 0, 0,248,147,168, 5, 0, 0, 0, 0, -120,137,168, 5, 0, 0, 0, 0,200,138,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -216,148,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 72,149,168, 5, 0, 0, 0, 0,104,148,168, 5, 0, 0, 0, 0, -168,139,168, 5, 0, 0, 0, 0,248,140,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 72,149,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,184,149,168, 5, 0, 0, 0, 0,216,148,168, 5, 0, 0, 0, 0, - 24,140,168, 5, 0, 0, 0, 0,216,141,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -184,149,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 40,150,168, 5, 0, 0, 0, 0, 72,149,168, 5, 0, 0, 0, 0, - 56,139,168, 5, 0, 0, 0, 0,104,141,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, - 40,150,168, 5, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,149,168, 5, 0, 0, 0, 0, - 24,140,168, 5, 0, 0, 0, 0,104,141,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -152,150,168, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0,104,154,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 56,139,168, 5, 0, 0, 0, 0,232,137,168, 5, 0, 0, 0, 0, 88,138,168, 5, 0, 0, 0, 0,168,139,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4, 27, 0, 1, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,183,168, 5, 0, 0, 0, 0,232,183,168, 5, 0, 0, 0, 0, -136,151,168, 5, 0, 0, 0, 0,248,152,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,151,168, 5, 0, 0, 0, 0, -216, 0, 0, 0, 1, 0, 0, 0,248,152,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,148, 68, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248,152,168, 5, 0, 0, 0, 0, -216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,151,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,109, 69, - 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0,129, 7, 0, 0, - 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, - 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0,222, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,104,154,168, 5, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 88,159,168, 5, 0, 0, 0, 0,152,150,168, 5, 0, 0, 0, 0,120,137,168, 5, 0, 0, 0, 0, -136,140,168, 5, 0, 0, 0, 0, 72,142,168, 5, 0, 0, 0, 0,200,138,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 15, 15,241, 4, 68, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56,158,168, 5, 0, 0, 0, 0, 56,158,168, 5, 0, 0, 0, 0, 88,155,168, 5, 0, 0, 0, 0, -200,156,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,155,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, -200,156,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,140, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,156,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 88,155,168, 5, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, 0, 0, 72, 66, -112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 18, 0, 0, 0, 41, 0, 0, 0, - 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, 0, 0, 0, 2, - 4, 0, 0, 4, 8, 0,241, 4, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4, 0, 0, 26, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 4, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0, 56,158,168, 5, 0, 0, 0, 0,191, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 88,159,168, 5, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0, 72,167,168, 5, 0, 0, 0, 0,104,154,168, 5, 0, 0, 0, 0,136,140,168, 5, 0, 0, 0, 0, -104,141,168, 5, 0, 0, 0, 0, 24,140,168, 5, 0, 0, 0, 0, 72,142,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4, 0, 0, 69, 0, 0, 0, 91, 1, 0, 0, 8, 8,241, 4, 23, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8,166,168, 5, 0, 0, 0, 0, 8,166,168, 5, 0, 0, 0, 0, 72,160,168, 5, 0, 0, 0, 0, -152,164,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72,160,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, -184,161,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 26, 68, 0, 0, 0, 0, 0, 0,208, 65, - 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,240, 4, 0, 0, 69, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,184,161,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, - 40,163,168, 5, 0, 0, 0, 0, 72,160,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,125,195, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 75, 67, 1, 0,125,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0,252, 0, 0, 0, - 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0,252, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, - 18, 0, 0, 4, 6, 0,220, 0,253, 0,203, 0,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 21, 4, 0, 0,240, 4, 0, 0, 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -220, 0,253, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 40,163,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, -152,164,168, 5, 0, 0, 0, 0,184,161,168, 5, 0, 0, 0, 0, 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68, - 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 4, 0, 0, 91, 1, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 7, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152,164,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 40,163,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, - 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,252, 0, 0, 0, - 18, 0, 0, 0, 20, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 20, 4, 0, 0, 18, 0, 0, 0,252, 0, 0, 0, - 0, 0, 32, 65, 0, 0, 0, 63, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 8, 0, 21, 4,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 4, 0, 0, 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 21, 4,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 8,166,168, 5, 0, 0, 0, 0,181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 72,167,168, 5, 0, 0, 0, 0, -215, 0, 0, 0, 1, 0, 0, 0,248,175,168, 5, 0, 0, 0, 0, 88,159,168, 5, 0, 0, 0, 0,104,141,168, 5, 0, 0, 0, 0, - 56,139,168, 5, 0, 0, 0, 0,248,140,168, 5, 0, 0, 0, 0,216,141,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 2, 0, 0, 93, 1, 0, 0,194, 2, 0, 0, 2, 2, 48, 2,102, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,248,173,168, 5, 0, 0, 0, 0,248,173,168, 5, 0, 0, 0, 0, 56,168,168, 5, 0, 0, 0, 0, -136,172,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,168,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, -168,169,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 68, 0, 0, 0, 0, 0, 0,208, 65, -154,216, 65, 55, 0, 0, 12, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0,192, 11, 68, 0, 0,200, 65, 0,192, 11, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, - 4, 0, 12, 0, 10, 0, 48, 2, 26, 0, 48, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 2, 0, 0, 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168,169,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, - 24,171,168, 5, 0, 0, 0, 0, 56,168,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,157,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, - 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, 2, 0, 3, 3, - 0, 0, 0, 4, 6, 0,217, 0, 76, 1,200, 0, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,216, 0, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -217, 0, 76, 1, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 24,171,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, -136,172,168, 5, 0, 0, 0, 0,168,169,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 2, 0, 0, 47, 2, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,136,172,168, 5, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 24,171,168, 5, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, 0, 0,160, 64, - 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, - 18, 0, 0, 0, 86, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 86, 1, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, -111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 87, 1, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -217, 0, 0, 0, 47, 2, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 1, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,248,173,168, 5, 0, 0, 0, 0,179, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56,175,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0, 56,175,168, 5, 0, 0, 0, 0, - 38, 1, 0, 0, 1, 0, 0, 0,120,184,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, -248,175,168, 5, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,167,168, 5, 0, 0, 0, 0, -216,141,168, 5, 0, 0, 0, 0,248,140,168, 5, 0, 0, 0, 0,168,139,168, 5, 0, 0, 0, 0, 24,140,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,194, 2, 0, 0, 8, 8,192, 2,102, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,182,168, 5, 0, 0, 0, 0,168,182,168, 5, 0, 0, 0, 0, -232,176,168, 5, 0, 0, 0, 0, 56,181,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232,176,168, 5, 0, 0, 0, 0, -216, 0, 0, 0, 1, 0, 0, 0, 88,178,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,245, 67, - 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 48, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 2, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 47, 68, 0, 0,200, 65, 0,192, 47, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 2, 26, 0,192, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88,178,168, 5, 0, 0, 0, 0, -216, 0, 0, 0, 1, 0, 0, 0,200,179,168, 5, 0, 0, 0, 0,232,176,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200,179,168, 5, 0, 0, 0, 0, -216, 0, 0, 0, 1, 0, 0, 0, 56,181,168, 5, 0, 0, 0, 0, 88,178,168, 5, 0, 0, 0, 0, 0, 0,240,195, 0, 0,240, 67, - 0, 0,135,195, 0, 0,135, 67,238, 33,143,196,238, 33,143, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,191, 2, 0, 0, - 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 4, 0, 0,192, 2, 76, 1,192, 2, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,192, 2, 76, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56,181,168, 5, 0, 0, 0, 0, -216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,179,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, - 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, - 18, 0, 0, 0, 75, 1, 0, 0, 18, 0, 0, 0,201, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0,201, 2, 0, 0, - 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 32, 65, 0, 0, 0, 63, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0,202, 2, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,168,182,168, 5, 0, 0, 0, 0, -181, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 64, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 0, 0,216, 11, 0, 0, -120,184,168, 5, 0, 0, 0, 0,172, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 83, 99,101,110,101, 0,116, 97,103,101, 0, 97,105,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -152,196,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 72,210,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,104,197,168, 5, 0, 0, 0, 0, 72,198,168, 5, 0, 0, 0, 0,104,197,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,198,168, 5, 0, 0, 0, 0, - 56,143,132, 5, 0, 0, 0, 0, 17, 2, 24, 0, 90, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 0, 0, 0, 68,172, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, -250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 6, 0, 50, 0,141, 0,128, 7, 56, 4, 8, 0, 8, 0, 24, 0, 17, 0, 0, 0, 90, 0, 1, 0, 81, 0, 0, 0, - 23, 0, 33, 0, 2, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 8, 0, 24, 0, 10, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,200,202,168, 5, 0, 0, 0, 0,200,202,168, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 5, 0, 2, 0, 1, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,116,109,112, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5876,26 +5538,102 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,120, 26,222, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40,242,221, 4, 0, 0, 0, 0, 24,233,221, 4, 0, 0, 0, 0,168,232,221, 4, 0, 0, 0, 0, 56,232,221, 4, + 0, 0, 0, 0, 88,231,221, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, +233, 3, 0, 0, 1, 1,182, 3,234, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 41,222, 4, + 0, 0, 0, 0,152, 41,222, 4, 0, 0, 0, 0,104, 27,222, 4, 0, 0, 0, 0,104, 36,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,104, 27,222, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,216, 28,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,113, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0,128,109, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,181, 3, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 64,109, 68, 0, 0,200, 65, 0, 64,109, 68, + 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,182, 3, 26, 0,182, 3, + 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,126, 7, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,182, 3, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,216, 28,222, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,232, 31,222, 4, 0, 0, 0, 0,104, 27,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 67, 0, 0, 86,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 67, 0, 0, 86,196, + 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 87, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0, 88, 3,143, 0, + 88, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,201, 3, 0, 0,104, 4, 0, 0,146, 0, 0, 0, +233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 88, 3, 0, 0, 5, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 30,222, 4, 0, 0, 0, 0, 72, 30,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 88, 1, 0, 0, 72, 30,222, 4, 0, 0, 0, 0,215, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, +111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,116,111, +111,108,115, 95,111, 98,106,101, 99,116,109,111,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 98,106,101, 99,116, 32, 84,111,111,108,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,233,253,143, 0,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 31,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0,248, 34,222, 4, 0, 0, 0, 0,216, 28,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 67, 0, 0,242,194, + 0, 0, 0, 0, 0, 0, 0, 0,231,102, 16, 67, 91, 90,242,194, 0, 0, 0, 0,143, 0, 0, 0,160, 0, 0, 0, 0, 0, 0, 0, +119, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, 0, +119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, + 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,160, 0,120, 0,143, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,201, 3, 0, 0,104, 4, 0, 0, 26, 0, 0, 0,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,160, 0,120, 0, 0, 0, 6, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 33,222, 4, + 0, 0, 0, 0, 88, 33,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 88, 1, 0, 0, 88, 33,222, 4, 0, 0, 0, 0,215, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86, 73, 69, 87, 51, 68, 95, 80, 84, 95,108, 97,115,116, 95,111,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 79,112,101,114, 97,116,111,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,216,255,144, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,248, 34,222, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,104, 36,222, 4, 0, 0, 0, 0,232, 31,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67, 0,128,126,196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 67,255,191,126,196, + 0, 0, 0, 0,163, 0, 0, 0,180, 0, 0, 0, 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0,162, 0, 0, 0, 18, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 0, 0, 0, 1, 0, 7, 0, 18, 0, 0, 0, 6, 0,180, 0, 13, 4,163, 0, +251, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 7, 0, 0,126, 7, 0, 0, 26, 0, 0, 0, +233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 1, 0, 0,104, 36,222, 4, 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 34,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 5, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 4, 0, 0,126, 7, 0, 0, 26, 0, 0, 0, +233, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 3,208, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 37,222, 4, 0, 0, 0, 0, 68, 65, 84, 65, +112, 3, 0, 0,216, 37,222, 4, 0, 0, 0, 0,175, 0, 0, 0, 1, 0, 0, 0, 72,246,172, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 13,128,191, + 0, 0,128,191, 0, 0, 0, 0, 0, 0, 0, 0, 74,215, 76,190, 0, 0, 0, 0, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, + 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 95,192, 0, 0,128, 63, 69,239,209, 62, 70,119,105, 63,160, 84, 89,188, + 0, 0, 0, 0, 52,177,205,190,142, 74, 70, 62,166, 33,101, 63, 0, 0, 0, 0,185,158, 81, 63, 35, 44,185,190, 43, 61,228, 62, + 0, 0, 0, 0,188,173, 54, 64,136, 95,161,191,147,231,198, 63, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, 48,180, 81,191, +184,158, 81,191,189,188,157, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63,138, 84,228,190, + 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,100, 98, 82, 64, 0, 25, 95, 64,121, 92,155, 62,151,198, 44, 63,192,214, 32,188, + 0, 0, 40,180,195, 15,188,190,132, 75, 53, 62,216,125, 81, 63, 0, 0,192,179,115, 77,100,193, 17,173,201, 64,181,148,248,192, +203,247,159,192,233, 74, 87, 65,247, 46,190,192, 88,106,234, 64, 45, 8,160, 64, 68,239,209, 62, 51,177,205,190,184,158, 81, 63, + 0, 0, 0, 0, 70,119,105, 63,143, 74, 70, 62, 35, 44,185,190, 0, 0, 0, 0,162, 84, 89,188,166, 33,101, 63, 42, 61,228, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 95,192, 0, 0,128, 63,185,214, 13, 63,208,249,224,190, 48,180, 81,191, +184,158, 81,191,189,188,157, 63,140,225, 88, 62, 26, 63,185, 62, 35, 44,185, 62,241,213,146,188,206,156,122, 63,138, 84,228,190, + 42, 61,228,190, 0, 0, 0, 0, 0, 0, 0, 0,100, 98, 82, 64, 0, 25, 95, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5903,473 +5641,850 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,201,250, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 92, 62, 55, 63, 56,186,224,190,237,203,148,190, + 3,236,234,190, 0, 25, 95, 64, 0, 25, 95, 64, 0, 0, 0, 0, 0, 0, 0, 0,114,145,245, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 30, 33, 12, 66, 85,152,137, 66,116, 27,126, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 96, 1, 0, 0,152, 41,222, 4, 0, 0, 0, 0,176, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 32, 65,205,204, 76, 62, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 3, 0, 8, 8,128, 0, + 0, 0, 12, 66, 0, 0,128, 63,205,204,204, 61, 0, 0,250, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 10, 0, 7, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 78, 0, 0, + 8, 1, 0, 0,216, 43,222, 4, 0, 0, 0, 0,212, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,228,221, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 86,105,100,101,111, 32, 69,100,105,116, +105,110,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 45,222, 4, 0, 0, 0, 0,248, 49,222, 4, 0, 0, 0, 0,104, 50,222, 4, + 0, 0, 0, 0,216, 57,222, 4, 0, 0, 0, 0, 72, 58,222, 4, 0, 0, 0, 0,168, 83,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0, 40, 45,222, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,152, 45,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,152, 45,222, 4, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 8, 46,222, 4, 0, 0, 0, 0, 40, 45,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,222, 2, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 8, 46,222, 4, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0,120, 46,222, 4, 0, 0, 0, 0,152, 45,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4,222, 2, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,120, 46,222, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,232, 46,222, 4, + 0, 0, 0, 0, 8, 46,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,232, 46,222, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 88, 47,222, 4, 0, 0, 0, 0,120, 46,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 88, 47,222, 4, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,200, 47,222, 4, 0, 0, 0, 0,232, 46,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,240, 4,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,200, 47,222, 4, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0, 56, 48,222, 4, 0, 0, 0, 0, 88, 47,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 92, 1, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 56, 48,222, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,168, 48,222, 4, + 0, 0, 0, 0,200, 47,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 32, 0, 0, 0,168, 48,222, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 24, 49,222, 4, 0, 0, 0, 0, 56, 48,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2,195, 2, 1, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0, 24, 49,222, 4, + 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0,136, 49,222, 4, 0, 0, 0, 0,168, 48,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,136, 49,222, 4, 0, 0, 0, 0,213, 0, 0, 0, + 1, 0, 0, 0,248, 49,222, 4, 0, 0, 0, 0, 24, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 92, 1, + 0, 0, 0, 0, 68, 65, 84, 65, 32, 0, 0, 0,248, 49,222, 4, 0, 0, 0, 0,213, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,136, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 68, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,104, 50,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 50,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152, 45,222, 4, 0, 0, 0, 0, 8, 46,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,216, 50,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 72, 51,222, 4, 0, 0, 0, 0,104, 50,222, 4, + 0, 0, 0, 0,152, 45,222, 4, 0, 0, 0, 0,232, 46,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 72, 51,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,184, 51,222, 4, 0, 0, 0, 0,216, 50,222, 4, + 0, 0, 0, 0, 8, 46,222, 4, 0, 0, 0, 0, 88, 47,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,184, 51,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 40, 52,222, 4, 0, 0, 0, 0, 72, 51,222, 4, + 0, 0, 0, 0,232, 46,222, 4, 0, 0, 0, 0, 88, 47,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 40, 52,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,152, 52,222, 4, 0, 0, 0, 0,184, 51,222, 4, + 0, 0, 0, 0, 88, 47,222, 4, 0, 0, 0, 0,200, 47,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,152, 52,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 8, 53,222, 4, 0, 0, 0, 0, 40, 52,222, 4, + 0, 0, 0, 0, 40, 45,222, 4, 0, 0, 0, 0, 56, 48,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 8, 53,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,120, 53,222, 4, 0, 0, 0, 0,152, 52,222, 4, + 0, 0, 0, 0,232, 46,222, 4, 0, 0, 0, 0,168, 48,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,120, 53,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,232, 53,222, 4, 0, 0, 0, 0, 8, 53,222, 4, + 0, 0, 0, 0, 56, 48,222, 4, 0, 0, 0, 0, 24, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,232, 53,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 88, 54,222, 4, 0, 0, 0, 0,120, 53,222, 4, + 0, 0, 0, 0, 24, 49,222, 4, 0, 0, 0, 0,136, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 88, 54,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,200, 54,222, 4, 0, 0, 0, 0,232, 53,222, 4, + 0, 0, 0, 0,168, 48,222, 4, 0, 0, 0, 0,136, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,200, 54,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 56, 55,222, 4, 0, 0, 0, 0, 88, 54,222, 4, + 0, 0, 0, 0,200, 47,222, 4, 0, 0, 0, 0,248, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 56, 55,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,168, 55,222, 4, 0, 0, 0, 0,200, 54,222, 4, + 0, 0, 0, 0,120, 46,222, 4, 0, 0, 0, 0,248, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,168, 55,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 24, 56,222, 4, 0, 0, 0, 0, 56, 55,222, 4, + 0, 0, 0, 0, 56, 48,222, 4, 0, 0, 0, 0,248, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0, 24, 56,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,136, 56,222, 4, 0, 0, 0, 0,168, 55,222, 4, + 0, 0, 0, 0, 40, 45,222, 4, 0, 0, 0, 0,120, 46,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,136, 56,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,248, 56,222, 4, 0, 0, 0, 0, 24, 56,222, 4, + 0, 0, 0, 0, 88, 47,222, 4, 0, 0, 0, 0,168, 48,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,248, 56,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,104, 57,222, 4, 0, 0, 0, 0,136, 56,222, 4, + 0, 0, 0, 0,200, 47,222, 4, 0, 0, 0, 0,136, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,104, 57,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0,216, 57,222, 4, 0, 0, 0, 0,248, 56,222, 4, + 0, 0, 0, 0,232, 46,222, 4, 0, 0, 0, 0, 24, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,216, 57,222, 4, 0, 0, 0, 0,214, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 57,222, 4, + 0, 0, 0, 0,200, 47,222, 4, 0, 0, 0, 0, 24, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0, 72, 58,222, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 24, 62,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,232, 46,222, 4, 0, 0, 0, 0,152, 45,222, 4, 0, 0, 0, 0, 8, 46,222, 4, 0, 0, 0, 0, 88, 47,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,222, 2, 0, 0, 7, 7,241, 4, + 27, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 91,222, 4, 0, 0, 0, 0,152, 91,222, 4, + 0, 0, 0, 0, 56, 59,222, 4, 0, 0, 0, 0,168, 60,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 59,222, 4, + 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,168, 60,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128,148, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,196, 2, 0, 0,221, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,168, 60,222, 4, + 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 59,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0,240,109, 69, 0, 0,128,192, 0, 0, 0, 0, 0, 0, 0, 0,255,255,109, 69, 0, 0, 0,192, 0, 0, 0, 0,112, 7, 0, 0, +129, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,111, 7, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, +111, 7, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 2, 0, 0, 0, 1, 0, 3, 3, 2, 0, 0, 4, 10, 0,129, 7, 2, 0,112, 7, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222, 2, 0, 0,222, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 24, 62,222, 4, + 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 8, 67,222, 4, 0, 0, 0, 0, 72, 58,222, 4, 0, 0, 0, 0, 40, 45,222, 4, + 0, 0, 0, 0, 56, 48,222, 4, 0, 0, 0, 0,248, 49,222, 4, 0, 0, 0, 0,120, 46,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 15, 15,241, 4, 68, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 65,222, 4, 0, 0, 0, 0,232, 65,222, 4, 0, 0, 0, 0, 8, 63,222, 4, + 0, 0, 0, 0,120, 64,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 63,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0,120, 64,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,140, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 64,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 63,222, 4, 0, 0, 0, 0, 0, 0, 64,192, 0, 0,126, 67, 0, 0, 0, 0, + 0, 0, 72, 66,112,189, 17,192,246, 70,125, 67, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 18, 0, 0, 0, + 41, 0, 0, 0, 0, 0,128, 63, 0, 0, 72, 66, 0,124,146, 72, 0, 0, 72, 66,205,204,204, 61, 0, 0, 32, 65, 72, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 4, 8, 0,241, 4, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 26, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,241, 4, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,208, 0, 0, 0,232, 65,222, 4, 0, 0, 0, 0,185, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 1, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, 8, 67,222, 4, + 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,248, 74,222, 4, 0, 0, 0, 0, 24, 62,222, 4, 0, 0, 0, 0, 56, 48,222, 4, + 0, 0, 0, 0, 24, 49,222, 4, 0, 0, 0, 0,200, 47,222, 4, 0, 0, 0, 0,248, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 69, 0, 0, 0, 91, 1, 0, 0, 8, 8,241, 4, 23, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 73,222, 4, 0, 0, 0, 0,184, 73,222, 4, 0, 0, 0, 0,248, 67,222, 4, + 0, 0, 0, 0, 72, 72,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,248, 67,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0,104, 69,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 26, 68, 0, 0, 0, 0, + 0, 0,208, 65, 0, 0, 0, 0, 0, 32,158, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0,158, 68, 0, 0,200, 65, 0, 0,158, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,241, 4, 26, 0,241, 4, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0, 69, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,241, 4, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,104, 69,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0,216, 70,222, 4, 0, 0, 0, 0,248, 67,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 67, 0, 0,125,195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 67, 1, 0,125,195, 0, 0, 0, 0,203, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0, +252, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,202, 0, 0, 0, 0, 0, 0, 0, +252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 10, 3, 0, 0, + 1, 0, 7, 0, 18, 0, 0, 4, 6, 0,220, 0,253, 0,203, 0,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 21, 4, 0, 0,240, 4, 0, 0, 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,220, 0,253, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 16, 0, 0, 0,128, 63, 0, 0,128, 63,173, 2, 95, 0,154,153,217, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 76, 69, 78, 68, 69, 82, 95, 82, 69, 78, 68, 69, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68,172, 0, 0, 0, 0,128, 63,102,166,171, 67, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,216, 70,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0, 72, 72,222, 4, 0, 0, 0, 0,104, 69,222, 4, 0, 0, 0, 0, 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, + 0, 0, 7, 68, 0, 0,112,196, 0, 0,112, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48,194,132, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 38,140, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,200,104, 99, 4, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, 0, 80,195, 71, 0, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 0, 0, 91, 1, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 7, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 5, 0,205,204,204, 61,154,153,153, 62,205,204, 76, 62,219, 15, 73, 63,102,102,102, 63, 0, 0, 0, 64,154,153, 25, 63, - 0, 0, 64, 65,102,102,166, 63, 0, 0, 0, 65, 0, 0,160, 65, 6, 0, 0, 0, 0, 0,192, 64, 0, 0,128, 63, 0, 0, 0, 0, -205,204, 28, 65, 0, 0, 0, 0, 32, 0, 0, 0, 32, 0, 1, 0,128, 0, 5, 0,218, 0, 0, 0, 60, 0, 5, 0, 1, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -195,245, 28,193, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 38, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0,152,196,168, 5, 0, 0, 0, 0, 9, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 72, 72,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 70,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, + 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, +252, 0, 0, 0, 18, 0, 0, 0, 20, 4, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 20, 4, 0, 0, 18, 0, 0, 0, +252, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 63, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, 0, 0,200, 66,105, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, 8, 0, 21, 4,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 0, 0, 95, 0, 0, 0, 91, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 21, 4,253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,104,197,168, 5, 0, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0,216,197,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,224, 2,168, 1,184,219,168, 5, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0,216,197,168, 5, 0, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0, 72,198,168, 5, 0, 0, 0, 0, -104,197,168, 5, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0,183, 3,241, 2, 88,226,168, 5, 0, 0, 0, 0, - 68, 65, 84, 65, 40, 0, 0, 0, 72,198,168, 5, 0, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -216,197,168, 5, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,162, 0, 12, 2, 24,213,168, 5, 0, 0, 0, 0, - 68, 65, 84, 65,248, 1, 0, 0,184,198,168, 5, 0, 0, 0, 0,168, 0, 0, 0, 1, 0, 0, 0,248,200,168, 5, 0, 0, 0, 0, -136,201,168, 5, 0, 0, 0, 0, 24,202,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0, -205,204, 76, 63, 0, 0,180, 66, 9, 0, 1, 0, 0, 0,128, 63,111, 18,131, 58,205,204,204, 61, 0, 0, 1, 0, 32, 0, 32, 0, - 32, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, -232, 25,170, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 80, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, - 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, - 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, - 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, - 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,184, 73,222, 4, 0, 0, 0, 0,186, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 10,215, 35, 60,205,204,204, 61, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,205,204,204, 61,205,204,204, 61, -102,102,166, 63, 0, 0,192, 63, 0, 0,240, 65, 72,225,122, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 67, 2, 0, 3, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 35, 0, 0, 0,204,197,121, 63, 0, 0, 0, 63, 35, 0, 0, 0,204,197,121, 63, - 0, 0, 0, 63, 0, 0,128, 63, 49, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 0, 0, 0,248,200,168, 5, 0, 0, 0, 0, -165, 0, 0, 0, 1, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 0, 0, 0,136,201,168, 5, 0, 0, 0, 0,165, 0, 0, 0, 1, 0, 0, 0, -168,115,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,200,255,128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,104, 0, 0, 0, 24,202,168, 5, 0, 0, 0, 0,163, 0, 0, 0, 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,255,100,100,128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0,155, 9, 25, 67,190, 23,237, 64, 75, 1,147, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,128, 0, 0, 0,200,202,168, 5, 0, 0, 0, 0,150, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100,101,114, 76, 97,121,101,114, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0,255,127, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,200, 0, 0, 0, -216,204,168, 5, 0, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, - 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 63,205,204,204, 61, 0, 0,200, 66, - 0, 0, 12, 66,161, 14,234, 64, 0, 0, 0, 63, 0, 0, 0, 66, 0, 0,144, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 16, 2, 0, 0, -232,205,168, 5, 0, 0, 0, 0, 36, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, -247,255,239, 65, 0, 0,150, 66,154,153, 25, 62, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 72,208,168, 5, 0, 0, 0, 0, - 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64,205,204, 76, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 11, 3, 0, 1, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0,248, 74,222, 4, + 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0,168, 83,222, 4, 0, 0, 0, 0, 8, 67,222, 4, 0, 0, 0, 0, 24, 49,222, 4, + 0, 0, 0, 0,232, 46,222, 4, 0, 0, 0, 0,168, 48,222, 4, 0, 0, 0, 0,136, 49,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, 93, 1, 0, 0,194, 2, 0, 0, 2, 2, 48, 2,102, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 81,222, 4, 0, 0, 0, 0,168, 81,222, 4, 0, 0, 0, 0,232, 75,222, 4, + 0, 0, 0, 0, 56, 80,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 75,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0, 88, 77,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 68, 0, 0, 0, 0, + 0, 0,208, 65,154,216, 65, 55, 0, 0, 12, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0,192, 11, 68, 0, 0,200, 65, 0,192, 11, 68, 0, 0,200, 65, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 2, 0, 3, 3, 4, 0, 12, 0, 10, 0, 48, 2, 26, 0, 48, 2, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 2, 0, 0, 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 88, 77,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0,200, 78,222, 4, 0, 0, 0, 0,232, 75,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,112,193, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 67, 0, 0,157,195, 0, 0, 0, 0,200, 0, 0, 0,217, 0, 0, 0, 18, 0, 0, 0, + 75, 1, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0,199, 0, 0, 0, 18, 0, 0, 0, + 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 10, 6, 0, 0, + 2, 0, 3, 3, 0, 0, 0, 4, 6, 0,217, 0, 76, 1,200, 0, 58, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,216, 0, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,217, 0, 76, 1, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,209,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65, 64, 1, 0, 0, 72,208,168, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63, -242, 4, 53,191,243, 4, 53, 63, 24, 73,137, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,200, 78,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0, 56, 80,222, 4, 0, 0, 0, 0, 88, 77,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 47, 2, 0, 0, 47, 2, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, - 24, 73,137, 5, 0, 0, 0, 0,125, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,216,209,168, 5, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 0, 0, 24, 2, 0, 0, 72,210,168, 5, 0, 0, 0, 0,143, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 79, 87,111,114,108,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 56, 80,222, 4, 0, 0, 0, 0,217, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 78,222, 4, 0, 0, 0, 0, 0, 0, 16,193, 0, 0,130, 67, 0, 0,160,192, + 0, 0,160, 64, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 16,193, 0, 0, 32, 65, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, + 75, 1, 0, 0, 18, 0, 0, 0, 86, 1, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 86, 1, 0, 0, 18, 0, 0, 0, + 75, 1, 0, 0,111, 18,131, 58,111, 18,131, 58, 0,124,146, 72, 0, 80, 67, 71, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 87, 1, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,217, 0, 0, 0, 47, 2, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 1, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,114, 99, 80, 61,114, 99, 80, 61,114, 99, 80, 61,199, 54, 36, 60,199, 54, 36, 60,199, 54, 36, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 0, 0, 32, 0,128, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,160, 64, 0, 0,200, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,112, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, - 0, 0,128, 63,205,204, 76, 61, 0, 0, 5, 0, 0, 0, 0, 0, 10,215,163, 59, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0,168, 81,222, 4, 0, 0, 0, 0,182, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,168,212,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, -168,212,168, 5, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,112, 5, 0, 0, - 24,213,168, 5, 0, 0, 0, 0,130, 0, 0, 0, 1, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, - 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232, 82,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,112, 0, 0, 0,232, 82,222, 4, + 0, 0, 0, 0, 38, 1, 0, 0, 1, 0, 0, 0, 40, 92,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +160, 0, 0, 0,168, 83,222, 4, 0, 0, 0, 0,216, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 74,222, 4, + 0, 0, 0, 0,136, 49,222, 4, 0, 0, 0, 0,168, 48,222, 4, 0, 0, 0, 0, 88, 47,222, 4, 0, 0, 0, 0,200, 47,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,194, 2, 0, 0, 8, 8,192, 2, +102, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 90,222, 4, 0, 0, 0, 0, 88, 90,222, 4, + 0, 0, 0, 0,152, 84,222, 4, 0, 0, 0, 0,232, 88,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,152, 84,222, 4, + 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 8, 86,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,245, 67, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 48, 68, 0, 0, 0, 0, 0, 0,208, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +191, 2, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,192, 47, 68, 0, 0,200, 65, 0,192, 47, 68, 0, 0,200, 65, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 3, 3, 4, 0, 12, 0, 10, 0,192, 2, 26, 0,192, 2, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0, 93, 1, 0, 0,118, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 2, 26, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,204,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0, 8, 86,222, 4, + 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,120, 87,222, 4, 0, 0, 0, 0,152, 84,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 42,254,141, 63,192, 57, 49, 60, - 34,159, 80, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,222,149, 47, 63, 53, 70, 58, 63,222, 56, 49,188, 0, 0, 0, 0, - 86,126,162,190,227,251,159, 62, 55, 53,101, 63, 0, 0, 0, 0, 7,165, 39, 63,149, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0, -110,101,239, 64,150, 62,208,192, 78,255,170, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0,128, 63, 1, 0,128, 51, 1, 0, 0,179, 0, 0, 0, 0, - 0, 0, 0, 51, 0, 0,128, 63, 1, 0,128, 51, 0, 0, 0, 0, 2, 0, 0,179, 2, 0, 0,167, 1, 0,128, 63, 0, 0, 0, 0, - 1, 0, 0, 53, 1, 0, 0, 41, 1, 0,128,168, 0, 0,128, 63,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, - 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, - 90, 38,173,190, 0,222,192,190,152, 9, 52,193, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 5, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, - 56,180,150,201, 0, 0,128, 63,187,225, 16, 63, 0, 0,128, 63,205,204,204, 62,237, 54, 32, 63, 0, 0, 0, 0,143,194,117, 61, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 1, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 4, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,120, 87,222, 4, + 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0,232, 88,222, 4, 0, 0, 0, 0, 8, 86,222, 4, 0, 0, 0, 0, 0, 0,240,195, + 0, 0,240, 67, 0, 0,135,195, 0, 0,135, 67,238, 33,143,196,238, 33,143, 68, 0, 0, 7,196, 0, 0, 7, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +191, 2, 0, 0, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 59, 70, 0,128, 59, 70,172,197, 39, 55, + 0, 80,195, 71, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 4, 0, 0,192, 2, 76, 1,192, 2, 76, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 0, 0,240, 4, 0, 0,119, 1, 0, 0,194, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 2, 76, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -216,218,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 1, 0, 0,232, 88,222, 4, + 0, 0, 0, 0,217, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 87,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,122, 67, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, + 17, 0, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 18, 0, 0, 0,201, 2, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, +201, 2, 0, 0, 18, 0, 0, 0, 75, 1, 0, 0, 0, 0, 32, 65, 0, 0, 0, 63, 0,124,146, 72, 0, 0, 0, 66, 10,215, 35, 60, + 0, 0,200, 66,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0,202, 2, 76, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 68, 65, 84, 65,152, 0, 0, 0,216,218,168, 5, 0, 0, 0, 0,133, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 79, 66, 0, 0,112, 5, 0, 0,184,219,168, 5, 0, 0, 0, 0, -130, 0, 0, 0, 1, 0, 0, 0, 88,226,168, 5, 0, 0, 0, 0, 24,213,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,240, 0, 0, 0, 88, 90,222, 4, + 0, 0, 0, 0,186, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,171,100, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184, 17,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, - 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 0, 0, +232, 11, 0, 0, 40, 92,222, 4, 0, 0, 0, 0,173, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 67, 83, 99,101,110,101, 0,116, 97,103,101, + 0, 97,105,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 88,104,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 8,118,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,105,222, 4, 0, 0, 0, 0, 8,106,222, 4, 0, 0, 0, 0, 40,105,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,106,222, 4, + 0, 0, 0, 0,216, 62, 2,224,255,127, 0, 0, 17, 2, 24, 0, 90, 90, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,213,134, 5, 0, 0, 0, 0,136, 83,135, 5, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 68, 0, - 0, 0, 7, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63, -169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 1, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,192, 0, 0, 0, 68,172, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0,250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0,100, 0, 0, 0, 0, 0, 1, 0, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0, 6, 0, 50, 0,141, 0,128, 7, 56, 4, 8, 0, 8, 0, 24, 0, 17, 0, 0, 0, 90, 0, 1, 0, + 81, 0, 0, 0, 23, 0, 33, 0, 2, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 8, 0, 24, 0, 10, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,110,222, 4, 0, 0, 0, 0,136,110,222, 4, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 1, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 5, 0, 2, 0, 1, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,116,109,112, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 5, 0, 0, + 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 16, 0, 0, 0,128, 63, 0, 0,128, 63,173, 2, 95, 0, +154,153,217, 63, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 76, 69, 78, 68, 69, 82, 95, 82, 69, 78, 68, 69, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68,172, 0, 0, 0, 0,128, 63,102,166,171, 67, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96,164, 61, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 48,190, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 91,145, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2,224, 1, 60, 0, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0,180, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 5, 0,205,204,204, 61,154,153,153, 62,205,204, 76, 62,219, 15, 73, 63,102,102,102, 63, 0, 0, 0, 64, +154,153, 25, 63, 0, 0, 64, 65,102,102,166, 63, 0, 0, 0, 65, 0, 0,160, 65, 6, 0, 0, 0, 0, 0,192, 64, 0, 0,128, 63, + 0, 0, 0, 0,205,204, 28, 65, 0, 0, 0, 0, 32, 0, 0, 0, 32, 0, 1, 0,128, 0, 5, 0,218, 0, 0, 0, 60, 0, 5, 0, + 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 64,205,204, 76, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,195,245, 28,193, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, +128, 0, 0, 0, 88,104,222, 4, 0, 0, 0, 0, 9, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 64, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,225,168, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -120,247,139, 5, 0, 0, 0, 0, 24,149,132, 5, 0, 0, 0, 0, 25, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 40,105,222, 4, + 0, 0, 0, 0,145, 0, 0, 0, 1, 0, 0, 0,152,105,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 0,226, 2,214, 1,136,127,222, 4, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,152,105,222, 4, + 0, 0, 0, 0,145, 0, 0, 0, 1, 0, 0, 0, 8,106,222, 4, 0, 0, 0, 0, 40,105,222, 4, 0, 0, 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 0, 4, 0, 0,185, 3, 32, 3, 56,134,222, 4, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, 8,106,222, 4, + 0, 0, 0, 0,145, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,105,222, 4, 0, 0, 0, 0, 1, 0, 0, 0, + 3, 0, 0, 0, 0, 4, 0, 0,163, 0, 59, 2,216,120,222, 4, 0, 0, 0, 0, 68, 65, 84, 65,248, 1, 0, 0,120,106,222, 4, + 0, 0, 0, 0,169, 0, 0, 0, 1, 0, 0, 0,184,108,222, 4, 0, 0, 0, 0, 72,109,222, 4, 0, 0, 0, 0,216,109,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 1, 0, 0, 0,205,204, 76, 63, 0, 0,180, 66, 9, 0, 1, 0, + 0, 0,128, 63,111, 18,131, 58,205,204,204, 61, 0, 0, 1, 0, 32, 0, 32, 0, 32, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 80, 0, 0, 2, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 5, 0,255,255, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 66, 50, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 10,215, 35, 60,205,204,204, 61, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,250, 0,205,204,204, 61,205,204,204, 61,102,102,166, 63, 0, 0,192, 63, 0, 0,240, 65, + 72,225,122, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 67, 2, 0, 3, 2, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, + 35, 0, 0, 0,204,197,121, 63, 0, 0, 0, 63, 35, 0, 0, 0, 21,178,129, 63, 0, 0, 0, 63, 0, 0,128, 63, 49, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65, 64, 0, 0, 0,184,108,222, 4, 0, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0,104, 24,223, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 64, 0, 0, 0, 72,109,222, 4, 0, 0, 0, 0,166, 0, 0, 0, 1, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,200,200,255,128, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,104, 0, 0, 0,216,109,222, 4, + 0, 0, 0, 0,164, 0, 0, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,100,100,128, + 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,190,110,250, 66, + 72,134,143, 65,216, 8, 42, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,128, 0, 0, 0,136,110,222, 4, + 0, 0, 0, 0,151, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,101,110,100, +101,114, 76, 97,121,101,114, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,127, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 0, 0,200, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 22, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0, - 40,213,134, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, -136, 83,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0,120,225,168, 5, - 0, 0, 0, 0,133, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 67, 65, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 63,205,204,204, 61, 0, 0,200, 66, 0, 0, 12, 66,161, 14,234, 64, 0, 0, 0, 63, + 0, 0, 0, 66, 0, 0,144, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 65, 0, 0, 16, 2, 0, 0,168,113,222, 4, 0, 0, 0, 0, 35, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 76, 65, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 0, 0, 0, 79, 66, 0, 0,112, 5, 0, 0, 88,226,168, 5, 0, 0, 0, 0,130, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,184,219,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97, -109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63,247,255,239, 65, 0, 0,150, 66,154,153, 25, 62, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 8,116,222, 4, 0, 0, 0, 0, 2, 0, 0, 0, 46, 26,128, 63, 25, 4,240, 65, + 0, 0, 52, 66, 0, 0,128, 63, 0, 0, 64, 64,205,204, 76, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 11, 3, 0, + 1, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111, 18,131, 58, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 32, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,152,117,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 64, 1, 0, 0, 8,116,222, 4, + 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 1, 0, + 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,243, 4, 53,191,242, 4, 53, 63,242, 4, 53,191,243, 4, 53, 63, 40, 5,191, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 24, 0, 0, 0, 40, 5,191, 4, 0, 0, 0, 0,125, 1, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, + 40, 0, 0, 0,152,117,222, 4, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 0, 0, + 24, 2, 0, 0, 8,118,222, 4, 0, 0, 0, 0,144, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 79, 87,111,114,108,100, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 99, 80, 61, +114, 99, 80, 61,114, 99, 80, 61,199, 54, 36, 60,199, 54, 36, 60,199, 54, 36, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0,205,204, 28, 65, + 0, 0, 0, 0, 0, 0, 32, 0,128, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 64, 0, 0,200, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,112, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0,128, 63,205,204, 76, 61, 0, 0, 5, 0, + 0, 0, 0, 0, 10,215,163, 59, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,120,222, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0,104,120,222, 4, 0, 0, 0, 0, 12, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 0, 0,128, 5, 0, 0,216,120,222, 4, 0, 0, 0, 0,131, 0, 0, 0, + 1, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 66, 67, 97,109,101,114, 97, 0, 97,109,101,114, 97, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,112,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, +250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0, +250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,232,205,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, - 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, - 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154,112,130, 64, -183,178,128, 63,112,236,188, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,229,123, 38, 63, 87, 43, 98, 61,229,229,238, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 42,254,141, 63,192, 57, 49, 60, 34,159, 80, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,222,149, 47, 63, 53, 70, 58, 63,222, 56, 49,188, 0, 0, 0, 0, 86,126,162,190,227,251,159, 62, 55, 53,101, 63, + 0, 0, 0, 0, 7,165, 39, 63,149, 84, 28,191, 51,247,227, 62, 0, 0, 0, 0,110,101,239, 64,150, 62,208,192, 78,255,170, 64, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,236,148,190, - 25,134,116, 63,236, 13, 98,189, 0, 0, 0, 0,221,102, 69,191, 57,174, 76,190, 34,194, 26, 63, 0, 0, 0, 0, 37,255, 16, 63, -241,161, 95, 62,164,111, 75, 63, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 1, 0,128, 50, 0, 0, 0,179, 0, 0, 0, 0, 1, 0,128, 50, 1, 0,128, 63, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 39, 1, 0, 0, 52, 1, 0,128, 39, 0, 0,128, 63, 54,236,148,190, -221,102, 69,191, 38,255, 16, 63, 0, 0, 0, 0, 24,134,116, 63, 57,174, 76,190,239,161, 95, 62, 0, 0, 0, 0,237, 13, 98,189, - 35,194, 26, 63,166,111, 75, 63, 0, 0, 0, 0,209, 19, 13, 63,241, 65,102,190, 10, 10,231,192, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 1, 0,128, 63, 1, 0,128, 51, 1, 0, 0,179, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0,128, 63, 1, 0,128, 51, + 0, 0, 0, 0, 2, 0, 0,179, 2, 0, 0,167, 1, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 53, 1, 0, 0, 41, 1, 0,128,168, + 0, 0,128, 63,221,149, 47, 63, 86,126,162,190, 8,165, 39, 63, 0, 0, 0, 0, 51, 70, 58, 63,225,251,159, 62,149, 84, 28,191, + 0, 0, 0, 0,192, 56, 49,188, 55, 53,101, 63, 52,247,227, 62, 0, 0, 0, 0, 90, 38,173,190, 0,222,192,190,152, 9, 52,193, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,187,225, 16, 63, + 0, 0,128, 63,205,204,204, 62,237, 54, 32, 63, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 1, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,168,126,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0,168,126,222, 4, 0, 0, 0, 0,134, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62, 10,215,163, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 79, 66, 0, 0,128, 5, 0, 0,136,127,222, 4, + 0, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0, 56,134,222, 4, 0, 0, 0, 0,216,120,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,136,133, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,181,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,105,149, 3, 0, 0, 0, 0, 88,106,186, 4, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, + 0, 0, 68, 0, 0, 0, 7, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, + 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1, 0, 0, 0, 68, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62, -229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 1, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,232,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,133,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,222,186, 4, 0, 0, 0, 0,216,236,188, 4, + 0, 0, 0, 0, 25, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0,248,105,149, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 4, 0, 0, 0, 88,106,186, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0, 88,133,222, 4, 0, 0, 0, 0,134, 0, 0, 0, 1, 0, 0, 0, + 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0, 24,232,168, 5, 0, 0, 0, 0,133, 0, 0, 0, - 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61,205,204, 76, 62, + 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 79, 66, 0, 0,128, 5, 0, 0, + 56,134,222, 4, 0, 0, 0, 0,131, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,127,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 66, 76, 97,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,205,204,204, 61, -205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 77, 65, 0, 0, -128, 3, 0, 0,248,232,168, 5, 0, 0, 0, 0, 39, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 8, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 77, 97,116,101,114,105, 97,108, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,205,204, 76, 63,205,204, 76, 63, -205,204, 76, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, -205,204, 76, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 10,215, 35, 60, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 50, 0,205,204, 76, 62, - 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,160, 63, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 2, 0, 50, 0, 0, 6, - 0, 0,128, 63, 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 4, 0, - 67, 0, 64, 3, 67, 0, 64, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0,128, 64, - 0, 0, 0, 63,205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63,200,236,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,113,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 0, 0,250, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,229,123, 38, 63, 87, 43, 98, 61, +229,229,238, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54,236,148,190, 25,134,116, 63,236, 13, 98,189, 0, 0, 0, 0, +221,102, 69,191, 57,174, 76,190, 34,194, 26, 63, 0, 0, 0, 0, 37,255, 16, 63,241,161, 95, 62,164,111, 75, 63, 0, 0, 0, 0, +154,112,130, 64,183,178,128, 63,112,236,188, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 1, 0,128, 50, 0, 0, 0,179, 0, 0, 0, 0, + 1, 0,128, 50, 1, 0,128, 63, 1, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 0, 39, 1, 0, 0, 52, 1, 0,128, 39, 0, 0,128, 63, 54,236,148,190,221,102, 69,191, 38,255, 16, 63, 0, 0, 0, 0, + 24,134,116, 63, 57,174, 76,190,239,161, 95, 62, 0, 0, 0, 0,237, 13, 98,189, 35,194, 26, 63,166,111, 75, 63, 0, 0, 0, 0, +209, 19, 13, 63,241, 65,102,190, 10, 10,231,192, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, + 5, 0, 1, 0, 0, 0, 68, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, + 56,180,150,201, 0, 0,128, 63,169, 19,208, 60, 0, 0,128, 63,205,204,204, 62,229,208, 34, 62, 0, 0, 0, 0,143,194,117, 61, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 5, 0, 1, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,140,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72,238,168, 5, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111,148, 26, 63,111,148, 26, 63,111,148, 26, 63,205,204, 76, 61, -205,204,204, 61,102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,200,236,168, 5, - 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,255,168, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,152, 0, 0, 0, 8,140,222, 4, 0, 0, 0, 0, +134, 0, 0, 0, 1, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, +205,204,204, 61,205,204, 76, 62, 10,215,163, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 77, 65, 0, 0,128, 3, 0, 0,232,140,222, 4, 0, 0, 0, 0, 38, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 65, 77, 97,116,101,114,105, + 97,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,205,204, 76, 63, +205,204, 76, 63,205,204, 76, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63,205,204, 76, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 10,215, 35, 60, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 50, 0, +205,204, 76, 62, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0,160, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 2, 0, + 50, 0, 0, 6, 0, 0,128, 63, 0, 0,128, 63, 18, 0, 18, 0, 10,215,163, 59, 10,215,163, 59, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 4, 0, 67, 0, 64, 3, 67, 0, 64, 3, 1, 0, 4, 0, 12, 0, 4, 0, 0, 0, 0, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, + 0, 0,128, 64, 0, 0, 0, 63,205,204,204, 61, 0, 0, 0, 63,205,204,204, 61,205,204,204, 61, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, +184,144,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56,146,222, 4, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,111,148, 26, 63,111,148, 26, 63,111,148, 26, 63, +205,204, 76, 61,205,204,204, 61,102,102,166, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, +184,144,222, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +248,162,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 40, 0, 0, 0, 72,238,168, 5, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 53, 0, 53, 0,184,238,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0,184,238,168, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 51, 2, 2, 2, 51, 6, 6, 6,153, 6, 6, 6,153, 6, 6, 6,153, - 4, 4, 4,102, 3, 3, 3,102, 2, 2, 2, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 3, 3, 51, 8, 8, 8,153, 11, 11, 11,204, 13, 13, 13,255, 12, 12, 12,255, 12, 12, 12,255, 11, 11, 11,255, 10, 10, 10,255, - 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 51, 10, 10, 10,153, - 18, 18, 18,255, 20, 20, 20,255, 22, 22, 22,255, 23, 23, 23,255, 22, 22, 22,255, 20, 20, 20,255, 19, 19, 19,255, 16, 16, 16,255, - 14, 14, 14,255, 11, 11, 11,255, 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 8, 8, 8,204, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,102, 19, 19, 19,204, 27, 27, 27,255, - 31, 31, 31,255, 32, 32, 32,255, 33, 33, 33,255, 33, 33, 33,255, 31, 31, 31,255, 30, 30, 30,255, 27, 27, 27,255, 25, 25, 25,255, - 22, 22, 22,255, 19, 19, 19,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, - 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,153, 29, 29, 29,255, 37, 37, 37,255, 40, 40, 40,255, - 42, 42, 42,255, 42, 42, 42,255, 43, 43, 43,255, 41, 41, 41,255, 40, 40, 40,255, 38, 38, 38,255, 36, 36, 36,255, 33, 33, 33,255, - 30, 30, 30,255, 27, 27, 27,255, 24, 24, 24,255, 20, 20, 20,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, - 10, 10, 10,255, 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, 37, 37, 37,255, 44, 44, 44,255, 48, 48, 48,255, 50, 50, 50,255, - 51, 51, 51,255, 51, 51, 51,255, 50, 50, 50,255, 49, 49, 49,255, 48, 48, 48,255, 45, 45, 45,255, 43, 43, 43,255, 41, 41, 41,255, - 37, 37, 37,255, 34, 34, 34,255, 31, 31, 31,255, 28, 28, 28,255, 24, 24, 24,255, 20, 20, 20,255, 15, 15, 15,255, 11, 11, 11,255, - 10, 10, 10,255, 11, 11, 11,255, 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, 41, 41, 41,255, 50, 50, 50,255, 54, 54, 54,255, 57, 57, 57,255, 58, 58, 58,255, - 59, 59, 59,255, 59, 59, 59,255, 58, 58, 58,255, 57, 57, 57,255, 55, 55, 55,255, 53, 53, 53,255, 51, 51, 51,255, 48, 48, 48,255, - 45, 45, 45,255, 41, 41, 41,255, 38, 38, 38,255, 35, 35, 35,255, 31, 31, 31,255, 27, 27, 27,255, 23, 23, 23,255, 17, 17, 17,255, - 12, 12, 12,255, 11, 11, 11,255, 11, 11, 11,255, 5, 5, 5,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36,204, 53, 53, 53,255, 59, 59, 59,255, 63, 63, 63,255, 65, 65, 65,255, 66, 66, 66,255, - 66, 66, 66,255, 66, 66, 66,255, 65, 65, 65,255, 64, 64, 64,255, 62, 62, 62,255, 60, 60, 60,255, 57, 57, 57,255, 54, 54, 54,255, - 51, 51, 51,255, 48, 48, 48,255, 44, 44, 44,255, 41, 41, 41,255, 37, 37, 37,255, 33, 33, 33,255, 29, 29, 29,255, 24, 24, 24,255, - 19, 19, 19,255, 13, 13, 13,255, 11, 11, 11,255, 12, 12, 12,255, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 19, 19,102, 56, 56, 56,255, 64, 64, 64,255, 68, 68, 68,255, 71, 71, 71,255, 73, 73, 73,255, 74, 74, 74,255, - 74, 74, 74,255, 73, 73, 73,255, 72, 72, 72,255, 71, 71, 71,255, 69, 69, 69,255, 67, 67, 67,255, 64, 64, 64,255, 61, 61, 61,255, - 58, 58, 58,255, 54, 54, 54,255, 50, 50, 50,255, 47, 47, 47,255, 43, 43, 43,255, 39, 39, 39,255, 34, 34, 34,255, 30, 30, 30,255, - 25, 25, 25,255, 19, 19, 19,255, 13, 13, 13,255, 12, 12, 12,255, 10, 10, 10,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 54, 54,255, 66, 66, 66,255, 72, 72, 72,255, 77, 77, 77,255, 79, 79, 79,255, 81, 81, 81,255, 81, 81, 81,255, - 81, 81, 81,255, 80, 80, 80,255, 79, 79, 79,255, 77, 77, 77,255, 75, 75, 75,255, 73, 73, 73,255, 70, 70, 70,255, 67, 67, 67,255, - 63, 63, 63,255, 60, 60, 60,255, 56, 56, 56,255, 52, 52, 52,255, 49, 49, 49,255, 44, 44, 44,255, 40, 40, 40,255, 35, 35, 35,255, - 30, 30, 30,255, 24, 24, 24,255, 18, 18, 18,255, 12, 12, 12,255, 12, 12, 12,255, 6, 6, 6,102, 0, 0, 0, 0, 0, 0, 0, 0, - 22, 22, 22,102, 67, 67, 67,255, 76, 76, 76,255, 81, 81, 81,255, 84, 84, 84,255, 87, 87, 87,255, 88, 88, 88,255, 88, 88, 88,255, - 88, 88, 88,255, 87, 87, 87,255, 86, 86, 86,255, 84, 84, 84,255, 82, 82, 82,255, 79, 79, 79,255, 76, 76, 76,255, 73, 73, 73,255, - 69, 69, 69,255, 65, 65, 65,255, 62, 62, 62,255, 58, 58, 58,255, 54, 54, 54,255, 49, 49, 49,255, 45, 45, 45,255, 40, 40, 40,255, - 35, 35, 35,255, 29, 29, 29,255, 23, 23, 23,255, 16, 16, 16,255, 12, 12, 12,255, 12, 12, 12,204, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 49, 49,204, 76, 76, 76,255, 84, 84, 84,255, 89, 89, 89,255, 92, 92, 92,255, 94, 94, 94,255, 95, 95, 95,255, 95, 95, 95,255, - 95, 95, 95,255, 94, 94, 94,255, 93, 93, 93,255, 91, 91, 91,255, 88, 88, 88,255, 85, 85, 85,255, 82, 82, 82,255, 79, 79, 79,255, - 75, 75, 75,255, 71, 71, 71,255, 67, 67, 67,255, 63, 63, 63,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, 45, 45, 45,255, - 40, 40, 40,255, 34, 34, 34,255, 28, 28, 28,255, 21, 21, 21,255, 13, 13, 13,255, 14, 14, 14,255, 0, 0, 0, 0, 14, 14, 14,102, - 70, 70, 70,255, 85, 85, 85,255, 92, 92, 92,255, 97, 97, 97,255,100,100,100,255,102,102,102,255,102,102,102,255,103,103,103,255, -102,102,102,255,101,101,101,255, 99, 99, 99,255, 97, 97, 97,255, 94, 94, 94,255, 91, 91, 91,255, 88, 88, 88,255, 84, 84, 84,255, - 81, 81, 81,255, 77, 77, 77,255, 72, 72, 72,255, 68, 68, 68,255, 64, 64, 64,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, - 44, 44, 44,255, 39, 39, 39,255, 32, 32, 32,255, 25, 25, 25,255, 17, 17, 17,255, 13, 13, 13,255, 7, 7, 7,102, 24, 24, 24,102, - 80, 80, 80,255, 93, 93, 93,255,100,100,100,255,104,104,104,255,107,107,107,255,109,109,109,255,109,109,109,255,109,109,109,255, -109,109,109,255,107,107,107,255,106,106,106,255,103,103,103,255,100,100,100,255, 97, 97, 97,255, 94, 94, 94,255, 90, 90, 90,255, - 86, 86, 86,255, 82, 82, 82,255, 77, 77, 77,255, 73, 73, 73,255, 69, 69, 69,255, 64, 64, 64,255, 59, 59, 59,255, 54, 54, 54,255, - 49, 49, 49,255, 43, 43, 43,255, 36, 36, 36,255, 29, 29, 29,255, 21, 21, 21,255, 14, 14, 14,255, 10, 10, 10,153, 29, 29, 29,102, - 89, 89, 89,255,100,100,100,255,107,107,107,255,112,112,112,255,114,114,114,255,116,116,116,255,116,116,116,255,116,116,116,255, -115,115,115,255,114,114,114,255,112,112,112,255,110,110,110,255,107,107,107,255,104,104,104,255,100,100,100,255, 96, 96, 96,255, - 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 63, 63, 63,255, 58, 58, 58,255, - 52, 52, 52,255, 46, 46, 46,255, 40, 40, 40,255, 33, 33, 33,255, 24, 24, 24,255, 17, 17, 17,255, 13, 13, 13,204, 46, 46, 46,153, - 95, 95, 95,255,107,107,107,255,114,114,114,255,118,118,118,255,121,121,121,255,122,122,122,255,123,123,123,255,123,123,123,255, -122,122,122,255,122,122,122,255,120,120,120,255,118,118,118,255,114,114,114,255,110,110,110,255,106,106,106,255,101,101,101,255, - 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 62, 62, 62,255, - 56, 56, 56,255, 50, 50, 50,255, 44, 44, 44,255, 36, 36, 36,255, 28, 28, 28,255, 19, 19, 19,255, 12, 12, 12,204, 47, 47, 47,153, -101,101,101,255,113,113,113,255,120,120,120,255,125,125,125,255,127,127,127,255,129,129,129,255,130,130,130,255,130,130,130,255, -131,131,131,255,131,131,131,255,131,131,131,255,129,129,129,255,125,125,125,255,120,120,120,255,113,113,113,255,108,108,108,255, -103,103,103,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 82, 82, 82,255, 77, 77, 77,255, 72, 72, 72,255, 66, 66, 66,255, - 60, 60, 60,255, 54, 54, 54,255, 47, 47, 47,255, 39, 39, 39,255, 31, 31, 31,255, 22, 22, 22,255, 12, 12, 12,204, 48, 48, 48,153, -106,106,106,255,118,118,118,255,126,126,126,255,131,131,131,255,134,134,134,255,135,135,135,255,137,137,137,255,138,138,138,255, -142,142,142,255,147,147,147,255,149,149,149,255,148,148,148,255,142,142,142,255,133,133,133,255,124,124,124,255,115,115,115,255, -108,108,108,255,102,102,102,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 81, 81, 81,255, 75, 75, 75,255, 69, 69, 69,255, - 63, 63, 63,255, 57, 57, 57,255, 49, 49, 49,255, 42, 42, 42,255, 33, 33, 33,255, 24, 24, 24,255, 9, 9, 9,153, 32, 32, 32,102, -109,109,109,255,123,123,123,255,131,131,131,255,136,136,136,255,140,140,140,255,142,142,142,255,144,144,144,255,148,148,148,255, -156,156,156,255,168,168,168,255,176,176,176,255,177,177,177,255,168,168,168,255,153,153,153,255,137,137,137,255,124,124,124,255, -114,114,114,255,107,107,107,255,101,101,101,255, 96, 96, 96,255, 90, 90, 90,255, 85, 85, 85,255, 79, 79, 79,255, 72, 72, 72,255, - 66, 66, 66,255, 59, 59, 59,255, 52, 52, 52,255, 44, 44, 44,255, 35, 35, 35,255, 26, 26, 26,255, 10, 10, 10,153, 17, 17, 17, 51, -110,110,110,255,127,127,127,255,136,136,136,255,142,142,142,255,145,145,145,255,148,148,148,255,151,151,151,255,159,159,159,255, -174,174,174,255,195,195,195,255,212,212,212,255,216,216,216,255,204,204,204,255,179,179,179,255,154,154,154,255,135,135,135,255, -121,121,121,255,112,112,112,255,106,106,106,255, 99, 99, 99,255, 94, 94, 94,255, 88, 88, 88,255, 82, 82, 82,255, 76, 76, 76,255, - 69, 69, 69,255, 62, 62, 62,255, 54, 54, 54,255, 46, 46, 46,255, 37, 37, 37,255, 26, 26, 26,255, 6, 6, 6,102, 0, 0, 0, 0, -107,107,107,255,130,130,130,255,140,140,140,255,146,146,146,255,150,150,150,255,153,153,153,255,158,158,158,255,169,169,169,255, -191,191,191,255,219,219,219,255,246,246,246,255,254,254,254,255,237,237,237,255,204,204,204,255,170,170,170,255,145,145,145,255, -127,127,127,255,117,117,117,255,110,110,110,255,103,103,103,255, 97, 97, 97,255, 91, 91, 91,255, 85, 85, 85,255, 78, 78, 78,255, - 71, 71, 71,255, 64, 64, 64,255, 55, 55, 55,255, 47, 47, 47,255, 37, 37, 37,255, 25, 25, 25,255, 3, 3, 3, 51, 0, 0, 0, 0, - 65, 65, 65,153,129,129,129,255,142,142,142,255,149,149,149,255,154,154,154,255,158,158,158,255,163,163,163,255,176,176,176,255, -199,199,199,255,232,232,232,255,255,255,255,255,255,255,255,255,255,255,255,255,220,220,220,255,181,181,181,255,151,151,151,255, -132,132,132,255,121,121,121,255,113,113,113,255,106,106,106,255,100,100,100,255, 94, 94, 94,255, 87, 87, 87,255, 80, 80, 80,255, - 73, 73, 73,255, 65, 65, 65,255, 57, 57, 57,255, 48, 48, 48,255, 38, 38, 38,255, 16, 16, 16,153, 0, 0, 0, 0, 0, 0, 0, 0, - 21, 21, 21, 51,127,127,127,255,143,143,143,255,152,152,152,255,157,157,157,255,161,161,161,255,165,165,165,255,177,177,177,255, -198,198,198,255,227,227,227,255,253,253,253,255,255,255,255,255,250,250,250,255,217,217,217,255,181,181,181,255,153,153,153,255, -135,135,135,255,124,124,124,255,117,117,117,255,110,110,110,255,103,103,103,255, 96, 96, 96,255, 89, 89, 89,255, 82, 82, 82,255, - 74, 74, 74,255, 66, 66, 66,255, 57, 57, 57,255, 48, 48, 48,255, 35, 35, 35,255, 10, 10, 10,153, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 93, 93, 93,204,141,141,141,255,153,153,153,255,159,159,159,255,163,163,163,255,167,167,167,255,174,174,174,255, -188,188,188,255,209,209,209,255,228,228,228,255,234,234,234,255,224,224,224,255,200,200,200,255,173,173,173,255,151,151,151,255, -136,136,136,255,127,127,127,255,119,119,119,255,112,112,112,255,105,105,105,255, 98, 98, 98,255, 90, 90, 90,255, 83, 83, 83,255, - 75, 75, 75,255, 66, 66, 66,255, 57, 57, 57,255, 46, 46, 46,255, 24, 24, 24,204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 20, 20, 51,134,134,134,255,151,151,151,255,160,160,160,255,164,164,164,255,167,167,167,255,171,171,171,255, -178,178,178,255,189,189,189,255,200,200,200,255,202,202,202,255,195,195,195,255,180,180,180,255,163,163,163,255,148,148,148,255, -137,137,137,255,129,129,129,255,121,121,121,255,114,114,114,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 83, 83, 83,255, - 74, 74, 74,255, 65, 65, 65,255, 55, 55, 55,255, 41, 41, 41,255, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49,102,145,145,145,255,157,157,157,255,164,164,164,255,167,167,167,255,170,170,170,255, -172,172,172,255,176,176,176,255,180,180,180,255,179,179,179,255,174,174,174,255,165,165,165,255,155,155,155,255,145,145,145,255, -137,137,137,255,130,130,130,255,122,122,122,255,115,115,115,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, 82, 82, 82,255, - 73, 73, 73,255, 63, 63, 63,255, 50, 50, 50,255, 22, 22, 22,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,149,149,149,255,160,160,160,255,166,166,166,255,168,168,168,255, -169,169,169,255,170,170,170,255,169,169,169,255,167,167,167,255,164,164,164,255,158,158,158,255,151,151,151,255,144,144,144,255, -137,137,137,255,130,130,130,255,123,123,123,255,115,115,115,255,106,106,106,255, 98, 98, 98,255, 89, 89, 89,255, 80, 80, 80,255, - 70, 70, 70,255, 58, 58, 58,255, 27, 27, 27,153, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80,153,150,150,150,255,160,160,160,255,165,165,165,255, -167,167,167,255,167,167,167,255,166,166,166,255,163,163,163,255,160,160,160,255,155,155,155,255,149,149,149,255,143,143,143,255, -137,137,137,255,129,129,129,255,121,121,121,255,113,113,113,255,105,105,105,255, 96, 96, 96,255, 86, 86, 86,255, 76, 76, 76,255, - 63, 63, 63,255, 38, 38, 38,204, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,147,147,147,255,157,157,157,255, -161,161,161,255,163,163,163,255,162,162,162,255,160,160,160,255,157,157,157,255,152,152,152,255,147,147,147,255,141,141,141,255, -135,135,135,255,127,127,127,255,119,119,119,255,110,110,110,255,101,101,101,255, 91, 91, 91,255, 80, 80, 80,255, 66, 66, 66,255, - 32, 32, 32,153, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,134,134,134,255, -148,148,148,255,154,154,154,255,155,155,155,255,154,154,154,255,152,152,152,255,147,147,147,255,142,142,142,255,136,136,136,255, -130,130,130,255,122,122,122,255,114,114,114,255,104,104,104,255, 93, 93, 93,255, 81, 81, 81,255, 54, 54, 54,204, 22, 22, 22,102, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 73, 73,153,103,103,103,204,137,137,137,255,140,140,140,255,140,140,140,255,137,137,137,255,133,133,133,255,127,127,127,255, -120,120,120,255,113,113,113,255,102,102,102,255, 91, 91, 91,255, 64, 64, 64,204, 28, 28, 28,102, 6, 6, 6, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46,102, 72, 72, 72,153, 72, 72, 72,153, 92, 92, 92,204, 88, 88, 88,204, - 81, 81, 81,204, 54, 54, 54,153, 35, 35, 35,102, 16, 16, 16, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 0, 0, -168, 1, 0, 0, 8,255,168, 5, 0, 0, 0, 0, 33, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 84,101,120, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 40, 0, 0, 0, 56,146,222, 4, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 53, 0, 53, 0,168,146,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0,168,146,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 51, 2, 2, 2, 51, 6, 6, 6,153, 6, 6, 6,153, + 6, 6, 6,153, 4, 4, 4,102, 3, 3, 3,102, 2, 2, 2, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 3, 3, 51, 8, 8, 8,153, 11, 11, 11,204, 13, 13, 13,255, 12, 12, 12,255, 12, 12, 12,255, 11, 11, 11,255, + 10, 10, 10,255, 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 51, + 10, 10, 10,153, 18, 18, 18,255, 20, 20, 20,255, 22, 22, 22,255, 23, 23, 23,255, 22, 22, 22,255, 20, 20, 20,255, 19, 19, 19,255, + 16, 16, 16,255, 14, 14, 14,255, 11, 11, 11,255, 10, 10, 10,255, 9, 9, 9,255, 9, 9, 9,255, 9, 9, 9,255, 8, 8, 8,204, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7,102, 19, 19, 19,204, + 27, 27, 27,255, 31, 31, 31,255, 32, 32, 32,255, 33, 33, 33,255, 33, 33, 33,255, 31, 31, 31,255, 30, 30, 30,255, 27, 27, 27,255, + 25, 25, 25,255, 22, 22, 22,255, 19, 19, 19,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, 10, 10, 10,255, 10, 10, 10,255, + 10, 10, 10,255, 4, 4, 4,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,153, 29, 29, 29,255, 37, 37, 37,255, + 40, 40, 40,255, 42, 42, 42,255, 42, 42, 42,255, 43, 43, 43,255, 41, 41, 41,255, 40, 40, 40,255, 38, 38, 38,255, 36, 36, 36,255, + 33, 33, 33,255, 30, 30, 30,255, 27, 27, 27,255, 24, 24, 24,255, 20, 20, 20,255, 16, 16, 16,255, 12, 12, 12,255, 10, 10, 10,255, + 10, 10, 10,255, 10, 10, 10,255, 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, 37, 37, 37,255, 44, 44, 44,255, 48, 48, 48,255, + 50, 50, 50,255, 51, 51, 51,255, 51, 51, 51,255, 50, 50, 50,255, 49, 49, 49,255, 48, 48, 48,255, 45, 45, 45,255, 43, 43, 43,255, + 41, 41, 41,255, 37, 37, 37,255, 34, 34, 34,255, 31, 31, 31,255, 28, 28, 28,255, 24, 24, 24,255, 20, 20, 20,255, 15, 15, 15,255, + 11, 11, 11,255, 10, 10, 10,255, 11, 11, 11,255, 7, 7, 7,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13,102, 41, 41, 41,255, 50, 50, 50,255, 54, 54, 54,255, 57, 57, 57,255, + 58, 58, 58,255, 59, 59, 59,255, 59, 59, 59,255, 58, 58, 58,255, 57, 57, 57,255, 55, 55, 55,255, 53, 53, 53,255, 51, 51, 51,255, + 48, 48, 48,255, 45, 45, 45,255, 41, 41, 41,255, 38, 38, 38,255, 35, 35, 35,255, 31, 31, 31,255, 27, 27, 27,255, 23, 23, 23,255, + 17, 17, 17,255, 12, 12, 12,255, 11, 11, 11,255, 11, 11, 11,255, 5, 5, 5,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36,204, 53, 53, 53,255, 59, 59, 59,255, 63, 63, 63,255, 65, 65, 65,255, + 66, 66, 66,255, 66, 66, 66,255, 66, 66, 66,255, 65, 65, 65,255, 64, 64, 64,255, 62, 62, 62,255, 60, 60, 60,255, 57, 57, 57,255, + 54, 54, 54,255, 51, 51, 51,255, 48, 48, 48,255, 44, 44, 44,255, 41, 41, 41,255, 37, 37, 37,255, 33, 33, 33,255, 29, 29, 29,255, + 24, 24, 24,255, 19, 19, 19,255, 13, 13, 13,255, 11, 11, 11,255, 12, 12, 12,255, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19,102, 56, 56, 56,255, 64, 64, 64,255, 68, 68, 68,255, 71, 71, 71,255, 73, 73, 73,255, + 74, 74, 74,255, 74, 74, 74,255, 73, 73, 73,255, 72, 72, 72,255, 71, 71, 71,255, 69, 69, 69,255, 67, 67, 67,255, 64, 64, 64,255, + 61, 61, 61,255, 58, 58, 58,255, 54, 54, 54,255, 50, 50, 50,255, 47, 47, 47,255, 43, 43, 43,255, 39, 39, 39,255, 34, 34, 34,255, + 30, 30, 30,255, 25, 25, 25,255, 19, 19, 19,255, 13, 13, 13,255, 12, 12, 12,255, 10, 10, 10,204, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54,255, 66, 66, 66,255, 72, 72, 72,255, 77, 77, 77,255, 79, 79, 79,255, 81, 81, 81,255, + 81, 81, 81,255, 81, 81, 81,255, 80, 80, 80,255, 79, 79, 79,255, 77, 77, 77,255, 75, 75, 75,255, 73, 73, 73,255, 70, 70, 70,255, + 67, 67, 67,255, 63, 63, 63,255, 60, 60, 60,255, 56, 56, 56,255, 52, 52, 52,255, 49, 49, 49,255, 44, 44, 44,255, 40, 40, 40,255, + 35, 35, 35,255, 30, 30, 30,255, 24, 24, 24,255, 18, 18, 18,255, 12, 12, 12,255, 12, 12, 12,255, 6, 6, 6,102, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 22, 22,102, 67, 67, 67,255, 76, 76, 76,255, 81, 81, 81,255, 84, 84, 84,255, 87, 87, 87,255, 88, 88, 88,255, + 88, 88, 88,255, 88, 88, 88,255, 87, 87, 87,255, 86, 86, 86,255, 84, 84, 84,255, 82, 82, 82,255, 79, 79, 79,255, 76, 76, 76,255, + 73, 73, 73,255, 69, 69, 69,255, 65, 65, 65,255, 62, 62, 62,255, 58, 58, 58,255, 54, 54, 54,255, 49, 49, 49,255, 45, 45, 45,255, + 40, 40, 40,255, 35, 35, 35,255, 29, 29, 29,255, 23, 23, 23,255, 16, 16, 16,255, 12, 12, 12,255, 12, 12, 12,204, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 49, 49,204, 76, 76, 76,255, 84, 84, 84,255, 89, 89, 89,255, 92, 92, 92,255, 94, 94, 94,255, 95, 95, 95,255, + 95, 95, 95,255, 95, 95, 95,255, 94, 94, 94,255, 93, 93, 93,255, 91, 91, 91,255, 88, 88, 88,255, 85, 85, 85,255, 82, 82, 82,255, + 79, 79, 79,255, 75, 75, 75,255, 71, 71, 71,255, 67, 67, 67,255, 63, 63, 63,255, 59, 59, 59,255, 55, 55, 55,255, 50, 50, 50,255, + 45, 45, 45,255, 40, 40, 40,255, 34, 34, 34,255, 28, 28, 28,255, 21, 21, 21,255, 13, 13, 13,255, 14, 14, 14,255, 0, 0, 0, 0, + 14, 14, 14,102, 70, 70, 70,255, 85, 85, 85,255, 92, 92, 92,255, 97, 97, 97,255,100,100,100,255,102,102,102,255,102,102,102,255, +103,103,103,255,102,102,102,255,101,101,101,255, 99, 99, 99,255, 97, 97, 97,255, 94, 94, 94,255, 91, 91, 91,255, 88, 88, 88,255, + 84, 84, 84,255, 81, 81, 81,255, 77, 77, 77,255, 72, 72, 72,255, 68, 68, 68,255, 64, 64, 64,255, 59, 59, 59,255, 55, 55, 55,255, + 50, 50, 50,255, 44, 44, 44,255, 39, 39, 39,255, 32, 32, 32,255, 25, 25, 25,255, 17, 17, 17,255, 13, 13, 13,255, 7, 7, 7,102, + 24, 24, 24,102, 80, 80, 80,255, 93, 93, 93,255,100,100,100,255,104,104,104,255,107,107,107,255,109,109,109,255,109,109,109,255, +109,109,109,255,109,109,109,255,107,107,107,255,106,106,106,255,103,103,103,255,100,100,100,255, 97, 97, 97,255, 94, 94, 94,255, + 90, 90, 90,255, 86, 86, 86,255, 82, 82, 82,255, 77, 77, 77,255, 73, 73, 73,255, 69, 69, 69,255, 64, 64, 64,255, 59, 59, 59,255, + 54, 54, 54,255, 49, 49, 49,255, 43, 43, 43,255, 36, 36, 36,255, 29, 29, 29,255, 21, 21, 21,255, 14, 14, 14,255, 10, 10, 10,153, + 29, 29, 29,102, 89, 89, 89,255,100,100,100,255,107,107,107,255,112,112,112,255,114,114,114,255,116,116,116,255,116,116,116,255, +116,116,116,255,115,115,115,255,114,114,114,255,112,112,112,255,110,110,110,255,107,107,107,255,104,104,104,255,100,100,100,255, + 96, 96, 96,255, 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, 63, 63, 63,255, + 58, 58, 58,255, 52, 52, 52,255, 46, 46, 46,255, 40, 40, 40,255, 33, 33, 33,255, 24, 24, 24,255, 17, 17, 17,255, 13, 13, 13,204, + 46, 46, 46,153, 95, 95, 95,255,107,107,107,255,114,114,114,255,118,118,118,255,121,121,121,255,122,122,122,255,123,123,123,255, +123,123,123,255,122,122,122,255,122,122,122,255,120,120,120,255,118,118,118,255,114,114,114,255,110,110,110,255,106,106,106,255, +101,101,101,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 83, 83, 83,255, 78, 78, 78,255, 73, 73, 73,255, 68, 68, 68,255, + 62, 62, 62,255, 56, 56, 56,255, 50, 50, 50,255, 44, 44, 44,255, 36, 36, 36,255, 28, 28, 28,255, 19, 19, 19,255, 12, 12, 12,204, + 47, 47, 47,153,101,101,101,255,113,113,113,255,120,120,120,255,125,125,125,255,127,127,127,255,129,129,129,255,130,130,130,255, +130,130,130,255,131,131,131,255,131,131,131,255,131,131,131,255,129,129,129,255,125,125,125,255,120,120,120,255,113,113,113,255, +108,108,108,255,103,103,103,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 82, 82, 82,255, 77, 77, 77,255, 72, 72, 72,255, + 66, 66, 66,255, 60, 60, 60,255, 54, 54, 54,255, 47, 47, 47,255, 39, 39, 39,255, 31, 31, 31,255, 22, 22, 22,255, 12, 12, 12,204, + 48, 48, 48,153,106,106,106,255,118,118,118,255,126,126,126,255,131,131,131,255,134,134,134,255,135,135,135,255,137,137,137,255, +138,138,138,255,142,142,142,255,147,147,147,255,149,149,149,255,148,148,148,255,142,142,142,255,133,133,133,255,124,124,124,255, +115,115,115,255,108,108,108,255,102,102,102,255, 97, 97, 97,255, 92, 92, 92,255, 87, 87, 87,255, 81, 81, 81,255, 75, 75, 75,255, + 69, 69, 69,255, 63, 63, 63,255, 57, 57, 57,255, 49, 49, 49,255, 42, 42, 42,255, 33, 33, 33,255, 24, 24, 24,255, 9, 9, 9,153, + 32, 32, 32,102,109,109,109,255,123,123,123,255,131,131,131,255,136,136,136,255,140,140,140,255,142,142,142,255,144,144,144,255, +148,148,148,255,156,156,156,255,168,168,168,255,176,176,176,255,177,177,177,255,168,168,168,255,153,153,153,255,137,137,137,255, +124,124,124,255,114,114,114,255,107,107,107,255,101,101,101,255, 96, 96, 96,255, 90, 90, 90,255, 85, 85, 85,255, 79, 79, 79,255, + 72, 72, 72,255, 66, 66, 66,255, 59, 59, 59,255, 52, 52, 52,255, 44, 44, 44,255, 35, 35, 35,255, 26, 26, 26,255, 10, 10, 10,153, + 17, 17, 17, 51,110,110,110,255,127,127,127,255,136,136,136,255,142,142,142,255,145,145,145,255,148,148,148,255,151,151,151,255, +159,159,159,255,174,174,174,255,195,195,195,255,212,212,212,255,216,216,216,255,204,204,204,255,179,179,179,255,154,154,154,255, +135,135,135,255,121,121,121,255,112,112,112,255,106,106,106,255, 99, 99, 99,255, 94, 94, 94,255, 88, 88, 88,255, 82, 82, 82,255, + 76, 76, 76,255, 69, 69, 69,255, 62, 62, 62,255, 54, 54, 54,255, 46, 46, 46,255, 37, 37, 37,255, 26, 26, 26,255, 6, 6, 6,102, + 0, 0, 0, 0,107,107,107,255,130,130,130,255,140,140,140,255,146,146,146,255,150,150,150,255,153,153,153,255,158,158,158,255, +169,169,169,255,191,191,191,255,219,219,219,255,246,246,246,255,254,254,254,255,237,237,237,255,204,204,204,255,170,170,170,255, +145,145,145,255,127,127,127,255,117,117,117,255,110,110,110,255,103,103,103,255, 97, 97, 97,255, 91, 91, 91,255, 85, 85, 85,255, + 78, 78, 78,255, 71, 71, 71,255, 64, 64, 64,255, 55, 55, 55,255, 47, 47, 47,255, 37, 37, 37,255, 25, 25, 25,255, 3, 3, 3, 51, + 0, 0, 0, 0, 65, 65, 65,153,129,129,129,255,142,142,142,255,149,149,149,255,154,154,154,255,158,158,158,255,163,163,163,255, +176,176,176,255,199,199,199,255,232,232,232,255,255,255,255,255,255,255,255,255,255,255,255,255,220,220,220,255,181,181,181,255, +151,151,151,255,132,132,132,255,121,121,121,255,113,113,113,255,106,106,106,255,100,100,100,255, 94, 94, 94,255, 87, 87, 87,255, + 80, 80, 80,255, 73, 73, 73,255, 65, 65, 65,255, 57, 57, 57,255, 48, 48, 48,255, 38, 38, 38,255, 16, 16, 16,153, 0, 0, 0, 0, + 0, 0, 0, 0, 21, 21, 21, 51,127,127,127,255,143,143,143,255,152,152,152,255,157,157,157,255,161,161,161,255,165,165,165,255, +177,177,177,255,198,198,198,255,227,227,227,255,253,253,253,255,255,255,255,255,250,250,250,255,217,217,217,255,181,181,181,255, +153,153,153,255,135,135,135,255,124,124,124,255,117,117,117,255,110,110,110,255,103,103,103,255, 96, 96, 96,255, 89, 89, 89,255, + 82, 82, 82,255, 74, 74, 74,255, 66, 66, 66,255, 57, 57, 57,255, 48, 48, 48,255, 35, 35, 35,255, 10, 10, 10,153, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, 93,204,141,141,141,255,153,153,153,255,159,159,159,255,163,163,163,255,167,167,167,255, +174,174,174,255,188,188,188,255,209,209,209,255,228,228,228,255,234,234,234,255,224,224,224,255,200,200,200,255,173,173,173,255, +151,151,151,255,136,136,136,255,127,127,127,255,119,119,119,255,112,112,112,255,105,105,105,255, 98, 98, 98,255, 90, 90, 90,255, + 83, 83, 83,255, 75, 75, 75,255, 66, 66, 66,255, 57, 57, 57,255, 46, 46, 46,255, 24, 24, 24,204, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 51,134,134,134,255,151,151,151,255,160,160,160,255,164,164,164,255,167,167,167,255, +171,171,171,255,178,178,178,255,189,189,189,255,200,200,200,255,202,202,202,255,195,195,195,255,180,180,180,255,163,163,163,255, +148,148,148,255,137,137,137,255,129,129,129,255,121,121,121,255,114,114,114,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, + 83, 83, 83,255, 74, 74, 74,255, 65, 65, 65,255, 55, 55, 55,255, 41, 41, 41,255, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49,102,145,145,145,255,157,157,157,255,164,164,164,255,167,167,167,255, +170,170,170,255,172,172,172,255,176,176,176,255,180,180,180,255,179,179,179,255,174,174,174,255,165,165,165,255,155,155,155,255, +145,145,145,255,137,137,137,255,130,130,130,255,122,122,122,255,115,115,115,255,107,107,107,255, 99, 99, 99,255, 91, 91, 91,255, + 82, 82, 82,255, 73, 73, 73,255, 63, 63, 63,255, 50, 50, 50,255, 22, 22, 22,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,149,149,149,255,160,160,160,255,166,166,166,255, +168,168,168,255,169,169,169,255,170,170,170,255,169,169,169,255,167,167,167,255,164,164,164,255,158,158,158,255,151,151,151,255, +144,144,144,255,137,137,137,255,130,130,130,255,123,123,123,255,115,115,115,255,106,106,106,255, 98, 98, 98,255, 89, 89, 89,255, + 80, 80, 80,255, 70, 70, 70,255, 58, 58, 58,255, 27, 27, 27,153, 3, 3, 3, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80,153,150,150,150,255,160,160,160,255, +165,165,165,255,167,167,167,255,167,167,167,255,166,166,166,255,163,163,163,255,160,160,160,255,155,155,155,255,149,149,149,255, +143,143,143,255,137,137,137,255,129,129,129,255,121,121,121,255,113,113,113,255,105,105,105,255, 96, 96, 96,255, 86, 86, 86,255, + 76, 76, 76,255, 63, 63, 63,255, 38, 38, 38,204, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78,153,147,147,147,255, +157,157,157,255,161,161,161,255,163,163,163,255,162,162,162,255,160,160,160,255,157,157,157,255,152,152,152,255,147,147,147,255, +141,141,141,255,135,135,135,255,127,127,127,255,119,119,119,255,110,110,110,255,101,101,101,255, 91, 91, 91,255, 80, 80, 80,255, + 66, 66, 66,255, 32, 32, 32,153, 7, 7, 7, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +134,134,134,255,148,148,148,255,154,154,154,255,155,155,155,255,154,154,154,255,152,152,152,255,147,147,147,255,142,142,142,255, +136,136,136,255,130,130,130,255,122,122,122,255,114,114,114,255,104,104,104,255, 93, 93, 93,255, 81, 81, 81,255, 54, 54, 54,204, + 22, 22, 22,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 73, 73, 73,153,103,103,103,204,137,137,137,255,140,140,140,255,140,140,140,255,137,137,137,255,133,133,133,255, +127,127,127,255,120,120,120,255,113,113,113,255,102,102,102,255, 91, 91, 91,255, 64, 64, 64,204, 28, 28, 28,102, 6, 6, 6, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46,102, 72, 72, 72,153, 72, 72, 72,153, 92, 92, 92,204, + 88, 88, 88,204, 81, 81, 81,204, 54, 54, 54,153, 35, 35, 35,102, 16, 16, 16, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84, 69, 0, 0,160, 1, 0, 0,248,162,222, 4, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 69, 84,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,160, 64, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 64, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 8, 0, 0, 0, 1, 0, 1, 0, 3, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 60, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 40, 0, 0, 0,248, 0,169, 5, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 15, 0,104, 1,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 0, 16, 0, 0,104, 1,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0,160, 64, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 8, 0, 0, 0, 1, 0, 1, 0, + 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204,204, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,164,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 40, 0, 0, 0, +232,164,222, 4, 0, 0, 0, 0, 12, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 16, 0, 15, 0, 88,165,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 0, 16, 0, 0, + 88,165,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6496,23 +6611,24 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 0, 0, 16, 5, 0, 0,184, 17,169, 5, - 0, 0, 0, 0, 50, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 0, 0, 16, 5, 0, 0,168,181,222, 4, 0, 0, 0, 0, + 49, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 77, 69, 67,117, 98,101, 0,112,104,101,114,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,168,106,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 37,169, 5, 0, 0, 0, 0,168, 36,169, 5, - 0, 0, 0, 0, 72, 33,169, 5, 0, 0, 0, 0,216, 31,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 25,169, 5, 0, 0, 0, 0,168, 28,169, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 23,169, 5, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +136, 0,191, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,199,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56,196,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,189,222, 4, 0, 0, 0, 0, 8,193,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8,187,222, 4, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255, 1, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 88, 26,169, 5, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 1, 0, 0, 0,255,255,255,255, +255,255,255,255, 2, 0, 0, 0, 5, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +184,190,222, 4, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, @@ -6523,30 +6639,29 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 34,169, 5, 0, 0, 0, 0,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,197,222, 4, 0, 0, 0, 0,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 1, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255, 2, 0, 0, 0, 5, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 29,169, 5, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 1, 0, 0, 0, +255,255,255,255,255,255,255,255,255,255,255,255, 1, 0, 0, 0, 5, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,232,193,222, 4, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255, 2, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 51, 0, 0, 0,180, 0, 0, 0, 0, 4, 0,128, 63, 4, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 67, 0, 30, 0, 6, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 8, 0, 0, 0,168,106,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,248,232,168, 5, 0, 0, 0, 0, 68, 65, 84, 65, - 8, 2, 0, 0, 24, 23,169, 5, 0, 0, 0, 0,132, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 25,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255, 1, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 51, + 0, 0, 0,180, 0, 0, 0, 0, 4, 0,128, 63, 4, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 67, 0, 30, 0, 6, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 0, 0, 0, +136, 0,191, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,232,140,222, 4, 0, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0, + 8,187,222, 4, 0, 0, 0, 0,132, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,189,222, 4, 0, 0, 0, 0, 34, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,190,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6555,18 +6670,20 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, -160, 0, 0, 0,104, 25,169, 5, 0, 0, 0, 0, 56, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 63,255,255,127, 63, 0, 0,128,191, -230, 73,230, 73, 26,182, 1, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, 26,182, 1, 0, 1, 0,128,191, -253,255,127,191, 0, 0,128,191, 26,182, 26,182, 26,182, 1, 0,250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, - 26,182, 1, 0, 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,230, 73,230, 73,230, 73, 1, 0,245,255,127, 63, 5, 0,128,191, - 0, 0,128, 63,230, 73, 26,182,230, 73, 1, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73, 1, 0, -255,255,127,191, 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73, 1, 0, 68, 65, 84, 65, 8, 2, 0, 0, 88, 26,169, 5, - 0, 0, 0, 0,132, 1, 0, 0, 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,160, 0, 0, 0, + 88,189,222, 4, 0, 0, 0, 0, 55, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 63,255,255,127, 63, 0, 0,128,191,230, 73,230, 73, + 26,182, 1, 0, 0, 0,128, 63, 0, 0,128,191, 0, 0,128,191,230, 73, 26,182, 26,182, 1, 0, 1, 0,128,191,253,255,127,191, + 0, 0,128,191, 26,182, 26,182, 26,182, 1, 0,250,255,127,191, 3, 0,128, 63, 0, 0,128,191, 26,182,230, 73, 26,182, 1, 0, + 4, 0,128, 63,247,255,127, 63, 0, 0,128, 63,230, 73,230, 73,230, 73, 1, 0,245,255,127, 63, 5, 0,128,191, 0, 0,128, 63, +230, 73, 26,182,230, 73, 1, 0, 3, 0,128,191,250,255,127,191, 0, 0,128, 63, 26,182, 26,182,230, 73, 1, 0,255,255,127,191, + 0, 0,128, 63, 0, 0,128, 63, 26,182,230, 73,230, 73, 1, 0, 68, 65, 84, 65, 32, 0, 0, 0, 72,190,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0,184,190,222, 4, 0, 0, 0, 0,132, 1, 0, 0, 5, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 28,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8,193,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6578,21 +6695,20 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0,168, 28,169, 5, - 0, 0, 0, 0, 53, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 35, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, - 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 35, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, - 8, 2, 0, 0,136, 29,169, 5, 0, 0, 0, 0,132, 1, 0, 0, 5, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 86, 77, 97,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216, 31,169, 5, 0, 0, 0, 0, 26, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 71,111,110, - 32, 70, 97, 99,101, 45, 86,101,114,116,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 33,169, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,144, 0, 0, 0, 8,193,222, 4, 0, 0, 0, 0, 52, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 35, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 35, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 35, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 35, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, + 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 35, 0, 4, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 5, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 35, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 35, 0, 68, 65, 84, 65, 8, 2, 0, 0,232,193,222, 4, 0, 0, 0, 0, +132, 1, 0, 0, 5, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 78, 71,111,110, 32, 70, 97, 99,101, 45, 86,101,114,116,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56,196,222, 4, 0, 0, 0, 0, 26, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 71,111,110, 32, 70, 97, 99,101, 45, 86,101,114,116,101,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,140, 98, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6600,33 +6716,23 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 32, 1, 0, 0,216, 31,169, 5, 0, 0, 0, 0, 61, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 2, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0, 72, 33,169, 5, - 0, 0, 0, 0, 59, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, - 5, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 6, 0, 0, 0, - 10, 0, 0, 0, 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, - 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 10, 0, 0, 0, 6, 0, 0, 0, - 6, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 7, 0, 0, 0, - 7, 0, 0, 0, 3, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, - 7, 0, 0, 0, 7, 0, 0, 0, 9, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0, 88, 34,169, 5, 0, 0, 0, 0,132, 1, 0, 0, - 5, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 85, 86, 77, 97,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,168, 36,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 71,111,110, 32, 70, 97, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 37,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,192, 0, 0, 0, 56,196,222, 4, 0, 0, 0, 0, + 58, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, + 3, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 11, 0, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, + 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 10, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0, + 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, + 3, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, + 7, 0, 0, 0, 9, 0, 0, 0, 68, 65, 84, 65, 8, 2, 0, 0, 72,197,222, 4, 0, 0, 0, 0,132, 1, 0, 0, 5, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 78, 71,111,110, 32, 70, 97, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +152,199,222, 4, 0, 0, 0, 0, 25, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 78, 71,111,110, 32, 70, 97, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24,144, 98, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6634,29 +6740,27 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 96, 0, 0, 0,168, 36,169, 5, 0, 0, 0, 0, 60, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0, 88, 37,169, 5, 0, 0, 0, 0, 58, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, - 12, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 16, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 20, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 2, 0, 66, 82, 0, 0, 96, 6, 0, 0,232, 37,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168, 47,169, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 65,100, -100, 0,104, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 72, 0, 0, 0,152,199,222, 4, 0, 0, 0, 0, 57, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 2, 0, 12, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 16, 0, 0, 0, 4, 0, 0, 0, 0, 0, 2, 0, 20, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 2, 0, 66, 82, 0, 0, 96, 6, 0, 0, 40,200,222, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, +104,210,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 65,100,100, 0,104, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24, 46,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,208,222, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6689,50 +6793,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, - 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 56, 1, 0, 0,128, 38,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 56, 1, 0, 0,192,200,222, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 24, 46,169, 5, 0, 0, 0, 0,127, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, - 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,184,181,132, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,208,222, 4, 0, 0, 0, 0, +127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, + 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,232,209,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,184,181,132, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168, 47,169, 5, 0, 0, 0, 0,131, 1, 0, 0, - 1, 0, 0, 0,232, 55,169, 5, 0, 0, 0, 0,232, 37,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 66,108,111, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88, 54,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232,209,222, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104,210,222, 4, 0, 0, 0, 0, +131, 1, 0, 0, 1, 0, 0, 0, 40,219,222, 4, 0, 0, 0, 0, 40,200,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108,111, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,217,222, 4, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6764,49 +6867,51 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, - 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 64, 48,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, + 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, +205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, + 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 0,211,222, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88, 54,169, 5, - 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, - 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,200, 66,140, 5, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, + 24,217,222, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, +168,218,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168,218,222, 4, 0, 0, 0, 0, +125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, + 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0, + 40,219,222, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0,104,210,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108,117,114, 0, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,200, 66,140, 5, 0, 0, 0, 0,125, 1, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63, -143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,232, 55,169, 5, - 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0,168, 47,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,108,117,114, 0, 46, 48, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152, 62,169, 5, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, +216,225,222, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6838,51 +6943,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, + 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192,219,222, 4, 0, 0, 0, 0, + 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, - 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,128, 56,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, - 64, 1, 0, 0,152, 62,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, - 46,189,194, 61,216,145,132, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 68, 65, 84, 65, 64, 1, 0, 0,216,225,222, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, + 14,215,126,191, 46,189,194, 61,104,227,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,216,145,132, 5, - 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, - 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, - 96, 6, 0, 0, 40, 64,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0,232, 55,169, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,114,117,115,104, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, +104,227,222, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, + 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 0, 0, 96, 6, 0, 0,232,227,222, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, + 40,219,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 66,114,117,115,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0,216, 70,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 0,152,234,222, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6915,49 +7019,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, -205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,192, 64,169, 5, - 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0, +102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, +128,228,222, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216, 70,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186, 8, 3,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,234,222, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, +224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,236,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0, 8, 3,135, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104, 72,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168, 80,169, 5, - 0, 0, 0, 0, 40, 64,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, - 97,121, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 48, 0, 0, 0, 40,236,222, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168,236,222, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, +104,245,222, 4, 0, 0, 0, 0,232,227,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 67,108, 97,121, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24, 79,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,243,222, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6990,50 +7094,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 8, 0, 0, 0, 0, 10, 0, 0, 0, - 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, - 56, 1, 0, 0, 0, 73,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 8, 0, 0, 0, 0, + 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, + 68, 65, 84, 65, 56, 1, 0, 0, 64,237,222, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 24, 79,169, 5, 0, 0, 0, 0,127, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, - 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 56, 35,135, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,243,222, 4, 0, 0, 0, 0, +127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, + 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,232,244,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 56, 35,135, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168, 80,169, 5, 0, 0, 0, 0,131, 1, 0, 0, - 1, 0, 0, 0,104, 89,169, 5, 0, 0, 0, 0,104, 72,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 67,108, 97,121, 32, 83,116,114,105,112,115, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88, 87,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232,244,222, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104,245,222, 4, 0, 0, 0, 0, +131, 1, 0, 0, 1, 0, 0, 0, 40,254,222, 4, 0, 0, 0, 0,168,236,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108, 97,121, 32, 83,116,114,105,112,115, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,252,222, 4, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7065,49 +7168,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, - 0, 0, 0, 0, 33, 0, 0, 0,160,119, 78, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, - 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 64, 81,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, + 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, +205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0,160,119, 78, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, + 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 0,246,222, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88, 87,169, 5, - 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, - 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,232, 88,169, 5, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, + 24,252,222, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, +168,253,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168,253,222, 4, 0, 0, 0, 0, +125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, + 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0, + 40,254,222, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0,104,245,222, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108,111,110,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232, 88,169, 5, 0, 0, 0, 0,125, 1, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63, -143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104, 89,169, 5, - 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0,168, 80,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,108,111,110,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24, 96,169, 5, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, +216, 4,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7140,50 +7244,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 63, - 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 0, 90,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192,254,222, 4, 0, 0, 0, 0, + 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, - 64, 1, 0, 0, 24, 96,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, - 46,189,194, 61,168, 97,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 68, 65, 84, 65, 64, 1, 0, 0,216, 4,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, + 14,215,126,191, 46,189,194, 61,104, 6,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168, 97,169, 5, - 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, - 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, - 96, 6, 0, 0, 40, 98,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0,104, 89,169, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,114,101, 97,115,101, 0, 48, 48, 49, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, +104, 6,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, + 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 0, 0, 96, 6, 0, 0,232, 6,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, + 40,254,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 67,114,101, 97,115,101, + 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0,216,104,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 0,152, 13,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7216,49 +7320,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, -205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,192, 98,169, 5, - 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0, +102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, + 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, +128, 7,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216,104,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,228, 97,175,190, - 50,131,112, 63,218,243,127,191, 10,183,157,188,104,106,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152, 13,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, +228, 97,175,190, 50,131,112, 63,218,243,127,191, 10,183,157,188, 40, 15,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,104,106,169, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215, 35, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,232,106,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168,115,169, 5, - 0, 0, 0, 0, 40, 98,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68, 97, -114,107,101,110, 0, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 48, 0, 0, 0, 40, 15,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215, 35, 61, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168, 15,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, +104, 24,223, 4, 0, 0, 0, 0,232, 6,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 68, 97,114,107,101,110, 0, 48, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152,113,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88, 22,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7291,50 +7395,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, - 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 56, 1, 0, 0,128,107,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 56, 1, 0, 0, 64, 16,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,113,169, 5, 0, 0, 0, 0,127, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, - 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 40,115,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88, 22,223, 4, 0, 0, 0, 0, +127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, + 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,232, 23,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 40,115,169, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168,115,169, 5, 0, 0, 0, 0,131, 1, 0, 0, - 1, 0, 0, 0,104,124,169, 5, 0, 0, 0, 0,232,106,169, 5, 0, 0, 0, 0, 0, 20, 1,160,255,255,255,255, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 68,114, 97,119, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,122,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232, 23,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104, 24,223, 4, 0, 0, 0, 0, +131, 1, 0, 0, 1, 0, 0, 0, 40, 33,223, 4, 0, 0, 0, 0,168, 15,223, 4, 0, 0, 0, 0, 0, 20, 1,160,255,255,255,255, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 68,114, 97,119, 0, 46, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24, 31,223, 4, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7366,49 +7469,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 63, 35, 0, 0, 0, 0, 4, 0, 8, - 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, - 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 64,116,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 63, 35, 0, 0, 0, + 0, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, +205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, + 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 0, 25,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,122,169, 5, - 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, - 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,232,123,169, 5, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, + 24, 31,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, +168, 32,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168, 32,223, 4, 0, 0, 0, 0, +125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, + 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0, + 40, 33,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0,104, 24,223, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,105,108,108, 47, 68,101,101,112,101,110, 0, 48, 48, + 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, +216, 39,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232,123,169, 5, 0, 0, 0, 0,125, 1, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63, -143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104,124,169, 5, - 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0,168,115,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,105,108,108, 47, 68,101,101,112,101,110, 0, 48, 48, 49, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,131,169, 5, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7441,50 +7545,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, - 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, - 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 0,125,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, + 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,192, 33,223, 4, 0, 0, 0, 0, + 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, - 64, 1, 0, 0, 24,131,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191, -114, 97,255,186,168,132,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 68, 65, 84, 65, 64, 1, 0, 0,216, 39,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186, +224,255,127,191,114, 97,255,186,104, 41,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168,132,169, 5, - 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, - 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, - 96, 6, 0, 0, 40,133,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0,104,124,169, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,108, 97,116,116,101,110, 47, 67,111, -110,116,114, 97,115,116, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0,216,139,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, +104, 41,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, +215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 0, 0, 96, 6, 0, 0,232, 41,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, + 40, 33,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 70,108, 97,116,116,101, +110, 47, 67,111,110,116,114, 97,115,116, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 0,152, 48,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7517,49 +7621,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, -205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,192,133,169, 5, - 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0, +102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, + 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, +128, 42,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216,139,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,104,141,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152, 48,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, +224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 40, 50,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,104,141,169, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,232,141,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168,150,169, 5, - 0, 0, 0, 0, 40,133,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 71,114, - 97, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 48, 0, 0, 0, 40, 50,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168, 50,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, +104, 59,223, 4, 0, 0, 0, 0,232, 41,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 71,114, 97, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152,148,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88, 57,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7592,50 +7696,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, - 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 56, 1, 0, 0,128,142,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 56, 1, 0, 0, 64, 51,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,148,169, 5, 0, 0, 0, 0,127, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, - 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,150,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88, 57,223, 4, 0, 0, 0, 0, +127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, + 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,232, 58,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 40,150,169, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168,150,169, 5, 0, 0, 0, 0,131, 1, 0, 0, - 1, 0, 0, 0,104,159,169, 5, 0, 0, 0, 0,232,141,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 73,110,102,108, 97,116,101, 47, 68,101,102,108, 97,116,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,157,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232, 58,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104, 59,223, 4, 0, 0, 0, 0, +131, 1, 0, 0, 1, 0, 0, 0, 40, 68,223, 4, 0, 0, 0, 0,168, 50,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 73,110,102,108, 97,116,101, 47, 68,101,102,108, 97,116,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24, 66,223, 4, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7667,49 +7770,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, - 0, 0,128, 62, 68, 65, 84, 65, 56, 1, 0, 0, 64,151,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, + 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, +205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, + 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 56, 1, 0, 0, 0, 60,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,157,169, 5, - 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, - 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,232,158,169, 5, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, + 24, 66,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, +168, 67,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168, 67,223, 4, 0, 0, 0, 0, +125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, + 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0, + 40, 68,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0,104, 59,223, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76, 97,121,101,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232,158,169, 5, 0, 0, 0, 0,125, 1, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63, -143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104,159,169, 5, - 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0,168,150,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76, 97,121,101,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,166,169, 5, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, +216, 74,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7742,50 +7846,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, - 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 0,160,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 20,174,199, 62, + 20,174,199, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192, 68,223, 4, 0, 0, 0, 0, + 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, - 64, 1, 0, 0, 24,166,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191, -114, 97,255,186,168,167,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 68, 65, 84, 65, 64, 1, 0, 0,216, 74,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186, +224,255,127,191,114, 97,255,186,104, 76,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168,167,169, 5, - 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, - 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, - 96, 6, 0, 0, 40,168,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0,104,159,169, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76,105,103,104,116,101,110, 0, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, +104, 76,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, +215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 0, 0, 96, 6, 0, 0,232, 76,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168, 85,223, 4, 0, 0, 0, 0, + 40, 68,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 76,105,103,104,116,101, +110, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0,216,174,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 0,152, 83,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7818,49 +7922,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, -205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192,168,169, 5, - 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0, +102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, +128, 77,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216,174,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61,104,176,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152, 83,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, + 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 40, 85,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,104,176,169, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,232,176,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168,185,169, 5, - 0, 0, 0, 0, 40,168,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,105, -120, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 48, 0, 0, 0, 40, 85,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168, 85,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, +104, 94,223, 4, 0, 0, 0, 0,232, 76,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 77, 97,115,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152,183,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88, 92,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,168, 82, 99, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7893,50 +7997,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, - 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 56, 1, 0, 0,128,177,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,128, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, + 68, 65, 84, 65, 56, 1, 0, 0, 64, 86,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,183,169, 5, 0, 0, 0, 0,127, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, - 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 40,185,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88, 92,223, 4, 0, 0, 0, 0, +127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, + 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 44, 95,255,186,224,255,127,191, 23, 97,255,186,232, 93,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 40,185,169, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168,185,169, 5, 0, 0, 0, 0,131, 1, 0, 0, - 1, 0, 0, 0,104,194,169, 5, 0, 0, 0, 0,232,176,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 77,117,108,116,105,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,192,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232, 93,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104, 94,223, 4, 0, 0, 0, 0, +131, 1, 0, 0, 1, 0, 0, 0, 40,103,223, 4, 0, 0, 0, 0,168, 85,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,105,120, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,101,223, 4, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7968,49 +8071,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, -205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 64,186,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, + 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, +205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 0, 95,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,192,169, 5, - 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, - 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,232,193,169, 5, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, + 24,101,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, +168,102,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168,102,223, 4, 0, 0, 0, 0, +125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, + 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0, + 40,103,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0,104, 94,223, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 77,117,108,116,105,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232,193,169, 5, 0, 0, 0, 0,125, 1, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, - 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104,194,169, 5, - 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0,168,185,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 78,117,100,103,101, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,201,169, 5, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, +216,109,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8043,50 +8147,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, - 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 0,195,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, + 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192,103,223, 4, 0, 0, 0, 0, + 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, - 64, 1, 0, 0, 24,201,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191, -114, 97,255,186,168,202,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 68, 65, 84, 65, 64, 1, 0, 0,216,109,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, + 14,215,126,191, 46,189,194, 61,104,111,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168,202,169, 5, - 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, - 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, - 96, 6, 0, 0, 40,203,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0,104,194,169, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,105,110, 99,104, 47, 77, 97,103,110, -105,102,121, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0,216,209,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, +104,111,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, + 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 0, 0, 96, 6, 0, 0,232,111,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0, + 40,103,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 78,117,100,103,101, 0, + 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 0,152,118,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8119,49 +8223,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, -205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, - 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, 68, 65, 84, 65, 56, 1, 0, 0,192,203,169, 5, - 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0, +102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, + 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, +128,112,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216,209,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, - 46, 95,255,186,224,255,127,191,114, 97,255,186,104,211,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,118,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, +224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,120,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,104,211,169, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,232,211,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168,220,169, 5, - 0, 0, 0, 0, 40,203,169, 5, 0, 0, 0, 0,253, 21,192, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,111, -108,105,115,104, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 48, 0, 0, 0, 40,120,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168,120,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, +104,129,223, 4, 0, 0, 0, 0,232,111,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 80,105,110, 99,104, 47, 77, 97,103,110,105,102,121, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152,218,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,127,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8194,50 +8298,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 1, 0, 0, 0, 0, 10, 0, 0, 0, - 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, - 56, 1, 0, 0,128,212,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0,128, 62, 0, 0,128, 62, 0, 0,128, 62, + 68, 65, 84, 65, 56, 1, 0, 0, 64,121,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,218,169, 5, 0, 0, 0, 0,127, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, - 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,220,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,127,223, 4, 0, 0, 0, 0, +127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, + 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,232,128,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 40,220,169, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168,220,169, 5, 0, 0, 0, 0,131, 1, 0, 0, - 1, 0, 0, 0,104,229,169, 5, 0, 0, 0, 0,232,211,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 83, 99,114, 97,112,101, 47, 80,101, 97,107,115, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232,128,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104,129,223, 4, 0, 0, 0, 0, +131, 1, 0, 0, 1, 0, 0, 0, 40,138,223, 4, 0, 0, 0, 0,168,120,223, 4, 0, 0, 0, 0,253, 21,192, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 80,111,108,105,115,104, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,227,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,136,223, 4, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8269,49 +8372,51 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 64,221,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, + 4, 4, 4, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 63, +205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 0, 0,128, 62, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 0,130,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,227,169, 5, - 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, - 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,232,228,169, 5, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, + 24,136,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, +168,137,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168,137,223, 4, 0, 0, 0, 0, +125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, + 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0, + 40,138,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0,104,129,223, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99,114, 97,112,101, 47, 80,101, 97,107,115, 0, 48, + 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, +216,144,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232,228,169, 5, 0, 0, 0, 0,125, 1, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63, -143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104,229,169, 5, - 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0,168,220,169, 5, 0, 0, 0, 0,168,205,210, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99,117,108,112,116, 68,114, 97,119, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,236,169, 5, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8343,51 +8448,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, + 20,174,199, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0,192,138,223, 4, 0, 0, 0, 0, + 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, - 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0,160,119, 78, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, - 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 0,230,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, - 64, 1, 0, 0, 24,236,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191, -114, 97,255,186,168,237,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 68, 65, 84, 65, 64, 1, 0, 0,216,144,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186, +224,255,127,191,114, 97,255,186,104,146,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168,237,169, 5, - 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, - 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, - 96, 6, 0, 0, 40,238,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0,104,229,169, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109,101, 97,114, 0, 48, 48, 49, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, +104,146,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, +215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 0, 0, 96, 6, 0, 0,232,146,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, + 40,138,223, 4, 0, 0, 0, 0,168,205,210, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83, 99,117,108,112,116, + 68,114, 97,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0,216,244,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 0,152,153,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 8, 92,154,177, 30,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8420,49 +8524,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, -205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192,238,169, 5, - 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0, +102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0,160,119, 78, 63, + 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, +128,147,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216,244,169, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61,104,246,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,153,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, +224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,155,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,104,246,169, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,232,246,169, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168,255,169, 5, - 0, 0, 0, 0, 40,238,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109, -111,111,116,104, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 48, 0, 0, 0, 40,155,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168,155,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, +104,164,223, 4, 0, 0, 0, 0,232,146,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 83,109,101, 97,114, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152,253,169, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,162,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8495,50 +8599,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, - 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 62, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 56, 1, 0, 0,128,247,169, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 56, 1, 0, 0, 64,156,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,253,169, 5, 0, 0, 0, 0,127, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, - 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,255,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,162,223, 4, 0, 0, 0, 0, +127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, + 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,232,163,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 40,255,169, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168,255,169, 5, 0, 0, 0, 0,131, 1, 0, 0, - 1, 0, 0, 0,104, 8,170, 5, 0, 0, 0, 0,232,246,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 83,110, 97,107,101, 32, 72,111,111,107, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232,163,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104,164,223, 4, 0, 0, 0, 0, +131, 1, 0, 0, 1, 0, 0, 0, 40,173,223, 4, 0, 0, 0, 0,168,155,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,109,111,111,116,104, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88, 6,170, 5, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,171,223, 4, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8570,49 +8673,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 75, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 64, 0,170, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 35, 0, 0, 0, + 4, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, +205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 64, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 0,165,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88, 6,170, 5, - 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, - 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,232, 7,170, 5, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, + 24,171,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, +168,172,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168,172,223, 4, 0, 0, 0, 0, +125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, + 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0, + 40,173,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0,104,164,223, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,110, 97,107,101, 32, 72,111,111,107, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232, 7,170, 5, 0, 0, 0, 0,125, 1, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63, -143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104, 8,170, 5, - 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0,168,255,169, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,111,102,116,101,110, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24, 15,170, 5, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, +216,179,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8645,50 +8749,50 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 63, - 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 0, 9,170, 5, 0, 0, 0, 0, 25, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 63, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, + 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192,173,223, 4, 0, 0, 0, 0, + 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, - 64, 1, 0, 0, 24, 15,170, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, - 46,189,194, 61,168, 16,170, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 68, 65, 84, 65, 64, 1, 0, 0,216,179,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186, +224,255,127,191,114, 97,255,186,104,181,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168, 16,170, 5, - 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, - 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, - 96, 6, 0, 0, 40, 17,170, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0,104, 8,170, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,117, 98,116,114, 97, 99,116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, +104,181,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, +215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 0, 0, 96, 6, 0, 0,232,181,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, + 40,173,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 83,111,102,116,101,110, + 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0,216, 23,170, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 0,152,188,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8721,49 +8825,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63, -205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192, 17,170, 5, - 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0, +102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, +128,182,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,216, 23,170, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, - 54,189,194, 61, 14,215,126,191, 46,189,194, 61,104, 25,170, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,188,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, + 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61, 40,190,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 48, 0, 0, 0,104, 25,170, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,232, 25,170, 5, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,168, 34,170, 5, - 0, 0, 0, 0, 40, 17,170, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,101, -120, 68,114, 97,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 48, 0, 0, 0, 40,190,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168,190,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, +104,199,223, 4, 0, 0, 0, 0,232,181,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 83,117, 98,116,114, 97, 99,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,152, 32,170, 5, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88,197,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8796,50 +8900,49 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, - 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, - 56, 1, 0, 0,128, 26,170, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 63, 35, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 56, 1, 0, 0, 64,191,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152, 32,170, 5, 0, 0, 0, 0,127, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, - 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 40, 34,170, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88,197,223, 4, 0, 0, 0, 0, +127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, + 0, 0, 0, 0, 0, 0,128, 63, 14,215,126,191, 54,189,194, 61, 14,215,126,191, 46,189,194, 61,232,198,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, 40, 34,170, 5, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,168, 34,170, 5, 0, 0, 0, 0,131, 1, 0, 0, - 1, 0, 0, 0,104, 43,170, 5, 0, 0, 0, 0,232, 25,170, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66, 82, 84,104,117,109, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 88, 41,170, 5, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232,198,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, 31,133,107, 63, 0, 0, 0, 0, 0, 0, 64, 63, 10,215,163, 61, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104,199,223, 4, 0, 0, 0, 0, +131, 1, 0, 0, 1, 0, 0, 0, 40,208,223, 4, 0, 0, 0, 0,168,190,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,101,120, 68,114, 97,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24,206,223, 4, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8871,49 +8974,51 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 75, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 64, 35,170, 5, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 63, 35, 0, 0, 0, + 4, 4, 0, 8, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 51, 51, 51, 63, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, +205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 20,174,199, 62, + 20,174,199, 62, 0, 0,128, 63, 68, 65, 84, 65, 56, 1, 0, 0, 0,200,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, 88, 41,170, 5, - 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, - 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186,232, 42,170, 5, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0, + 24,206,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, +168,207,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168,207,223, 4, 0, 0, 0, 0, +125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, + 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0, + 40,208,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0,232,216,223, 4, 0, 0, 0, 0,104,199,223, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,104,117,109, 98, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,232, 42,170, 5, 0, 0, 0, 0,125, 1, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63, -143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 0, 0, 96, 6, 0, 0,104, 43,170, 5, - 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 34,170, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,119,105,115,116, 0, 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 24, 50,170, 5, - 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, +216,214,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -8945,62 +9050,55 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 63, 75, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, + 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0,192,208,223, 4, 0, 0, 0, 0, + 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, - 75, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0,102,102,102, 63,205,204,204, 61, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, 0, 44,170, 5, 0, 0, 0, 0, 25, 0, 0, 0, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, + 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, +128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63,205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, - 64, 1, 0, 0, 24, 50,170, 5, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186,224,255,127,191, -114, 97,255,186,168, 51,170, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, - 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0,168, 51,170, 5, - 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, - 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 85, 83, 69, 82, -112, 38, 0, 0,192,113, 10, 4, 0, 0, 0, 0,210, 0, 0, 0, 1, 0, 0, 0, 1, 8, 17, 1, 63, 6, 0, 0, 5, 0, 0, 0, - 47,116,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 68, 65, 84, 65, 64, 1, 0, 0,216,214,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63,224,255,127,191, 46, 95,255,186, +224,255,127,191,114, 97,255,186,104,216,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 48, 0, 0, 0, +104,216,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 62, +215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 82, 0, 0, 96, 6, 0, 0,232,216,223, 4, 0, 0, 0, 0,131, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40,208,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, 84,119,105,115,116, 0, + 48, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 0,152,223,223, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 0, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, 47, 0, 45,112,111,119,101,114,112, 99, 47, 98, -105,110, 47, 98,108,101,110,100,101,114, 46, 97,112,112, 47, 67,111,110,116,101,110,116,115, 47, 82,101,115,111,117,114, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9023,19 +9121,41 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 63, 75, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 0, 75, 0, 0, 0, +102,102,102, 63,205,204,204, 61, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,205,204,204, 62, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 62, + 0, 0,128, 62, 0, 0,128, 63, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 56, 1, 0, 0, +128,217,223, 4, 0, 0, 0, 0, 25, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, +205,204, 76, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 68, 65, 84, 65, 64, 1, 0, 0,152,223,223, 4, 0, 0, 0, 0,127, 1, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0,128, 63, 4, 0, 0, 0, 0, 0,128, 67, 0, 0, 0, 0, 0, 0,128, 63, +224,255,127,191, 46, 95,255,186,224,255,127,191,114, 97,255,186, 40,225,223, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 48, 0, 0, 0, 40,225,223, 4, 0, 0, 0, 0,125, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0,128, 62,215,163,112, 63, 0, 0, 0, 0, 0, 0, 64, 63,143,194,117, 61, 0, 0, 0, 0, 0, 0,128, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 85, 83, 69, 82,112, 32, 0, 0, 96, 25, 56, 3, 0, 0, 0, 0,211, 0, 0, 0, 1, 0, 0, 0, + 1, 8, 17, 1, 63, 6, 0, 0, 5, 0, 0, 0, 47,116,109,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9055,10 +9175,12 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 85,115,101,114,115, 47,116,111,110, 47, 68,101,115,107,116,111,112, + 47, 0, 45,112,111,119,101,114,112, 99, 47, 98,105,110, 47, 98,108,101,110,100,101,114, 46, 97,112,112, 47, 67,111,110,116,101, +110,116,115, 47, 82,101,115,111,117,114, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9080,6 +9202,7 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9111,6 +9234,7 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9151,7 +9275,6 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9159,6 +9282,7 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -9239,2500 +9363,2509 @@ char datatoc_startup_blend[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 35, 0, 0, 0, 2, 0, 94, 1, 8, 0, 0, 0, 3, 0, 0, 0, 56, 52, 39, 0, 0, 0, 0, 0, 1, 0, 2, 0, - 0, 8, 0, 0, 2, 0, 0, 0, 68,172, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, - 5, 0, 2, 0,232, 90,170, 5, 0, 0, 0, 0,232, 90,170, 5, 0, 0, 0, 0, 8, 79,133, 5, 0, 0, 0, 0, 8, 79,133, 5, - 0, 0, 0, 0,216,132,170, 5, 0, 0, 0, 0,216,132,170, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 44,169, 5, 0, 0, 0, 0, 56,132,170, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 2, 0, 25, 0, 0, 0, 20, 0, 20, 0, 1, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63, -205,204, 76, 63,205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 30, 90,100,191, -154,153,153, 62,102,102,102, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 31,250,254, 62, 9, 0, 0, 63,156,153, 25, 63, - 0, 0, 0, 0,205,204, 76, 62,205,204, 76, 62,205,204, 76, 62, 0, 0,128, 63, 44,135, 22, 63, 32,133,235, 62,184,243,125, 62, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,195, 73, 76, 63, 42,135, 86, 63, 0, 0,128, 63, 0, 0, 0, 0, 1, 43,135, 61, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 16, 47, 93, 62, 58,180,200,190, 24, 47, 93,190, 0, 0, 0, 0, 14, 0, 1, 0, - 25, 0, 15, 0,120, 0, 60, 0, 3, 0, 5, 0,128, 0, 0, 0, 0, 0, 0, 0,144, 31, 15, 0, 6, 0, 25, 0, 8, 0, 10, 0, -200, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 10, 0, 50, 0, 20, 0, 2, 0, 1, 0, 0, 0, 0, 0,128, 63, 60, 0, 0, 0, - 0, 0, 2, 0, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, - 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, - 0, 0, 0, 0, 68, 65, 84, 65,168, 36, 0, 0,232, 90,170, 5, 0, 0, 0, 0,207, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255, -255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255, -255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 86,128,194,255,255,255,255,255,255,255,255,255, - 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255, 0, 0, 0,255, -255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255, 90, 90, 90,255, 0, 0, 0,255, -255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255,153,153,153,255,128,128,128,255, 0, 0, 0,255, -255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, 70, 70, 70,255,255,255,255,255,255,255,255,255, -204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 63, 63, 63,255, 86,128,194,255,255,255,255,255, 0, 0, 0,255, - 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,100,100,100,255,160,160,160,255, -255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255,172,172,172,128,255,255,255,255, - 0, 0, 0,255, 1, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,255, 25, 25, 25,230, 45, 45, 45,230,100,100,100,255,255,255,255,255, -255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, 25, 25, 25,255,128,128,128,255,100,100,100,255, 25, 25, 25,255, 0, 0, 0,255, -255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50,180, 80, 80, 80,180,100,100,100,180,128,128,128,255, 0, 0, 0,255, -255,255,255,255, 1, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255,190,190,190,255,100,100,100,180, 68, 68, 68,255, 0, 0, 0,255, -255,255,255,255, 0, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 86,128,194,255, 0, 0, 0,255, 0, 0, 0,255, - 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,115,190, 76,255, 90,166, 51,255,240,235,100,255,215,211, 75,255,180, 0,255,255, -153, 0,230,255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 35, 0, 0, 0, 2, 0, 94, 1, 8, 0, 0, 0, 3, 0, 0, 0, + 56, 52, 39, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 8, 0, 0, 2, 0, 0, 0, 68,172, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, + 0, 1, 0, 0, 72, 0, 0, 0, 0, 0, 64, 0, 5, 0, 2, 0,104, 2,224, 4, 0, 0, 0, 0,104, 2,224, 4, 0, 0, 0, 0, +104, 51,191, 4, 0, 0, 0, 0,104, 51,191, 4, 0, 0, 0, 0,232, 44,224, 4, 0, 0, 0, 0,232, 44,224, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +216,206,222, 4, 0, 0, 0, 0, 72, 44,224, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 2, 0, 25, 0, 0, 0, 20, 0, 20, 0, + 1, 0, 0, 0, 0, 0, 0, 0,205,204, 76, 63,205,204, 76, 63,205,204, 76, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0,128, 63, 30, 90,100,191,154,153,153, 62,102,102,102, 63, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 31,250,254, 62, 9, 0, 0, 63,156,153, 25, 63, 0, 0, 0, 0,205,204, 76, 62,205,204, 76, 62,205,204, 76, 62, 0, 0,128, 63, + 44,135, 22, 63, 32,133,235, 62,184,243,125, 62, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,195, 73, 76, 63, 42,135, 86, 63, + 0, 0,128, 63, 0, 0, 0, 0, 1, 43,135, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 16, 47, 93, 62, 58,180,200,190, + 24, 47, 93,190, 0, 0, 0, 0, 14, 0, 1, 0, 25, 0, 15, 0,120, 0, 60, 0, 3, 0, 5, 0,128, 0, 0, 0, 0, 0, 0, 0, +144, 31, 15, 0, 6, 0, 25, 0, 8, 0, 10, 0,200, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 10, 0, 50, 0, 20, 0, 2, 0, + 1, 0, 0, 0, 0, 0,128, 63, 60, 0, 0, 0, 0, 0, 2, 0, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, 0, 0,128, 63, + 0, 0,128, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0,128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0,114,114,114,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,130,130,130,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,170, 64,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, - 32,255,255,255, 75, 75, 75,255,204, 0,153,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 32, 0, 0,255, 0, 32, 0,255, - 0, 0,128,255, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,255,255,255,255, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,200,200,200,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76,255, - 0, 0, 0, 0,250,250,250,255, 15, 15, 15,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,140, 25,255,250,250,250,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,130,130,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250,250,250,255, 0, 0, 0, 0, -250,250,250,255,250,250,250,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255,153, 64, 48,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, -240,175,144,255, 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0,255,255,133, 0,255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,116,116,116,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255, 32, 32,143,255, -109, 88,129,255, 78,152, 62,255, 46,143,143,255,169, 84,124,255,126,126, 80,255,162, 95,111,255,109,145,131,255,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0,255,255,255, 10,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 18, 66,176, 38, -255,133, 0,178,255,133, 0,127, 0,255, 0,255,255, 0, 0,255,225,210,195, 35, 0, 0, 0, 0, 0, 0, 0, 0,153,153,153,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,143,143,143,255,198,119,119,255,255, 0, 0,255, 64, 64, 64,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0,100, 0, 0,255, 0, 0,200,255,128, 0, 80,255, 95, 95, 0,255, 0,100, 50,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,127, 51, 76,130,135,140, 76,114,114,114,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, -255,255,255,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,255,255,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 5,155,155,155,160,100,104,111,255,111,106,100,255,104,106,117,255,105,117,110,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,100,100,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, -255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,128,255,255,255,255,255,255, 0,170, 0,255,220, 96, 96,255,220, 96, 96,255, - 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, - 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, - 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 94, 94, 94,255, 0, 0, 0,255, -241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,170, 64,255, - 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, - 32,255,255,255, 75, 75, 75,255,204, 0,153,255, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 32, 0, 0,255, 0, 32, 0,255, - 0, 0,128,255, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, - 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255,255,255,255,255, 0, 0, 0,255, -144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, - 0, 0, 0,255,255,255, 0,255, 4, 0, 0, 0,255,127,127, 0,255,255,255,255,255,255,255, 0,255,127, 0, 0,255,127,127,127, -255,200,200,200,255,255, 0, 0,255, 0, 0,255,255, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0,255, -189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0,247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, 30,145, 9,255, - 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0,169, 41, 78,255, -193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, 36,120, 90,255, - 60,149,121,255,111,182,171,255, 0, 0, 0, 0, 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0,244,201, 12,255, -238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0,111, 47,106,255, -152, 69,190,255,211, 48,214,255, 0, 0, 0, 0,108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0,141,141,141,255, -176,176,176,255,222,222,222,255, 0, 0, 0, 0,131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 0, 0, 0, 0, 8, 49, 14,255, - 28, 67, 11,255, 52, 98, 43,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,152, 44,169, 5, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0, 56, 45,169, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95, 51,100,115, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 68, 65, 84, 65, 48, 37, 0, 0,104, 2,224, 4, 0, 0, 0, 0, +208, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255, +100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,153,153,153,255, +100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255, +153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, + 86,128,194,255,255,255,255,255,255,255,255,255, 0, 0, 0,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 70, 70, 70,255, + 70, 70, 70,255,255,255,255,255, 0, 0, 0,255,255,255,255,255, 1, 0, 15, 0,241,255, 0, 0, 25, 25, 25,255,153,153,153,255, +100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255, +153,153,153,255, 90, 90, 90,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 25, 25, 25,255,180,180,180,255, +153,153,153,255,128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0,236,255, 0, 0, 0, 0, 0, 0, 0,255, 70, 70, 70,255, + 70, 70, 70,255,255,255,255,255,255,255,255,255,204,204,204,255, 1, 0, 15, 0,241,255, 0, 0, 0, 0, 0,255, 63, 63, 63,255, + 86,128,194,255,255,255,255,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 25, 25, 25,230, + 45, 45, 45,230,100,100,100,255,160,160,160,255,255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, + 86,128,194,255,172,172,172,128,255,255,255,255, 0, 0, 0,255, 1, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0,255, 25, 25, 25,230, + 45, 45, 45,230,100,100,100,255,255,255,255,255,255,255,255,255, 0, 0, 25, 0,236,255, 0, 0, 25, 25, 25,255,128,128,128,255, +100,100,100,255, 25, 25, 25,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50,180, 80, 80, 80,180, +100,100,100,180,128,128,128,255, 0, 0, 0,255,255,255,255,255, 1, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255,190,190,190,255, +100,100,100,180, 68, 68, 68,255, 0, 0, 0,255,255,255,255,255, 0, 0, 5, 0,251,255, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, + 86,128,194,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,115,190, 76,255, 90,166, 51,255, +240,235,100,255,215,211, 75,255,180, 0,255,255,153, 0,230,255, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 56, 45,169, 5, 0, 0, 0, 0,208, 0, 0, 0, - 1, 0, 0, 0,216,127,170, 5, 0, 0, 0, 0,152, 44,169, 5, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,102, 98,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,216,127,170, 5, - 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,120,128,170, 5, 0, 0, 0, 0, 56, 45,169, 5, 0, 0, 0, 0,105,111, 95, 97, -110,105,109, 95, 98,118,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 80, 0, 0, 0,120,128,170, 5, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0, 24,129,170, 5, 0, 0, 0, 0,216,127,170, 5, - 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 24,129,170, 5, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,184,129,170, 5, - 0, 0, 0, 0,120,128,170, 5, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,111, 98,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,184,129,170, 5, 0, 0, 0, 0,208, 0, 0, 0, - 1, 0, 0, 0, 88,130,170, 5, 0, 0, 0, 0, 24,129,170, 5, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,120, 51,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 88,130,170, 5, - 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,248,130,170, 5, 0, 0, 0, 0,184,129,170, 5, 0, 0, 0, 0,105,111, 95,109, -101,115,104, 95,115,116,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, - 80, 0, 0, 0,248,130,170, 5, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0,152,131,170, 5, 0, 0, 0, 0, 88,130,170, 5, - 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,117,118, 95,108, 97,121,111,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,152,131,170, 5, 0, 0, 0, 0,208, 0, 0, 0, 1, 0, 0, 0, 56,132,170, 5, - 0, 0, 0, 0,248,130,170, 5, 0, 0, 0, 0,105,111, 95, 99,117,114,118,101, 95,115,118,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 56,132,170, 5, 0, 0, 0, 0,208, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,131,170, 5, 0, 0, 0, 0, 99,121, 99,108,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,232, 0, 0, 0,216,132,170, 5, - 0, 0, 0, 0,200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97, -117,108,116, 32, 83,116,121,108,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,255,255, 0, 0,154,153, 25, 62, 0, 0,128, 63, 0, 0, 12, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,255,255, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 11, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,255,255, 0, 0,154,153, 25, 62, 0, 0,128, 63, 0, 0, 11, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0,128, 63, - 0, 0, 0, 0, 8, 0, 5, 0, 5, 0, 8, 0, 2, 0, 8, 0, 4, 0, 0, 0, 68, 78, 65, 49,124, 8, 1, 0,120,177,144, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 68, 78, 65, 78, 65, 77, 69, 99, 13, 0, 0, 42,110,101,120,116, 0, 42,112, -114,101,118, 0, 42,100, 97,116, 97, 0, 42,102,105,114,115,116, 0, 42,108, 97,115,116, 0,120, 0,121, 0,122, 0,120,109,105, -110, 0,120,109, 97,120, 0,121,109,105,110, 0,121,109, 97,120, 0, 42,112,111,105,110,116,101,114, 0,103,114,111,117,112, 0, -118, 97,108, 0,118, 97,108, 50, 0,116,121,112,101, 0,115,117, 98,116,121,112,101, 0,102,108, 97,103, 0,110, 97,109,101, 91, - 54, 52, 93, 0,115, 97,118,101,100, 0,100, 97,116, 97, 0,108,101,110, 0,116,111,116, 97,108,108,101,110, 0, 42,110,101,119, -105,100, 0, 42,108,105, 98, 0,110, 97,109,101, 91, 54, 54, 93, 0,112, 97,100, 0,117,115, 0,105, 99,111,110, 95,105,100, 0, -112, 97,100, 50, 0, 42,112,114,111,112,101,114,116,105,101,115, 0,105,100, 0, 42,105,100, 98,108,111, 99,107, 0, 42,102,105, -108,101,100, 97,116, 97, 0,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0,102,105,108,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, - 0, 42,112, 97,114,101,110,116, 0,119, 91, 50, 93, 0,104, 91, 50, 93, 0, 99,104, 97,110,103,101,100, 91, 50, 93, 0, 99,104, - 97,110,103,101,100, 95,116,105,109,101,115,116, 97,109,112, 91, 50, 93, 0, 42,114,101, 99,116, 91, 50, 93, 0, 42,111, 98, 0, - 98,108,111, 99,107,116,121,112,101, 0, 97,100,114, 99,111,100,101, 0,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 98,112, 0, - 42, 98,101,122,116, 0,109, 97,120,114, 99,116, 0,116,111,116,114, 99,116, 0,118, 97,114,116,121,112,101, 0,116,111,116,118, -101,114,116, 0,105,112,111, 0,101,120,116,114, 97,112, 0,114,116, 0, 98,105,116,109, 97,115,107, 0,115,108,105,100,101, 95, -109,105,110, 0,115,108,105,100,101, 95,109, 97,120, 0, 99,117,114,118, 97,108, 0, 42,100,114,105,118,101,114, 0, 99,117,114, -118,101, 0, 99,117,114, 0,115,104,111,119,107,101,121, 0,109,117,116,101,105,112,111, 0,112,111,115, 0,112, 97,100, 49, 0, -114,101,108, 97,116,105,118,101, 0,116,111,116,101,108,101,109, 0,117,105,100, 0, 42,119,101,105,103,104,116,115, 0,118,103, -114,111,117,112, 91, 54, 52, 93, 0,115,108,105,100,101,114,109,105,110, 0,115,108,105,100,101,114,109, 97,120, 0, 42, 97,100, -116, 0, 42,114,101,102,107,101,121, 0,101,108,101,109,115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105,122,101, 0, 98, -108,111, 99,107, 0, 42,105,112,111, 0, 42,102,114,111,109, 0,116,111,116,107,101,121, 0,115,108,117,114,112,104, 0, 99,116, -105,109,101, 0,117,105,100,103,101,110, 0, 42,108,105,110,101, 0, 42,102,111,114,109, 97,116, 0, 98,108,101,110, 0,108,105, -110,101,110,111, 0,115,116, 97,114,116, 0,101,110,100, 0,102,108, 97,103,115, 0, 99,111,108,111,114, 91, 52, 93, 0,112, 97, -100, 91, 52, 93, 0, 42,110, 97,109,101, 0,110,108,105,110,101,115, 0,108,105,110,101,115, 0, 42, 99,117,114,108, 0, 42,115, -101,108,108, 0, 99,117,114, 99, 0,115,101,108, 99, 0,109, 97,114,107,101,114,115, 0, 42,117,110,100,111, 95, 98,117,102, 0, -117,110,100,111, 95,112,111,115, 0,117,110,100,111, 95,108,101,110, 0, 42, 99,111,109,112,105,108,101,100, 0,109,116,105,109, -101, 0,115,105,122,101, 0,115,101,101,107, 0,100,116,120, 0,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 99, -108,105,112,115,116, 97, 0, 99,108,105,112,101,110,100, 0,108,101,110,115, 0,111,114,116,104,111, 95,115, 99, 97,108,101, 0, -100,114, 97,119,115,105,122,101, 0,115,101,110,115,111,114, 95,120, 0,115,101,110,115,111,114, 95,121, 0,115,104,105,102,116, -120, 0,115,104,105,102,116,121, 0, 89, 70, 95,100,111,102,100,105,115,116, 0, 42,100,111,102, 95,111, 98, 0,115,101,110,115, -111,114, 95,102,105,116, 0,112, 97,100, 91, 55, 93, 0, 42,115, 99,101,110,101, 0,102,114, 97,109,101,110,114, 0,102,114, 97, -109,101,115, 0,111,102,102,115,101,116, 0,115,102,114, 97, 0,102,105,101, 95,105,109, 97, 0, 99,121, 99,108, 0,111,107, 0, -109,117,108,116,105, 95,105,110,100,101,120, 0,108, 97,121,101,114, 0,112, 97,115,115, 0,105, 98,117,102,115, 0, 42,103,112, -117,116,101,120,116,117,114,101, 0, 42, 97,110,105,109, 0, 42,114,114, 0, 42,114,101,110,100,101,114,115, 91, 56, 93, 0,114, -101,110,100,101,114, 95,115,108,111,116, 0,108, 97,115,116, 95,114,101,110,100,101,114, 95,115,108,111,116, 0,115,111,117,114, - 99,101, 0,108, 97,115,116,102,114, 97,109,101, 0,116,112, 97,103,101,102,108, 97,103, 0,116,111,116, 98,105,110,100, 0,120, -114,101,112, 0,121,114,101,112, 0,116,119,115,116, 97, 0,116,119,101,110,100, 0, 98,105,110,100, 99,111,100,101, 0, 42,114, -101,112, 98,105,110,100, 0, 42,112, 97, 99,107,101,100,102,105,108,101, 0, 42,112,114,101,118,105,101,119, 0,108, 97,115,116, -117,112,100, 97,116,101, 0,108, 97,115,116,117,115,101,100, 0, 97,110,105,109,115,112,101,101,100, 0,103,101,110, 95,120, 0, -103,101,110, 95,121, 0,103,101,110, 95,116,121,112,101, 0,103,101,110, 95,102,108, 97,103, 0, 97,115,112,120, 0, 97,115,112, -121, 0,116,101,120, 99,111, 0,109, 97,112,116,111, 0,109, 97,112,116,111,110,101,103, 0, 98,108,101,110,100,116,121,112,101, - 0, 42,111, 98,106,101, 99,116, 0, 42,116,101,120, 0,117,118,110, 97,109,101, 91, 54, 52, 93, 0,112,114,111,106,120, 0,112, -114,111,106,121, 0,112,114,111,106,122, 0,109, 97,112,112,105,110,103, 0,111,102,115, 91, 51, 93, 0,115,105,122,101, 91, 51, - 93, 0,114,111,116, 0,116,101,120,102,108, 97,103, 0, 99,111,108,111,114,109,111,100,101,108, 0,112,109, 97,112,116,111, 0, -112,109, 97,112,116,111,110,101,103, 0,110,111,114,109, 97,112,115,112, 97, 99,101, 0,119,104,105, 99,104, 95,111,117,116,112, -117,116, 0, 98,114,117,115,104, 95,109, 97,112, 95,109,111,100,101, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97, -114, 0, 99,111,108,102, 97, 99, 0,118, 97,114,102, 97, 99, 0,110,111,114,102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, - 97,114,112,102, 97, 99, 0, 99,111,108,115,112,101, 99,102, 97, 99, 0,109,105,114,114,102, 97, 99, 0, 97,108,112,104, 97,102, - 97, 99, 0,100,105,102,102,102, 97, 99, 0,115,112,101, 99,102, 97, 99, 0,101,109,105,116,102, 97, 99, 0,104, 97,114,100,102, - 97, 99, 0,114, 97,121,109,105,114,114,102, 97, 99, 0,116,114, 97,110,115,108,102, 97, 99, 0, 97,109, 98,102, 97, 99, 0, 99, -111,108,101,109,105,116,102, 97, 99, 0, 99,111,108,114,101,102,108,102, 97, 99, 0, 99,111,108,116,114, 97,110,115,102, 97, 99, - 0,100,101,110,115,102, 97, 99, 0,115, 99, 97,116,116,101,114,102, 97, 99, 0,114,101,102,108,102, 97, 99, 0,116,105,109,101, -102, 97, 99, 0,108,101,110,103,116,104,102, 97, 99, 0, 99,108,117,109,112,102, 97, 99, 0,100, 97,109,112,102, 97, 99, 0,107, -105,110,107,102, 97, 99, 0,114,111,117,103,104,102, 97, 99, 0,112, 97,100,101,110,115,102, 97, 99, 0,103,114, 97,118,105,116, -121,102, 97, 99, 0,108,105,102,101,102, 97, 99, 0,115,105,122,101,102, 97, 99, 0,105,118,101,108,102, 97, 99, 0,102,105,101, -108,100,102, 97, 99, 0,115,104, 97,100,111,119,102, 97, 99, 0,122,101,110,117,112,102, 97, 99, 0,122,101,110,100,111,119,110, -102, 97, 99, 0, 98,108,101,110,100,102, 97, 99, 0, 42,104, 97,110,100,108,101, 0, 42,112,110, 97,109,101, 0, 42,115,116,110, - 97,109,101,115, 0,115,116,121,112,101,115, 0,118, 97,114,115, 0, 42,118, 97,114,115,116,114, 0, 42,114,101,115,117,108,116, - 0, 42, 99,102,114, 97, 0,100, 97,116, 97, 91, 51, 50, 93, 0, 40, 42,100,111,105,116, 41, 40, 41, 0, 40, 42,105,110,115,116, - 97,110, 99,101, 95,105,110,105,116, 41, 40, 41, 0, 40, 42, 99, 97,108,108, 98, 97, 99,107, 41, 40, 41, 0,118,101,114,115,105, -111,110, 0, 97, 0,116,111,116, 0,105,112,111,116,121,112,101, 0, 42,105,109, 97, 0, 42, 99,117, 98,101, 91, 54, 93, 0,105, -109, 97,116, 91, 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, 51, 93, 0,115,116,121,112,101, 0,118,105,101, -119,115, 99, 97,108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101,115, 0,100,101,112,116,104, 0,114,101, 99, 97, -108, 99, 0,108, 97,115,116,115,105,122,101, 0,102, 97,108,108,111,102,102, 95,116,121,112,101, 0,102, 97,108,108,111,102,102, - 95,115,111,102,116,110,101,115,115, 0,114, 97,100,105,117,115, 0, 99,111,108,111,114, 95,115,111,117,114, 99,101, 0,116,111, -116,112,111,105,110,116,115, 0,112,100,112, 97,100, 0,112,115,121,115, 0,112,115,121,115, 95, 99, 97, 99,104,101, 95,115,112, - 97, 99,101, 0,111, 98, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0, 42,112,111,105,110,116, 95,116,114,101,101, 0, 42, -112,111,105,110,116, 95,100, 97,116, 97, 0,110,111,105,115,101, 95,115,105,122,101, 0,110,111,105,115,101, 95,100,101,112,116, -104, 0,110,111,105,115,101, 95,105,110,102,108,117,101,110, 99,101, 0,110,111,105,115,101, 95, 98, 97,115,105,115, 0,112,100, -112, 97,100, 51, 91, 51, 93, 0,110,111,105,115,101, 95,102, 97, 99, 0,115,112,101,101,100, 95,115, 99, 97,108,101, 0,102, 97, -108,108,111,102,102, 95,115,112,101,101,100, 95,115, 99, 97,108,101, 0,112,100,112, 97,100, 50, 0, 42, 99,111, 98, 97, 0, 42, -102, 97,108,108,111,102,102, 95, 99,117,114,118,101, 0,114,101,115,111,108, 91, 51, 93, 0,105,110,116,101,114,112, 95,116,121, -112,101, 0,102,105,108,101, 95,102,111,114,109, 97,116, 0,101,120,116,101,110,100, 0,115,109,111,107,101,100, 95,116,121,112, -101, 0,105,110,116, 95,109,117,108,116,105,112,108,105,101,114, 0,115,116,105,108,108, 95,102,114, 97,109,101, 0,115,111,117, -114, 99,101, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0, 42,100, 97,116, 97,115,101,116, 0, 99, 97, 99,104,101,100,102,114, - 97,109,101, 0,111, 99,101, 97,110,109,111,100, 91, 54, 52, 93, 0,111,117,116,112,117,116, 0,110,111,105,115,101,115,105,122, -101, 0,116,117,114, 98,117,108, 0, 98,114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0,115, 97,116,117,114, 97,116, -105,111,110, 0,114,102, 97, 99, 0,103,102, 97, 99, 0, 98,102, 97, 99, 0,102,105,108,116,101,114,115,105,122,101, 0,109,103, - 95, 72, 0,109,103, 95,108, 97, 99,117,110, 97,114,105,116,121, 0,109,103, 95,111, 99,116, 97,118,101,115, 0,109,103, 95,111, -102,102,115,101,116, 0,109,103, 95,103, 97,105,110, 0,100,105,115,116, 95, 97,109,111,117,110,116, 0,110,115, 95,111,117,116, -115, 99, 97,108,101, 0,118,110, 95,119, 49, 0,118,110, 95,119, 50, 0,118,110, 95,119, 51, 0,118,110, 95,119, 52, 0,118,110, - 95,109,101,120,112, 0,118,110, 95,100,105,115,116,109, 0,118,110, 95, 99,111,108,116,121,112,101, 0,110,111,105,115,101,100, -101,112,116,104, 0,110,111,105,115,101,116,121,112,101, 0,110,111,105,115,101, 98, 97,115,105,115, 0,110,111,105,115,101, 98, - 97,115,105,115, 50, 0,105,109, 97,102,108, 97,103, 0, 99,114,111,112,120,109,105,110, 0, 99,114,111,112,121,109,105,110, 0, - 99,114,111,112,120,109, 97,120, 0, 99,114,111,112,121,109, 97,120, 0,116,101,120,102,105,108,116,101,114, 0, 97,102,109, 97, -120, 0,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0, 99,104,101, 99,107,101,114,100,105,115,116, 0,110, 97, - 98,108, 97, 0,105,117,115,101,114, 0, 42,110,111,100,101,116,114,101,101, 0, 42,112,108,117,103,105,110, 0, 42,101,110,118, - 0, 42,112,100, 0, 42,118,100, 0, 42,111,116, 0,117,115,101, 95,110,111,100,101,115, 0,108,111, 99, 91, 51, 93, 0,114,111, -116, 91, 51, 93, 0,109, 97,116, 91, 52, 93, 91, 52, 93, 0,109,105,110, 91, 51, 93, 0,109, 97,120, 91, 51, 93, 0, 99,111, 98, - 97, 0, 98,108,101,110,100, 95, 99,111,108,111,114, 91, 51, 93, 0, 98,108,101,110,100, 95,102, 97, 99,116,111,114, 0, 98,108, -101,110,100, 95,116,121,112,101, 0,112, 97,100, 91, 51, 93, 0,109,111,100,101, 0,116,111,116,101,120, 0,115,104,100,119,114, - 0,115,104,100,119,103, 0,115,104,100,119, 98, 0,115,104,100,119,112, 97,100, 0,101,110,101,114,103,121, 0,100,105,115,116, - 0,115,112,111,116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,104, 97,105,110,116, 0, 97,116,116, 49, 0, 97, -116,116, 50, 0, 42, 99,117,114,102, 97,108,108,111,102,102, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97, -115, 0,115,111,102,116, 0, 99,111,109,112,114,101,115,115,116,104,114,101,115,104, 0, 98,108,101,101,100, 98,105, 97,115, 0, -112, 97,100, 53, 91, 50, 93, 0, 98,117,102,115,105,122,101, 0,115, 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,105,108, -116,101,114,116,121,112,101, 0, 98,117,102,102,108, 97,103, 0, 98,117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,109,112, - 0,114, 97,121, 95,115, 97,109,112,121, 0,114, 97,121, 95,115, 97,109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,116,121, -112,101, 0, 97,114,101, 97, 95,115,104, 97,112,101, 0, 97,114,101, 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,105,122, -101,121, 0, 97,114,101, 97, 95,115,105,122,101,122, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0,114, 97,121, 95,115, - 97,109,112, 95,109,101,116,104,111,100, 0,115,104, 97,100,111,119,109, 97,112, 95,116,121,112,101, 0,116,101,120, 97, 99,116, - 0,115,104, 97,100,104, 97,108,111,115,116,101,112, 0,115,117,110, 95,101,102,102,101, 99,116, 95,116,121,112,101, 0,115,107, -121, 98,108,101,110,100,116,121,112,101, 0,104,111,114,105,122,111,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,112, -114,101, 97,100, 0,115,117,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,117,110, 95,115,105,122,101, 0, 98, 97, 99, -107,115, 99, 97,116,116,101,114,101,100, 95,108,105,103,104,116, 0,115,117,110, 95,105,110,116,101,110,115,105,116,121, 0, 97, -116,109, 95,116,117,114, 98,105,100,105,116,121, 0, 97,116,109, 95,105,110,115, 99, 97,116,116,101,114,105,110,103, 95,102, 97, - 99,116,111,114, 0, 97,116,109, 95,101,120,116,105,110, 99,116,105,111,110, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,100, -105,115,116, 97,110, 99,101, 95,102, 97, 99,116,111,114, 0,115,107,121, 98,108,101,110,100,102, 97, 99, 0,115,107,121, 95,101, -120,112,111,115,117,114,101, 0,115,104, 97,100,111,119, 95,102,114,117,115,116,117,109, 95,115,105,122,101, 0,115,107,121, 95, - 99,111,108,111,114,115,112, 97, 99,101, 0,112, 97,100, 52, 91, 50, 93, 0, 42,109,116,101,120, 91, 49, 56, 93, 0,112,114, 95, -116,101,120,116,117,114,101, 0,112, 97,100, 54, 91, 52, 93, 0,100,101,110,115,105,116,121, 0,101,109,105,115,115,105,111,110, - 0,115, 99, 97,116,116,101,114,105,110,103, 0,114,101,102,108,101, 99,116,105,111,110, 0,101,109,105,115,115,105,111,110, 95, - 99,111,108, 91, 51, 93, 0,116,114, 97,110,115,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,114,101,102,108,101, - 99,116,105,111,110, 95, 99,111,108, 91, 51, 93, 0,100,101,110,115,105,116,121, 95,115, 99, 97,108,101, 0,100,101,112,116,104, - 95, 99,117,116,111,102,102, 0, 97,115,121,109,109,101,116,114,121, 0,115,116,101,112,115,105,122,101, 95,116,121,112,101, 0, -115,104, 97,100,101,102,108, 97,103, 0,115,104, 97,100,101, 95,116,121,112,101, 0,112,114,101, 99, 97, 99,104,101, 95,114,101, -115,111,108,117,116,105,111,110, 0,115,116,101,112,115,105,122,101, 0,109,115, 95,100,105,102,102, 0,109,115, 95,105,110,116, -101,110,115,105,116,121, 0,109,115, 95,115,112,114,101, 97,100, 0, 97,108,112,104, 97, 95, 98,108,101,110,100, 0,102, 97, 99, -101, 95,111,114,105,101,110,116, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 95,116,121,112,101, 0,115,112,101, 99, -114, 0,115,112,101, 99,103, 0,115,112,101, 99, 98, 0,109,105,114,114, 0,109,105,114,103, 0,109,105,114, 98, 0, 97,109, 98, -114, 0, 97,109, 98, 98, 0, 97,109, 98,103, 0, 97,109, 98, 0,101,109,105,116, 0, 97,110,103, 0,115,112,101, 99,116,114, 97, - 0,114, 97,121, 95,109,105,114,114,111,114, 0, 97,108,112,104, 97, 0,114,101,102, 0,115,112,101, 99, 0,122,111,102,102,115, - 0, 97,100,100, 0,116,114, 97,110,115,108,117, 99,101,110, 99,121, 0,118,111,108, 0,103, 97,109,101, 0,102,114,101,115,110, -101,108, 95,109,105,114, 0,102,114,101,115,110,101,108, 95,109,105,114, 95,105, 0,102,114,101,115,110,101,108, 95,116,114, 97, - 0,102,114,101,115,110,101,108, 95,116,114, 97, 95,105, 0,102,105,108,116,101,114, 0,116,120, 95,108,105,109,105,116, 0,116, -120, 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95,100,101,112,116,104, 0,114, 97,121, 95,100,101,112,116,104, 95,116,114, - 97, 0,104, 97,114, 0,115,101,101,100, 49, 0,115,101,101,100, 50, 0,103,108,111,115,115, 95,109,105,114, 0,103,108,111,115, -115, 95,116,114, 97, 0,115, 97,109,112, 95,103,108,111,115,115, 95,109,105,114, 0,115, 97,109,112, 95,103,108,111,115,115, 95, -116,114, 97, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,109,105,114, 0, 97,100, 97,112,116, 95,116,104,114,101,115, -104, 95,116,114, 97, 0, 97,110,105,115,111, 95,103,108,111,115,115, 95,109,105,114, 0,100,105,115,116, 95,109,105,114, 0,102, - 97,100,101,116,111, 95,109,105,114, 0,115,104, 97,100,101, 95,102,108, 97,103, 0,109,111,100,101, 95,108, 0,102,108, 97,114, -101, 99, 0,115,116, 97,114, 99, 0,108,105,110,101, 99, 0,114,105,110,103, 99, 0,104, 97,115,105,122,101, 0,102,108, 97,114, -101,115,105,122,101, 0,115,117, 98,115,105,122,101, 0,102,108, 97,114,101, 98,111,111,115,116, 0,115,116,114, 97,110,100, 95, -115,116, 97, 0,115,116,114, 97,110,100, 95,101,110,100, 0,115,116,114, 97,110,100, 95,101, 97,115,101, 0,115,116,114, 97,110, -100, 95,115,117,114,102,110,111,114, 0,115,116,114, 97,110,100, 95,109,105,110, 0,115,116,114, 97,110,100, 95,119,105,100,116, -104,102, 97,100,101, 0,115,116,114, 97,110,100, 95,117,118,110, 97,109,101, 91, 54, 52, 93, 0,115, 98,105, 97,115, 0,108, 98, -105, 97,115, 0,115,104, 97,100, 95, 97,108,112,104, 97, 0,115,101,112,116,101,120, 0,114,103, 98,115,101,108, 0,112,114, 95, -116,121,112,101, 0,112,114, 95, 98, 97, 99,107, 0,112,114, 95,108, 97,109,112, 0,109,108, 95,102,108, 97,103, 0,100,105,102, -102, 95,115,104, 97,100,101,114, 0,115,112,101, 99, 95,115,104, 97,100,101,114, 0,114,111,117,103,104,110,101,115,115, 0,114, -101,102,114, 97, 99, 0,112, 97,114, 97,109, 91, 52, 93, 0,114,109,115, 0,100, 97,114,107,110,101,115,115, 0, 42,114, 97,109, -112, 95, 99,111,108, 0, 42,114, 97,109,112, 95,115,112,101, 99, 0,114, 97,109,112,105,110, 95, 99,111,108, 0,114, 97,109,112, -105,110, 95,115,112,101, 99, 0,114, 97,109,112, 98,108,101,110,100, 95, 99,111,108, 0,114, 97,109,112, 98,108,101,110,100, 95, -115,112,101, 99, 0,114, 97,109,112, 95,115,104,111,119, 0,112, 97,100, 51, 0,114, 97,109,112,102, 97, 99, 95, 99,111,108, 0, -114, 97,109,112,102, 97, 99, 95,115,112,101, 99, 0, 42,103,114,111,117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0, -114,101,102,108,101, 99,116, 0,102,104,100,105,115,116, 0,120,121,102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0, -115,115,115, 95,114, 97,100,105,117,115, 91, 51, 93, 0,115,115,115, 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114, -111,114, 0,115,115,115, 95,115, 99, 97,108,101, 0,115,115,115, 95,105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0, -115,115,115, 95,116,101,120,102, 97, 99, 0,115,115,115, 95,102,114,111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115, -115, 95,102,108, 97,103, 0,115,115,115, 95,112,114,101,115,101,116, 0,109, 97,112,116,111, 95,116,101,120,116,117,114,101,100, - 0,115,104, 97,100,111,119,111,110,108,121, 95,102,108, 97,103, 0,105,110,100,101,120, 0,103,112,117,109, 97,116,101,114,105, - 97,108, 0, 42, 98, 98, 0,115,101,108, 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,117, 97,116, 91, 52, 93, 0,101, -120,112,120, 0,101,120,112,121, 0,101,120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115, 0, 42,109, 97,116, 0, 42,105, -109, 97,116, 0,101,108,101,109,115, 0,100,105,115,112, 0, 42,101,100,105,116,101,108,101,109,115, 0, 42, 42,109, 97,116, 0, -102,108, 97,103, 50, 0,116,111,116, 99,111,108, 0,119,105,114,101,115,105,122,101, 0,114,101,110,100,101,114,115,105,122,101, - 0,116,104,114,101,115,104, 0, 42,108, 97,115,116,101,108,101,109, 0,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, - 0,119,101,105,103,104,116, 0,104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51, 0,104,105,100,101, 0,118,101, 99, 91, - 52, 93, 0,109, 97,116, 95,110,114, 0,112,110,116,115,117, 0,112,110,116,115,118, 0,114,101,115,111,108,117, 0,114,101,115, -111,108,118, 0,111,114,100,101,114,117, 0,111,114,100,101,114,118, 0,102,108, 97,103,117, 0,102,108, 97,103,118, 0, 42,107, -110,111,116,115,117, 0, 42,107,110,111,116,115,118, 0,116,105,108,116, 95,105,110,116,101,114,112, 0,114, 97,100,105,117,115, - 95,105,110,116,101,114,112, 0, 99,104, 97,114,105,100,120, 0,107,101,114,110, 0,119, 0,104, 0,110,117,114, 98,115, 0, 42, -107,101,121,105,110,100,101,120, 0,115,104, 97,112,101,110,114, 0,110,117,114, 98, 0, 42,101,100,105,116,110,117,114, 98, 0, - 42, 98,101,118,111, 98,106, 0, 42,116, 97,112,101,114,111, 98,106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101, 0, 42, -112, 97,116,104, 0, 42,107,101,121, 0, 98,101,118, 0,100,114, 97,119,102,108, 97,103, 0,116,119,105,115,116, 95,109,111,100, -101, 0,116,119,105,115,116, 95,115,109,111,111,116,104, 0,115,109, 97,108,108, 99, 97,112,115, 95,115, 99, 97,108,101, 0,112, - 97,116,104,108,101,110, 0, 98,101,118,114,101,115,111,108, 0,119,105,100,116,104, 0,101,120,116, 49, 0,101,120,116, 50, 0, -114,101,115,111,108,117, 95,114,101,110, 0,114,101,115,111,108,118, 95,114,101,110, 0, 97, 99,116,110,117, 0, 42,108, 97,115, -116,115,101,108, 0,115,112, 97, 99,101,109,111,100,101, 0,115,112, 97, 99,105,110,103, 0,108,105,110,101,100,105,115,116, 0, -115,104,101, 97,114, 0,102,115,105,122,101, 0,119,111,114,100,115,112, 97, 99,101, 0,117,108,112,111,115, 0,117,108,104,101, -105,103,104,116, 0,120,111,102, 0,121,111,102, 0,108,105,110,101,119,105,100,116,104, 0, 42,115,116,114, 0, 42,115,101,108, - 98,111,120,101,115, 0, 42,101,100,105,116,102,111,110,116, 0,102, 97,109,105,108,121, 91, 50, 52, 93, 0, 42,118,102,111,110, -116, 0, 42,118,102,111,110,116, 98, 0, 42,118,102,111,110,116,105, 0, 42,118,102,111,110,116, 98,105, 0,115,101,112, 99,104, - 97,114, 0,116,111,116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,116, 98, 0,115,101,108,115,116, 97,114,116, 0,115,101, -108,101,110,100, 0, 42,115,116,114,105,110,102,111, 0, 99,117,114,105,110,102,111, 0, 98,101,118,102, 97, 99, 49, 0, 98,101, -118,102, 97, 99, 50, 0, 42,109,115,101,108,101, 99,116, 0, 42,109,112,111,108,121, 0, 42,109,116,112,111,108,121, 0, 42,109, -108,111,111,112, 0, 42,109,108,111,111,112,117,118, 0, 42,109,108,111,111,112, 99,111,108, 0, 42,109,102, 97, 99,101, 0, 42, -109,116,102, 97, 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,118,101,114,116, 0, 42,109,101,100,103,101, 0, 42,100,118,101, -114,116, 0, 42,109, 99,111,108, 0, 42,109,115,116,105, 99,107,121, 0, 42,116,101,120, 99,111,109,101,115,104, 0, 42,101,100, -105,116, 95, 98,116,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,100, 97,116, 97, 0,112,100, 97,116, - 97, 0,108,100, 97,116, 97, 0,116,111,116,101,100,103,101, 0,116,111,116,102, 97, 99,101, 0,116,111,116,115,101,108,101, 99, -116, 0,116,111,116,112,111,108,121, 0,116,111,116,108,111,111,112, 0, 97, 99,116, 95,102, 97, 99,101, 0,115,109,111,111,116, -104,114,101,115,104, 0,115,117, 98,100,105,118, 0,115,117, 98,100,105,118,114, 0,115,117, 98,115,117,114,102,116,121,112,101, - 0,101,100,105,116,102,108, 97,103, 0, 42,109,114, 0, 42,116,112, 97,103,101, 0,117,118, 91, 52, 93, 91, 50, 93, 0, 99,111, -108, 91, 52, 93, 0,116,114, 97,110,115,112, 0,116,105,108,101, 0,117,110,119,114, 97,112, 0,118, 49, 0,118, 50, 0,118, 51, - 0,118, 52, 0,101,100, 99,111,100,101, 0, 99,114,101, 97,115,101, 0, 98,119,101,105,103,104,116, 0,100,101,102, 95,110,114, - 0, 42,100,119, 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,110,111, 91, 51, 93, 0,108,111,111,112,115, -116, 97,114,116, 0,118, 0,101, 0,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0, -116,111,116,100,105,115,112, 0,108,101,118,101,108, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0, 42,104,105,100,100,101,110, - 0,118, 91, 52, 93, 0,109,105,100, 0,112, 97,100, 91, 50, 93, 0,118, 91, 50, 93, 0, 42,102, 97, 99,101,115, 0, 42, 99,111, -108,102, 97, 99,101,115, 0, 42,101,100,103,101,115, 0, 42,118,101,114,116,115, 0,108,101,118,101,108,115, 0,108,101,118,101, -108, 95, 99,111,117,110,116, 0, 99,117,114,114,101,110,116, 0,110,101,119,108,118,108, 0,101,100,103,101,108,118,108, 0,112, -105,110,108,118,108, 0,114,101,110,100,101,114,108,118,108, 0,117,115,101, 95, 99,111,108, 0, 42,101,100,103,101, 95,102,108, - 97,103,115, 0, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 0,115,116, 97, 99,107,105,110,100,101,120, 0, 42,101,114, -114,111,114, 0,109,111,100,105,102,105,101,114, 0, 42,116,101,120,116,117,114,101, 0, 42,109, 97,112, 95,111, 98,106,101, 99, -116, 0,117,118,108, 97,121,101,114, 95,110, 97,109,101, 91, 54, 52, 93, 0,117,118,108, 97,121,101,114, 95,116,109,112, 0,116, -101,120,109, 97,112,112,105,110,103, 0,115,117, 98,100,105,118, 84,121,112,101, 0,114,101,110,100,101,114, 76,101,118,101,108, -115, 0, 42,101,109, 67, 97, 99,104,101, 0, 42,109, 67, 97, 99,104,101, 0,115,116,114,101,110,103,116,104, 0,100,101,102, 97, -120,105,115, 0,112, 97,100, 91, 54, 93, 0,108,101,110,103,116,104, 0,114, 97,110,100,111,109,105,122,101, 0,115,101,101,100, - 0, 42,111, 98, 95, 97,114,109, 0, 42,115,116, 97,114,116, 95, 99, 97,112, 0, 42,101,110,100, 95, 99, 97,112, 0, 42, 99,117, -114,118,101, 95,111, 98, 0, 42,111,102,102,115,101,116, 95,111, 98, 0,111,102,102,115,101,116, 91, 51, 93, 0,115, 99, 97,108, -101, 91, 51, 93, 0,109,101,114,103,101, 95,100,105,115,116, 0,102,105,116, 95,116,121,112,101, 0,111,102,102,115,101,116, 95, -116,121,112,101, 0, 99,111,117,110,116, 0, 97,120,105,115, 0,116,111,108,101,114, 97,110, 99,101, 0, 42,109,105,114,114,111, -114, 95,111, 98, 0,115,112,108,105,116, 95, 97,110,103,108,101, 0,118, 97,108,117,101, 0,114,101,115, 0,118, 97,108, 95,102, -108, 97,103,115, 0,108,105,109, 95,102,108, 97,103,115, 0,101, 95,102,108, 97,103,115, 0, 98,101,118,101,108, 95, 97,110,103, -108,101, 0,100,101,102,103,114,112, 95,110, 97,109,101, 91, 54, 52, 93, 0, 42,100,111,109, 97,105,110, 0, 42,102,108,111,119, - 0, 42, 99,111,108,108, 0,116,105,109,101, 0,100,105,114,101, 99,116,105,111,110, 0,109,105,100,108,101,118,101,108, 0, 42, -112,114,111,106,101, 99,116,111,114,115, 91, 49, 48, 93, 0, 42,105,109, 97,103,101, 0,110,117,109, 95,112,114,111,106,101, 99, -116,111,114,115, 0, 97,115,112,101, 99,116,120, 0, 97,115,112,101, 99,116,121, 0,115, 99, 97,108,101,120, 0,115, 99, 97,108, -101,121, 0,112,101,114, 99,101,110,116, 0,102, 97, 99,101, 67,111,117,110,116, 0,102, 97, 99, 0,114,101,112,101, 97,116, 0, - 42,111, 98,106,101, 99,116, 99,101,110,116,101,114, 0,115,116, 97,114,116,120, 0,115,116, 97,114,116,121, 0,104,101,105,103, -104,116, 0,110, 97,114,114,111,119, 0,115,112,101,101,100, 0,100, 97,109,112, 0,102, 97,108,108,111,102,102, 0,116,105,109, -101,111,102,102,115, 0,108,105,102,101,116,105,109,101, 0,100,101,102,111,114,109,102,108, 97,103, 0,109,117,108,116,105, 0, - 42,112,114,101,118, 67,111,115, 0,115,117, 98,116, 97,114,103,101,116, 91, 54, 52, 93, 0,112, 97,114,101,110,116,105,110,118, - 91, 52, 93, 91, 52, 93, 0, 99,101,110,116, 91, 51, 93, 0, 42,105,110,100,101,120, 97,114, 0,116,111,116,105,110,100,101,120, - 0,102,111,114, 99,101, 0, 42, 99,108,111,116,104, 79, 98,106,101, 99,116, 0, 42,115,105,109, 95,112, 97,114,109,115, 0, 42, - 99,111,108,108, 95,112, 97,114,109,115, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 0,112,116, 99, 97, 99,104,101,115, - 0, 42,120, 0, 42,120,110,101,119, 0, 42,120,111,108,100, 0, 42, 99,117,114,114,101,110,116, 95,120,110,101,119, 0, 42, 99, -117,114,114,101,110,116, 95,120, 0, 42, 99,117,114,114,101,110,116, 95,118, 0, 42,109,102, 97, 99,101,115, 0,110,117,109,118, -101,114,116,115, 0,110,117,109,102, 97, 99,101,115, 0,116,105,109,101, 95,120, 0,116,105,109,101, 95,120,110,101,119, 0, 42, - 98,118,104,116,114,101,101, 0, 42,118, 0, 42,100,109, 0, 99,102,114, 97, 0,111,112,101,114, 97,116,105,111,110, 0,118,101, -114,116,101,120, 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,100,115,105,122,101, 0, 42, 98,105,110,100, -105,110,102,108,117,101,110, 99,101,115, 0, 42, 98,105,110,100,111,102,102,115,101,116,115, 0, 42, 98,105,110,100, 99, 97,103, -101, 99,111,115, 0,116,111,116, 99, 97,103,101,118,101,114,116, 0, 42,100,121,110,103,114,105,100, 0, 42,100,121,110,105,110, -102,108,117,101,110, 99,101,115, 0, 42,100,121,110,118,101,114,116,115, 0, 42,112, 97,100, 50, 0,100,121,110,103,114,105,100, -115,105,122,101, 0,100,121,110, 99,101,108,108,109,105,110, 91, 51, 93, 0,100,121,110, 99,101,108,108,119,105,100,116,104, 0, - 98,105,110,100,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42, 98,105,110,100,119,101,105,103,104,116,115, 0, 42, 98,105,110,100, - 99,111,115, 0, 40, 42, 98,105,110,100,102,117,110, 99, 41, 40, 41, 0, 42,112,115,121,115, 0,116,111,116,100,109,118,101,114, -116, 0,116,111,116,100,109,101,100,103,101, 0,116,111,116,100,109,102, 97, 99,101, 0,112,111,115,105,116,105,111,110, 0,114, - 97,110,100,111,109, 95,112,111,115,105,116,105,111,110, 0, 42,102, 97, 99,101,112, 97, 0,118,103,114,111,117,112, 0,112,114, -111,116,101, 99,116, 0,108,118,108, 0,115, 99,117,108,112,116,108,118,108, 0,116,111,116,108,118,108, 0,115,105,109,112,108, -101, 0, 42,102,115,115, 0, 42,116, 97,114,103,101,116, 0, 42, 97,117,120, 84, 97,114,103,101,116, 0,118,103,114,111,117,112, - 95,110, 97,109,101, 91, 54, 52, 93, 0,107,101,101,112, 68,105,115,116, 0,115,104,114,105,110,107, 84,121,112,101, 0,115,104, -114,105,110,107, 79,112,116,115, 0,112,114,111,106, 65,120,105,115, 0,115,117, 98,115,117,114,102, 76,101,118,101,108,115, 0, - 42,111,114,105,103,105,110, 0,102, 97, 99,116,111,114, 0,108,105,109,105,116, 91, 50, 93, 0,111,114,105,103,105,110, 79,112, -116,115, 0,111,102,102,115,101,116, 95,102, 97, 99, 0,111,102,102,115,101,116, 95,102, 97, 99, 95,118,103, 0, 99,114,101, 97, -115,101, 95,105,110,110,101,114, 0, 99,114,101, 97,115,101, 95,111,117,116,101,114, 0, 99,114,101, 97,115,101, 95,114,105,109, - 0,109, 97,116, 95,111,102,115, 0,109, 97,116, 95,111,102,115, 95,114,105,109, 0, 42,111, 98, 95, 97,120,105,115, 0,115,116, -101,112,115, 0,114,101,110,100,101,114, 95,115,116,101,112,115, 0,105,116,101,114, 0,115, 99,114,101,119, 95,111,102,115, 0, - 97,110,103,108,101, 0, 42,111, 99,101, 97,110, 0, 42,111, 99,101, 97,110, 99, 97, 99,104,101, 0,114,101,115,111,108,117,116, -105,111,110, 0,115,112, 97,116,105, 97,108, 95,115,105,122,101, 0,119,105,110,100, 95,118,101,108,111, 99,105,116,121, 0,115, -109, 97,108,108,101,115,116, 95,119, 97,118,101, 0,119, 97,118,101, 95, 97,108,105,103,110,109,101,110,116, 0,119, 97,118,101, - 95,100,105,114,101, 99,116,105,111,110, 0,119, 97,118,101, 95,115, 99, 97,108,101, 0, 99,104,111,112, 95, 97,109,111,117,110, -116, 0,102,111, 97,109, 95, 99,111,118,101,114, 97,103,101, 0, 98, 97,107,101,115,116, 97,114,116, 0, 98, 97,107,101,101,110, -100, 0, 99, 97, 99,104,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,102,111, 97,109,108, 97,121,101,114,110, 97,109,101, 91, - 54, 52, 93, 0, 99, 97, 99,104,101,100, 0,103,101,111,109,101,116,114,121, 95,109,111,100,101, 0,114,101,102,114,101,115,104, - 0,114,101,112,101, 97,116, 95,120, 0,114,101,112,101, 97,116, 95,121, 0,102,111, 97,109, 95,102, 97,100,101, 0, 42,111, 98, -106,101, 99,116, 95,102,114,111,109, 0, 42,111, 98,106,101, 99,116, 95,116,111, 0,102, 97,108,108,111,102,102, 95,114, 97,100, -105,117,115, 0,101,100,105,116, 95,102,108, 97,103,115, 0,100,101,102, 97,117,108,116, 95,119,101,105,103,104,116, 0, 42, 99, -109, 97,112, 95, 99,117,114,118,101, 0, 97,100,100, 95,116,104,114,101,115,104,111,108,100, 0,114,101,109, 95,116,104,114,101, -115,104,111,108,100, 0,109, 97,115,107, 95, 99,111,110,115,116, 97,110,116, 0,109, 97,115,107, 95,100,101,102,103,114,112, 95, -110, 97,109,101, 91, 54, 52, 93, 0,109, 97,115,107, 95,116,101,120, 95,117,115,101, 95, 99,104, 97,110,110,101,108, 0, 42,109, - 97,115,107, 95,116,101,120,116,117,114,101, 0, 42,109, 97,115,107, 95,116,101,120, 95,109, 97,112, 95,111, 98,106, 0,109, 97, -115,107, 95,116,101,120, 95,109, 97,112,112,105,110,103, 0,109, 97,115,107, 95,116,101,120, 95,117,118,108, 97,121,101,114, 95, -110, 97,109,101, 91, 54, 52, 93, 0,112, 97,100, 95,105, 49, 0,100,101,102,103,114,112, 95,110, 97,109,101, 95, 97, 91, 54, 52, - 93, 0,100,101,102,103,114,112, 95,110, 97,109,101, 95, 98, 91, 54, 52, 93, 0,100,101,102, 97,117,108,116, 95,119,101,105,103, -104,116, 95, 97, 0,100,101,102, 97,117,108,116, 95,119,101,105,103,104,116, 95, 98, 0,109,105,120, 95,109,111,100,101, 0,109, -105,120, 95,115,101,116, 0,112, 97,100, 95, 99, 49, 91, 54, 93, 0,112,114,111,120,105,109,105,116,121, 95,109,111,100,101, 0, -112,114,111,120,105,109,105,116,121, 95,102,108, 97,103,115, 0, 42,112,114,111,120,105,109,105,116,121, 95,111, 98, 95,116, 97, -114,103,101,116, 0,109,105,110, 95,100,105,115,116, 0,109, 97,120, 95,100,105,115,116, 0,112, 97,100, 95,115, 49, 0, 42, 99, - 97,110,118, 97,115, 0, 42, 98,114,117,115,104, 0,116,104,114,101,115,104,111,108,100, 0,115, 99, 97,108,101, 0,104,101,114, -109,105,116,101, 95,110,117,109, 0, 42,108, 97,116,116, 0,112,110,116,115,119, 0,111,112,110,116,115,117, 0,111,112,110,116, -115,118, 0,111,112,110,116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118, 0,116,121,112,101,119, 0,102,117, 0,102, -118, 0,102,119, 0,100,117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0, 42,108, 97,116,116,105, 99,101,100, 97,116, 97, 0, -108, 97,116,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42,101,100,105,116,108, 97,116,116, 0,118,101, 99, 91, 56, 93, 91, 51, 93, - 0, 42,115, 99,117,108,112,116, 0,112, 97,114,116,121,112,101, 0,112, 97,114, 49, 0,112, 97,114, 50, 0,112, 97,114, 51, 0, -112, 97,114,115,117, 98,115,116,114, 91, 54, 52, 93, 0, 42,116,114, 97, 99,107, 0, 42,112,114,111,120,121, 0, 42,112,114,111, -120,121, 95,103,114,111,117,112, 0, 42,112,114,111,120,121, 95,102,114,111,109, 0, 42, 97, 99,116,105,111,110, 0, 42,112,111, -115,101,108,105, 98, 0, 42,112,111,115,101, 0, 42,103,112,100, 0, 97,118,115, 0, 42,109,112, 97,116,104, 0, 99,111,110,115, -116,114, 97,105,110,116, 67,104, 97,110,110,101,108,115, 0,101,102,102,101, 99,116, 0,100,101,102, 98, 97,115,101, 0,109,111, -100,105,102,105,101,114,115, 0,114,101,115,116,111,114,101, 95,109,111,100,101, 0, 42,109, 97,116, 98,105,116,115, 0, 97, 99, -116, 99,111,108, 0,100,108,111, 99, 91, 51, 93, 0,111,114,105,103, 91, 51, 93, 0,100,115,105,122,101, 91, 51, 93, 0,100,115, - 99, 97,108,101, 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,100,113,117, 97,116, 91, 52, 93, 0,114,111,116, 65,120,105,115, - 91, 51, 93, 0,100,114,111,116, 65,120,105,115, 91, 51, 93, 0,114,111,116, 65,110,103,108,101, 0,100,114,111,116, 65,110,103, -108,101, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105,110,118, 91, 52, 93, 91, 52, 93, 0,105,109, - 97,116, 95,114,101,110, 91, 52, 93, 91, 52, 93, 0,108, 97,121, 0,112, 97,100, 54, 0, 99,111,108, 98,105,116,115, 0,116,114, - 97,110,115,102,108, 97,103, 0,112,114,111,116,101, 99,116,102,108, 97,103, 0,116,114, 97, 99,107,102,108, 97,103, 0,117,112, -102,108, 97,103, 0,110,108, 97,102,108, 97,103, 0,105,112,111,102,108, 97,103, 0,115, 99, 97,102,108, 97,103, 0,115, 99, 97, -118,105,115,102,108, 97,103, 0,112, 97,100, 53, 0,100,117,112,111,110, 0,100,117,112,111,102,102, 0,100,117,112,115,116, 97, - 0,100,117,112,101,110,100, 0,115,102, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0,105,110,101,114,116,105, 97, 0, -102,111,114,109,102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,109, 97,114,103,105,110, 0,109, 97,120, 95,118, -101,108, 0,109,105,110, 95,118,101,108, 0,109, 95, 99,111,110,116, 97, 99,116, 80,114,111, 99,101,115,115,105,110,103, 84,104, -114,101,115,104,111,108,100, 0,111, 98,115,116, 97, 99,108,101, 82, 97,100, 0,114,111,116,109,111,100,101, 0, 98,111,117,110, -100,116,121,112,101, 0, 99,111,108,108,105,115,105,111,110, 95, 98,111,117,110,100,116,121,112,101, 0,114,101,115,116,114,105, - 99,116,102,108, 97,103, 0,100,116, 0,101,109,112,116,121, 95,100,114, 97,119,116,121,112,101, 0,101,109,112,116,121, 95,100, -114, 97,119,115,105,122,101, 0,100,117,112,102, 97, 99,101,115, 99, 97, 0,112,114,111,112, 0,115,101,110,115,111,114,115, 0, - 99,111,110,116,114,111,108,108,101,114,115, 0, 97, 99,116,117, 97,116,111,114,115, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, - 97, 99,116,100,101,102, 0,103, 97,109,101,102,108, 97,103, 0,103, 97,109,101,102,108, 97,103, 50, 0, 42, 98,115,111,102,116, - 0,115,111,102,116,102,108, 97,103, 0, 97,110,105,115,111,116,114,111,112,105, 99, 70,114,105, 99,116,105,111,110, 91, 51, 93, - 0, 99,111,110,115,116,114, 97,105,110,116,115, 0,110,108, 97,115,116,114,105,112,115, 0,104,111,111,107,115, 0,112, 97,114, -116,105, 99,108,101,115,121,115,116,101,109, 0, 42,115,111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0, 98,111,100, -121, 95,116,121,112,101, 0,115,104, 97,112,101,102,108, 97,103, 0, 42,102,108,117,105,100,115,105,109, 83,101,116,116,105,110, -103,115, 0, 42,100,101,114,105,118,101,100, 68,101,102,111,114,109, 0, 42,100,101,114,105,118,101,100, 70,105,110, 97,108, 0, -108, 97,115,116, 68, 97,116, 97, 77, 97,115,107, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0,115,116, 97, -116,101, 0,105,110,105,116, 95,115,116, 97,116,101, 0,103,112,117,108, 97,109,112, 0,112, 99, 95,105,100,115, 0, 42,100,117, -112,108,105,108,105,115,116, 0,105,109, 97, 95,111,102,115, 91, 50, 93, 0, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105, -118,101, 0,111,114,105,103,108, 97,121, 0,111,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111,114, 99,111, 91, 51, 93, 0,110,111, - 95,100,114, 97,119, 0, 97,110,105,109, 97,116,101,100, 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102,105,101,108, -100, 0,115,104, 97,112,101, 0,116,101,120, 95,109,111,100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120,105,115, 0, -122,100,105,114, 0,102, 95,115,116,114,101,110,103,116,104, 0,102, 95,100, 97,109,112, 0,102, 95,102,108,111,119, 0,102, 95, -115,105,122,101, 0,102, 95,112,111,119,101,114, 0,109, 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,102, 95,112, -111,119,101,114, 95,114, 0,109, 97,120,114, 97,100, 0,109,105,110,114, 97,100, 0,112,100,101,102, 95,100, 97,109,112, 0,112, -100,101,102, 95,114,100, 97,109,112, 0,112,100,101,102, 95,112,101,114,109, 0,112,100,101,102, 95,102,114,105, 99,116, 0,112, -100,101,102, 95,114,102,114,105, 99,116, 0,112,100,101,102, 95,115,116,105, 99,107,110,101,115,115, 0, 97, 98,115,111,114,112, -116,105,111,110, 0,112,100,101,102, 95,115, 98,100, 97,109,112, 0,112,100,101,102, 95,115, 98,105,102,116, 0,112,100,101,102, - 95,115, 98,111,102,116, 0, 99,108,117,109,112, 95,102, 97, 99, 0, 99,108,117,109,112, 95,112,111,119, 0,107,105,110,107, 95, -102,114,101,113, 0,107,105,110,107, 95,115,104, 97,112,101, 0,107,105,110,107, 95, 97,109,112, 0,102,114,101,101, 95,101,110, -100, 0,116,101,120, 95,110, 97, 98,108, 97, 0, 42,114,110,103, 0,102, 95,110,111,105,115,101, 0,119,101,105,103,104,116, 91, - 49, 51, 93, 0,103,108,111, 98, 97,108, 95,103,114, 97,118,105,116,121, 0,114,116, 91, 51, 93, 0,116,111,116,100, 97,116, 97, - 0,102,114, 97,109,101, 0,116,111,116,112,111,105,110,116, 0,100, 97,116, 97, 95,116,121,112,101,115, 0, 42,100, 97,116, 97, - 91, 56, 93, 0, 42, 99,117,114, 91, 56, 93, 0,101,120,116,114, 97,100, 97,116, 97, 0,115,116,101,112, 0,115,105,109,102,114, - 97,109,101, 0,115,116, 97,114,116,102,114, 97,109,101, 0,101,110,100,102,114, 97,109,101, 0,101,100,105,116,102,114, 97,109, -101, 0,108, 97,115,116, 95,101,120, 97, 99,116, 0,108, 97,115,116, 95,118, 97,108,105,100, 0, 99,111,109,112,114,101,115,115, -105,111,110, 0,112,114,101,118, 95,110, 97,109,101, 91, 54, 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,112, 97,116,104, 91, - 49, 48, 50, 52, 93, 0, 42, 99, 97, 99,104,101,100, 95,102,114, 97,109,101,115, 0,109,101,109, 95, 99, 97, 99,104,101, 0, 42, -101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100,105,116, 41, 40, 41, 0,108,105,110, 83,116,105,102,102, 0, 97,110,103, - 83,116,105,102,102, 0,118,111,108,117,109,101, 0,118,105,116,101,114, 97,116,105,111,110,115, 0,112,105,116,101,114, 97,116, -105,111,110,115, 0,100,105,116,101,114, 97,116,105,111,110,115, 0, 99,105,116,101,114, 97,116,105,111,110,115, 0,107, 83, 82, - 72, 82, 95, 67, 76, 0,107, 83, 75, 72, 82, 95, 67, 76, 0,107, 83, 83, 72, 82, 95, 67, 76, 0,107, 83, 82, 95, 83, 80, 76, 84, - 95, 67, 76, 0,107, 83, 75, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 83, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 86, 67, 70, - 0,107, 68, 80, 0,107, 68, 71, 0,107, 76, 70, 0,107, 80, 82, 0,107, 86, 67, 0,107, 68, 70, 0,107, 77, 84, 0,107, 67, 72, - 82, 0,107, 75, 72, 82, 0,107, 83, 72, 82, 0,107, 65, 72, 82, 0, 99,111,108,108,105,115,105,111,110,102,108, 97,103,115, 0, -110,117,109, 99,108,117,115,116,101,114,105,116,101,114, 97,116,105,111,110,115, 0,119,101,108,100,105,110,103, 0,116,111,116, -115,112,114,105,110,103, 0, 42, 98,112,111,105,110,116, 0, 42, 98,115,112,114,105,110,103, 0,109,115,103, 95,108,111, 99,107, - 0,109,115,103, 95,118, 97,108,117,101, 0,110,111,100,101,109, 97,115,115, 0,110, 97,109,101,100, 86, 71, 95, 77, 97,115,115, - 91, 54, 52, 93, 0,103,114, 97,118, 0,109,101,100,105, 97,102,114,105, 99,116, 0,114,107,108,105,109,105,116, 0,112,104,121, -115,105, 99,115, 95,115,112,101,101,100, 0,103,111, 97,108,115,112,114,105,110,103, 0,103,111, 97,108,102,114,105, 99,116, 0, -109,105,110,103,111, 97,108, 0,109, 97,120,103,111, 97,108, 0,100,101,102,103,111, 97,108, 0,118,101,114,116,103,114,111,117, -112, 0,110, 97,109,101,100, 86, 71, 95, 83,111,102,116,103,111, 97,108, 91, 54, 52, 93, 0,102,117,122,122,121,110,101,115,115, - 0,105,110,115,112,114,105,110,103, 0,105,110,102,114,105, 99,116, 0,110, 97,109,101,100, 86, 71, 95, 83,112,114,105,110,103, - 95, 75, 91, 54, 52, 93, 0,101,102,114, 97, 0,105,110,116,101,114,118, 97,108, 0,108,111, 99, 97,108, 0,115,111,108,118,101, -114,102,108, 97,103,115, 0, 42, 42,107,101,121,115, 0,116,111,116,112,111,105,110,116,107,101,121, 0,115,101, 99,111,110,100, -115,112,114,105,110,103, 0, 99,111,108, 98, 97,108,108, 0, 98, 97,108,108,100, 97,109,112, 0, 98, 97,108,108,115,116,105,102, -102, 0,115, 98, 99, 95,109,111,100,101, 0, 97,101,114,111,101,100,103,101, 0,109,105,110,108,111,111,112,115, 0,109, 97,120, -108,111,111,112,115, 0, 99,104,111,107,101, 0,115,111,108,118,101,114, 95, 73, 68, 0,112,108, 97,115,116,105, 99, 0,115,112, -114,105,110,103,112,114,101,108,111, 97,100, 0, 42,115, 99,114, 97,116, 99,104, 0,115,104,101, 97,114,115,116,105,102,102, 0, -105,110,112,117,115,104, 0, 42,112,111,105,110,116, 99, 97, 99,104,101, 0, 42,101,102,102,101, 99,116,111,114, 95,119,101,105, -103,104,116,115, 0,108, 99,111,109, 91, 51, 93, 0,108,114,111,116, 91, 51, 93, 91, 51, 93, 0,108,115, 99, 97,108,101, 91, 51, - 93, 91, 51, 93, 0,108, 97,115,116, 95,102,114, 97,109,101, 0,118,101,108, 91, 51, 93, 0, 42,102,109,100, 0,115,104,111,119, - 95, 97,100,118, 97,110, 99,101,100,111,112,116,105,111,110,115, 0,114,101,115,111,108,117,116,105,111,110,120,121,122, 0,112, -114,101,118,105,101,119,114,101,115,120,121,122, 0,114,101, 97,108,115,105,122,101, 0,103,117,105, 68,105,115,112,108, 97,121, - 77,111,100,101, 0,114,101,110,100,101,114, 68,105,115,112,108, 97,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, - 86, 97,108,117,101, 0,118,105,115, 99,111,115,105,116,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 69,120,112, -111,110,101,110,116, 0,103,114, 97,118, 91, 51, 93, 0, 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100, 0, - 98, 97,107,101, 83,116, 97,114,116, 0, 98, 97,107,101, 69,110,100, 0,102,114, 97,109,101, 79,102,102,115,101,116, 0,103,115, -116, 97,114, 0,109, 97,120, 82,101,102,105,110,101, 0,105,110,105, 86,101,108,120, 0,105,110,105, 86,101,108,121, 0,105,110, -105, 86,101,108,122, 0, 42,111,114,103, 77,101,115,104, 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, - 97,116,104, 91, 49, 48, 50, 52, 93, 0, 98, 98, 83,116, 97,114,116, 91, 51, 93, 0, 98, 98, 83,105,122,101, 91, 51, 93, 0,116, -121,112,101, 70,108, 97,103,115, 0,100,111,109, 97,105,110, 78,111,118,101, 99,103,101,110, 0,118,111,108,117,109,101, 73,110, -105,116, 84,121,112,101, 0,112, 97,114,116, 83,108,105,112, 86, 97,108,117,101, 0,103,101,110,101,114, 97,116,101, 84,114, 97, - 99,101,114,115, 0,103,101,110,101,114, 97,116,101, 80, 97,114,116,105, 99,108,101,115, 0,115,117,114,102, 97, 99,101, 83,109, -111,111,116,104,105,110,103, 0,115,117,114,102, 97, 99,101, 83,117, 98,100,105,118,115, 0,112, 97,114,116,105, 99,108,101, 73, -110,102, 83,105,122,101, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,105,101,108,100, - 83,105,122,101, 0, 42,109,101,115,104, 86,101,108,111, 99,105,116,105,101,115, 0, 99,112,115, 84,105,109,101, 83,116, 97,114, -116, 0, 99,112,115, 84,105,109,101, 69,110,100, 0, 99,112,115, 81,117, 97,108,105,116,121, 0, 97,116,116,114, 97, 99,116,102, -111,114, 99,101, 83,116,114,101,110,103,116,104, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 82, 97,100,105,117,115, 0, -118,101,108,111, 99,105,116,121,102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0,118,101,108,111, 99,105,116,121,102,111, -114, 99,101, 82, 97,100,105,117,115, 0,108, 97,115,116,103,111,111,100,102,114, 97,109,101, 0, 97,110,105,109, 82, 97,116,101, - 0,109,105,115,116,121,112,101, 0,104,111,114,114, 0,104,111,114,103, 0,104,111,114, 98, 0,122,101,110,114, 0,122,101,110, -103, 0,122,101,110, 98, 0,102, 97,115,116, 99,111,108, 0,101,120,112,111,115,117,114,101, 0,101,120,112, 0,114, 97,110,103, -101, 0,108,105,110,102, 97, 99, 0,108,111,103,102, 97, 99, 0,103,114, 97,118,105,116,121, 0, 97, 99,116,105,118,105,116,121, - 66,111,120, 82, 97,100,105,117,115, 0,115,107,121,116,121,112,101, 0,111, 99, 99,108,117,115,105,111,110, 82,101,115, 0,112, -104,121,115,105, 99,115, 69,110,103,105,110,101, 0,116,105, 99,114, 97,116,101, 0,109, 97,120,108,111,103,105, 99,115,116,101, -112, 0,112,104,121,115,117, 98,115,116,101,112, 0,109, 97,120,112,104,121,115,116,101,112, 0,109,105,115,105, 0,109,105,115, -116,115,116, 97, 0,109,105,115,116,100,105,115,116, 0,109,105,115,116,104,105, 0,115,116, 97,114,114, 0,115,116, 97,114,103, - 0,115,116, 97,114, 98, 0,115,116, 97,114,107, 0,115,116, 97,114,115,105,122,101, 0,115,116, 97,114,109,105,110,100,105,115, -116, 0,115,116, 97,114,100,105,115,116, 0,115,116, 97,114, 99,111,108,110,111,105,115,101, 0,100,111,102,115,116, 97, 0,100, -111,102,101,110,100, 0,100,111,102,109,105,110, 0,100,111,102,109, 97,120, 0, 97,111,100,105,115,116, 0, 97,111,100,105,115, -116,102, 97, 99, 0, 97,111,101,110,101,114,103,121, 0, 97,111, 98,105, 97,115, 0, 97,111,109,111,100,101, 0, 97,111,115, 97, -109,112, 0, 97,111,109,105,120, 0, 97,111, 99,111,108,111,114, 0, 97,111, 95, 97,100, 97,112,116, 95,116,104,114,101,115,104, - 0, 97,111, 95, 97,100, 97,112,116, 95,115,112,101,101,100, 95,102, 97, 99, 0, 97,111, 95, 97,112,112,114,111,120, 95,101,114, -114,111,114, 0, 97,111, 95, 97,112,112,114,111,120, 95, 99,111,114,114,101, 99,116,105,111,110, 0, 97,111, 95,105,110,100,105, -114,101, 99,116, 95,101,110,101,114,103,121, 0, 97,111, 95,101,110,118, 95,101,110,101,114,103,121, 0, 97,111, 95,112, 97,100, - 50, 0, 97,111, 95,105,110,100,105,114,101, 99,116, 95, 98,111,117,110, 99,101,115, 0, 97,111, 95,112, 97,100, 0, 97,111, 95, -115, 97,109,112, 95,109,101,116,104,111,100, 0, 97,111, 95,103, 97,116,104,101,114, 95,109,101,116,104,111,100, 0, 97,111, 95, - 97,112,112,114,111,120, 95,112, 97,115,115,101,115, 0, 42, 97,111,115,112,104,101,114,101, 0, 42, 97,111,116, 97, 98,108,101, -115, 0,115,101,108, 99,111,108, 0,115,120, 0,115,121, 0, 42,108,112, 70,111,114,109, 97,116, 0, 42,108,112, 80, 97,114,109, -115, 0, 99, 98, 70,111,114,109, 97,116, 0, 99, 98, 80, 97,114,109,115, 0,102, 99, 99, 84,121,112,101, 0,102, 99, 99, 72, 97, -110,100,108,101,114, 0,100,119, 75,101,121, 70,114, 97,109,101, 69,118,101,114,121, 0,100,119, 81,117, 97,108,105,116,121, 0, -100,119, 66,121,116,101,115, 80,101,114, 83,101, 99,111,110,100, 0,100,119, 70,108, 97,103,115, 0,100,119, 73,110,116,101,114, -108,101, 97,118,101, 69,118,101,114,121, 0, 97,118,105, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 99,100, - 80, 97,114,109,115, 0, 42,112, 97,100, 0, 99,100, 83,105,122,101, 0,113,116, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, - 56, 93, 0, 99,111,100,101, 99, 84,121,112,101, 0, 99,111,100,101, 99, 83,112, 97,116,105, 97,108, 81,117, 97,108,105,116,121, - 0, 99,111,100,101, 99, 0, 99,111,100,101, 99, 70,108, 97,103,115, 0, 99,111,108,111,114, 68,101,112,116,104, 0, 99,111,100, -101, 99, 84,101,109,112,111,114, 97,108, 81,117, 97,108,105,116,121, 0,109,105,110, 83,112, 97,116,105, 97,108, 81,117, 97,108, -105,116,121, 0,109,105,110, 84,101,109,112,111,114, 97,108, 81,117, 97,108,105,116,121, 0,107,101,121, 70,114, 97,109,101, 82, - 97,116,101, 0, 98,105,116, 82, 97,116,101, 0, 97,117,100,105,111, 99,111,100,101, 99, 84,121,112,101, 0, 97,117,100,105,111, - 83, 97,109,112,108,101, 82, 97,116,101, 0, 97,117,100,105,111, 66,105,116, 68,101,112,116,104, 0, 97,117,100,105,111, 67,104, - 97,110,110,101,108,115, 0, 97,117,100,105,111, 67,111,100,101, 99, 70,108, 97,103,115, 0, 97,117,100,105,111, 66,105,116, 82, - 97,116,101, 0, 97,117,100,105,111, 95, 99,111,100,101, 99, 0,118,105,100,101,111, 95, 98,105,116,114, 97,116,101, 0, 97,117, -100,105,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95,109,105,120,114, 97,116,101, 0, 97,117,100,105,111, 95, - 99,104, 97,110,110,101,108,115, 0, 97,117,100,105,111, 95,112, 97,100, 0, 97,117,100,105,111, 95,118,111,108,117,109,101, 0, -103,111,112, 95,115,105,122,101, 0,114, 99, 95,109,105,110, 95,114, 97,116,101, 0,114, 99, 95,109, 97,120, 95,114, 97,116,101, - 0,114, 99, 95, 98,117,102,102,101,114, 95,115,105,122,101, 0,109,117,120, 95,112, 97, 99,107,101,116, 95,115,105,122,101, 0, -109,117,120, 95,114, 97,116,101, 0,109,105,120,114, 97,116,101, 0,109, 97,105,110, 0,115,112,101,101,100, 95,111,102, 95,115, -111,117,110,100, 0,100,111,112,112,108,101,114, 95,102, 97, 99,116,111,114, 0,100,105,115,116, 97,110, 99,101, 95,109,111,100, -101,108, 0, 42,109, 97,116, 95,111,118,101,114,114,105,100,101, 0, 42,108,105,103,104,116, 95,111,118,101,114,114,105,100,101, - 0,108, 97,121, 95,122,109, 97,115,107, 0,108, 97,121, 95,101,120, 99,108,117,100,101, 0,108, 97,121,102,108, 97,103, 0,112, - 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120,111,114, 0,115, 97,109,112,108,101,115, 0,105,109,116,121,112,101, 0, -112,108, 97,110,101,115, 0,113,117, 97,108,105,116,121, 0, 99,111,109,112,114,101,115,115, 0,101,120,114, 95, 99,111,100,101, - 99, 0, 99,105,110,101,111,110, 95,102,108, 97,103, 0, 99,105,110,101,111,110, 95,119,104,105,116,101, 0, 99,105,110,101,111, -110, 95, 98,108, 97, 99,107, 0, 99,105,110,101,111,110, 95,103, 97,109,109, 97, 0,106,112, 50, 95,102,108, 97,103, 0,105,109, - 95,102,111,114,109, 97,116, 0, 42, 97,118,105, 99,111,100,101, 99,100, 97,116, 97, 0, 42,113,116, 99,111,100,101, 99,100, 97, -116, 97, 0,113,116, 99,111,100,101, 99,115,101,116,116,105,110,103,115, 0,102,102, 99,111,100,101, 99,100, 97,116, 97, 0,115, -117, 98,102,114, 97,109,101, 0,112,115,102,114, 97, 0,112,101,102,114, 97, 0,105,109, 97,103,101,115, 0,102,114, 97,109, 97, -112,116,111, 0,116,104,114,101, 97,100,115, 0,102,114, 97,109,101,108,101,110, 0, 98,108,117,114,102, 97, 99, 0,101,100,103, -101, 82, 0,101,100,103,101, 71, 0,101,100,103,101, 66, 0,102,117,108,108,115, 99,114,101,101,110, 0,120,112,108, 97,121, 0, -121,112,108, 97,121, 0,102,114,101,113,112,108, 97,121, 0, 97,116,116,114,105, 98, 0,102,114, 97,109,101, 95,115,116,101,112, - 0,115,116,101,114,101,111,109,111,100,101, 0,100,105,109,101,110,115,105,111,110,115,112,114,101,115,101,116, 0,109, 97,120, -105,109,115,105,122,101, 0,120,115, 99,104, 0,121,115, 99,104, 0,120,112, 97,114,116,115, 0,121,112, 97,114,116,115, 0,115, -117, 98,105,109,116,121,112,101, 0,100,105,115,112,108, 97,121,109,111,100,101, 0,115, 99,101,109,111,100,101, 0,114, 97,121, -116,114, 97, 99,101, 95,111,112,116,105,111,110,115, 0,114, 97,121,116,114, 97, 99,101, 95,115,116,114,117, 99,116,117,114,101, - 0,111, 99,114,101,115, 0,112, 97,100, 52, 0, 97,108,112,104, 97,109,111,100,101, 0,111,115, 97, 0,102,114,115, 95,115,101, - 99, 0,101,100,103,101,105,110,116, 0,115, 97,102,101,116,121, 0, 98,111,114,100,101,114, 0,100,105,115,112,114,101, 99,116, - 0,108, 97,121,101,114,115, 0, 97, 99,116,108, 97,121, 0,109, 98,108,117,114, 95,115, 97,109,112,108,101,115, 0,120, 97,115, -112, 0,121, 97,115,112, 0,102,114,115, 95,115,101, 99, 95, 98, 97,115,101, 0,103, 97,117,115,115, 0, 99,111,108,111,114, 95, -109,103,116, 95,102,108, 97,103, 0,112,111,115,116,103, 97,109,109, 97, 0,112,111,115,116,104,117,101, 0,112,111,115,116,115, - 97,116, 0,100,105,116,104,101,114, 95,105,110,116,101,110,115,105,116,121, 0, 98, 97,107,101, 95,111,115, 97, 0, 98, 97,107, -101, 95,102,105,108,116,101,114, 0, 98, 97,107,101, 95,109,111,100,101, 0, 98, 97,107,101, 95,102,108, 97,103, 0, 98, 97,107, -101, 95,110,111,114,109, 97,108, 95,115,112, 97, 99,101, 0, 98, 97,107,101, 95,113,117, 97,100, 95,115,112,108,105,116, 0, 98, - 97,107,101, 95,109, 97,120,100,105,115,116, 0, 98, 97,107,101, 95, 98,105, 97,115,100,105,115,116, 0, 98, 97,107,101, 95,112, - 97,100, 0,112,105, 99, 91, 49, 48, 50, 52, 93, 0,115,116, 97,109,112, 0,115,116, 97,109,112, 95,102,111,110,116, 95,105,100, - 0,115,116, 97,109,112, 95,117,100, 97,116, 97, 91, 55, 54, 56, 93, 0,102,103, 95,115,116, 97,109,112, 91, 52, 93, 0, 98,103, - 95,115,116, 97,109,112, 91, 52, 93, 0,115,101,113, 95,112,114,101,118, 95,116,121,112,101, 0,115,101,113, 95,114,101,110,100, - 95,116,121,112,101, 0,115,101,113, 95,102,108, 97,103, 0,112, 97,100, 53, 91, 53, 93, 0,115,105,109,112,108,105,102,121, 95, -102,108, 97,103, 0,115,105,109,112,108,105,102,121, 95,115,117, 98,115,117,114,102, 0,115,105,109,112,108,105,102,121, 95,115, -104, 97,100,111,119,115, 97,109,112,108,101,115, 0,115,105,109,112,108,105,102,121, 95,112, 97,114,116,105, 99,108,101,115, 0, -115,105,109,112,108,105,102,121, 95, 97,111,115,115,115, 0, 99,105,110,101,111,110,119,104,105,116,101, 0, 99,105,110,101,111, -110, 98,108, 97, 99,107, 0, 99,105,110,101,111,110,103, 97,109,109, 97, 0,106,112, 50, 95,112,114,101,115,101,116, 0,106,112, - 50, 95,100,101,112,116,104, 0,114,112, 97,100, 51, 0,100,111,109,101,114,101,115, 0,100,111,109,101,109,111,100,101, 0,100, -111,109,101, 97,110,103,108,101, 0,100,111,109,101,116,105,108,116, 0,100,111,109,101,114,101,115, 98,117,102, 0, 42,100,111, -109,101,116,101,120,116, 0,101,110,103,105,110,101, 91, 51, 50, 93, 0,110, 97,109,101, 91, 51, 50, 93, 0,112, 97,114,116,105, - 99,108,101, 95,112,101,114, 99, 0,115,117, 98,115,117,114,102, 95,109, 97,120, 0,115,104, 97,100, 98,117,102,115, 97,109,112, -108,101, 95,109, 97,120, 0, 97,111, 95,101,114,114,111,114, 0,116,105,108,116, 0,114,101,115, 98,117,102, 0, 42,119, 97,114, -112,116,101,120,116, 0, 99,111,108, 91, 51, 93, 0, 99,101,108,108,115,105,122,101, 0, 99,101,108,108,104,101,105,103,104,116, - 0, 97,103,101,110,116,109, 97,120,115,108,111,112,101, 0, 97,103,101,110,116,109, 97,120, 99,108,105,109, 98, 0, 97,103,101, -110,116,104,101,105,103,104,116, 0, 97,103,101,110,116,114, 97,100,105,117,115, 0,101,100,103,101,109, 97,120,108,101,110, 0, -101,100,103,101,109, 97,120,101,114,114,111,114, 0,114,101,103,105,111,110,109,105,110,115,105,122,101, 0,114,101,103,105,111, -110,109,101,114,103,101,115,105,122,101, 0,118,101,114,116,115,112,101,114,112,111,108,121, 0,100,101,116, 97,105,108,115, 97, -109,112,108,101,100,105,115,116, 0,100,101,116, 97,105,108,115, 97,109,112,108,101,109, 97,120,101,114,114,111,114, 0,102,114, - 97,109,105,110,103, 0,112,108, 97,121,101,114,102,108, 97,103, 0,114,116, 49, 0,114,116, 50, 0, 97, 97,115, 97,109,112,108, -101,115, 0,112, 97,100, 52, 91, 51, 93, 0,100,111,109,101, 0,115,116,101,114,101,111,102,108, 97,103, 0,101,121,101,115,101, -112, 97,114, 97,116,105,111,110, 0,114,101, 99, 97,115,116, 68, 97,116, 97, 0,109, 97,116,109,111,100,101, 0,101,120,105,116, -107,101,121, 0,111, 98,115,116, 97, 99,108,101, 83,105,109,117,108, 97,116,105,111,110, 0,108,101,118,101,108, 72,101,105,103, -104,116, 0, 42, 99, 97,109,101,114, 97, 0, 42,112, 97,105,110,116, 95, 99,117,114,115,111,114, 0,112, 97,105,110,116, 95, 99, -117,114,115,111,114, 95, 99,111,108, 91, 52, 93, 0,110,117,109, 95,105,110,112,117,116, 95,115, 97,109,112,108,101,115, 0,112, - 97,105,110,116, 0,115,101, 97,109, 95, 98,108,101,101,100, 0,110,111,114,109, 97,108, 95, 97,110,103,108,101, 0,115, 99,114, -101,101,110, 95,103,114, 97, 98, 95,115,105,122,101, 91, 50, 93, 0, 42,112, 97,105,110,116, 99,117,114,115,111,114, 0,105,110, -118,101,114,116, 0,116,111,116,114,101,107,101,121, 0,116,111,116, 97,100,100,107,101,121, 0, 98,114,117,115,104,116,121,112, -101, 0, 98,114,117,115,104, 91, 55, 93, 0,101,109,105,116,116,101,114,100,105,115,116, 0,115,101,108,101, 99,116,109,111,100, -101, 0,101,100,105,116,116,121,112,101, 0,100,114, 97,119, 95,115,116,101,112, 0,102, 97,100,101, 95,102,114, 97,109,101,115, - 0,114, 97,100,105, 97,108, 95,115,121,109,109, 91, 51, 93, 0,108, 97,115,116, 95,120, 0,108, 97,115,116, 95,121, 0,108, 97, -115,116, 95, 97,110,103,108,101, 0,100,114, 97,119, 95, 97,110, 99,104,111,114,101,100, 0, 97,110, 99,104,111,114,101,100, 95, -115,105,122,101, 0, 97,110, 99,104,111,114,101,100, 95,108,111, 99, 97,116,105,111,110, 91, 51, 93, 0, 97,110, 99,104,111,114, -101,100, 95,105,110,105,116,105, 97,108, 95,109,111,117,115,101, 91, 50, 93, 0,100,114, 97,119, 95,112,114,101,115,115,117,114, -101, 0,112,114,101,115,115,117,114,101, 95,118, 97,108,117,101, 0,115,112,101, 99,105, 97,108, 95,114,111,116, 97,116,105,111, -110, 0, 42,118,112, 97,105,110,116, 95,112,114,101,118, 0, 42,119,112, 97,105,110,116, 95,112,114,101,118, 0,109, 97,116, 91, - 51, 93, 91, 51, 93, 0,117,110,112,114,111,106,101, 99,116,101,100, 95,114, 97,100,105,117,115, 0, 42,118,112, 97,105,110,116, - 0, 42,119,112, 97,105,110,116, 0, 42,117,118,115, 99,117,108,112,116, 0,118,103,114,111,117,112, 95,119,101,105,103,104,116, - 0, 99,111,114,110,101,114,116,121,112,101, 0,106,111,105,110,116,114,105,108,105,109,105,116, 0,100,101,103,114, 0,116,117, -114,110, 0,101,120,116,114, 95,111,102,102,115, 0,100,111,117, 98,108,105,109,105,116, 0,110,111,114,109, 97,108,115,105,122, -101, 0, 97,117,116,111,109,101,114,103,101, 0,115,101,103,109,101,110,116,115, 0,114,105,110,103,115, 0,118,101,114,116,105, - 99,101,115, 0,117,110,119,114, 97,112,112,101,114, 0,117,118, 99, 97,108, 99, 95,114, 97,100,105,117,115, 0,117,118, 99, 97, -108, 99, 95, 99,117, 98,101,115,105,122,101, 0,117,118, 99, 97,108, 99, 95,109, 97,114,103,105,110, 0,117,118, 99, 97,108, 99, - 95,109, 97,112,100,105,114, 0,117,118, 99, 97,108, 99, 95,109, 97,112, 97,108,105,103,110, 0,117,118, 99, 97,108, 99, 95,102, -108, 97,103, 0,117,118, 95,102,108, 97,103, 0,117,118, 95,115,101,108,101, 99,116,109,111,100,101, 0,117,118, 95,115,117, 98, -115,117,114,102, 95,108,101,118,101,108, 0,103,112,101,110, 99,105,108, 95,102,108, 97,103,115, 0, 97,117,116,111,105,107, 95, - 99,104, 97,105,110,108,101,110, 0,105,109, 97,112, 97,105,110,116, 0,112, 97,114,116,105, 99,108,101, 0,112,114,111,112,111, -114,116,105,111,110, 97,108, 95,115,105,122,101, 0,115,101,108,101, 99,116, 95,116,104,114,101,115,104, 0, 99,108,101, 97,110, - 95,116,104,114,101,115,104, 0, 97,117,116,111,107,101,121, 95,109,111,100,101, 0, 97,117,116,111,107,101,121, 95,102,108, 97, -103, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95,116,121,112,101, 0,112, 97,100, 50, 91, 53, 93, 0,115, -107,103,101,110, 95,114,101,115,111,108,117,116,105,111,110, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95, -105,110,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,101,120,116,101,114,110, 97, -108, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,114, 97,116,105,111, 0,115,107,103,101,110, 95,108,101,110,103,116, -104, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 97,110,103,108,101, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, - 99,111,114,114,101,108, 97,116,105,111,110, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,115,121,109,109,101,116,114,121, - 95,108,105,109,105,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95, 97,110,103,108,101, 95,119,101,105,103, -104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,108,101,110,103,116,104, 95,119,101,105,103,104,116, 0, -115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,100,105,115,116, 97,110, 99,101, 95,119,101,105,103,104,116, 0,115, -107,103,101,110, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 0,115,107,103,101,110, - 95,112,111,115,116,112,114,111, 95,112, 97,115,115,101,115, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111, -110,115, 91, 51, 93, 0,115,107,103,101,110, 95,109,117,108,116,105, 95,108,101,118,101,108, 0, 42,115,107,103,101,110, 95,116, -101,109,112,108, 97,116,101, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 0, 98,111,110,101, 95,115,107,101,116, - 99,104,105,110,103, 95, 99,111,110,118,101,114,116, 0,115,107,103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110, 95, -110,117,109, 98,101,114, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,111,112,116,105,111,110,115, 0,115,107, -103,101,110, 95,114,101,116, 97,114,103,101,116, 95,114,111,108,108, 0,115,107,103,101,110, 95,115,105,100,101, 95,115,116,114, -105,110,103, 91, 56, 93, 0,115,107,103,101,110, 95,110,117,109, 95,115,116,114,105,110,103, 91, 56, 93, 0,101,100,103,101, 95, -109,111,100,101, 0,101,100,103,101, 95,109,111,100,101, 95,108,105,118,101, 95,117,110,119,114, 97,112, 0,115,110, 97,112, 95, -109,111,100,101, 0,115,110, 97,112, 95,102,108, 97,103, 0,115,110, 97,112, 95,116, 97,114,103,101,116, 0,112,114,111,112,111, -114,116,105,111,110, 97,108, 0,112,114,111,112, 95,109,111,100,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 95,111, - 98,106,101, 99,116,115, 0,112, 97,100, 91, 53, 93, 0, 97,117,116,111, 95,110,111,114,109, 97,108,105,122,101, 0,109,117,108, -116,105,112, 97,105,110,116, 0,117,115,101, 95,117,118, 95,115, 99,117,108,112,116, 0,117,118, 95,115, 99,117,108,112,116, 95, -115,101,116,116,105,110,103,115, 0,117,118, 95,115, 99,117,108,112,116, 95,116,111,111,108, 0,117,118, 95,114,101,108, 97,120, - 95,109,101,116,104,111,100, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,115,101,116,116,105,110,103,115, 0,115, 99, -117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95,115,105,122,101, 0,115, 99,117,108,112,116, 95,112, - 97,105,110,116, 95,117,110,105,102,105,101,100, 95,117,110,112,114,111,106,101, 99,116,101,100, 95,114, 97,100,105,117,115, 0, -115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95, 97,108,112,104, 97, 0,117,110,105,102,105, -101,100, 95,112, 97,105,110,116, 95,115,101,116,116,105,110,103,115, 0,116,111,116,111, 98,106, 0,116,111,116,108, 97,109,112, - 0,116,111,116,111, 98,106,115,101,108, 0,116,111,116, 99,117,114,118,101, 0,116,111,116,109,101,115,104, 0,116,111,116, 97, -114,109, 97,116,117,114,101, 0,115, 99, 97,108,101, 95,108,101,110,103,116,104, 0,115,121,115,116,101,109, 0,115,121,115,116, -101,109, 95,114,111,116, 97,116,105,111,110, 0,103,114, 97,118,105,116,121, 91, 51, 93, 0,113,117,105, 99,107, 95, 99, 97, 99, -104,101, 95,115,116,101,112, 0, 42,119,111,114,108,100, 0, 42,115,101,116, 0, 98, 97,115,101, 0, 42, 98, 97,115, 97, 99,116, - 0, 42,111, 98,101,100,105,116, 0, 99,117,114,115,111,114, 91, 51, 93, 0,116,119, 99,101,110,116, 91, 51, 93, 0,116,119,109, -105,110, 91, 51, 93, 0,116,119,109, 97,120, 91, 51, 93, 0,108, 97,121, 97, 99,116, 0,108, 97,121, 95,117,112,100, 97,116,101, -100, 0, 42,101,100, 0, 42,116,111,111,108,115,101,116,116,105,110,103,115, 0, 42,115,116, 97,116,115, 0, 97,117,100,105,111, - 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 0, 42,115,111,117,110,100, 95,115, 99,101,110,101, 0, 42, -115,111,117,110,100, 95,115, 99,101,110,101, 95,104, 97,110,100,108,101, 0, 42,115,111,117,110,100, 95,115, 99,114,117, 98, 95, -104, 97,110,100,108,101, 0, 42,115,112,101, 97,107,101,114, 95,104, 97,110,100,108,101,115, 0, 42,102,112,115, 95,105,110,102, -111, 0, 42,116,104,101, 68, 97,103, 0,100, 97,103,105,115,118, 97,108,105,100, 0,100, 97,103,102,108, 97,103,115, 0, 97, 99, -116,105,118,101, 95,107,101,121,105,110,103,115,101,116, 0,107,101,121,105,110,103,115,101,116,115, 0,103,109, 0,117,110,105, -116, 0,112,104,121,115,105, 99,115, 95,115,101,116,116,105,110,103,115, 0, 42, 99,108,105,112, 0, 99,117,115,116,111,109,100, - 97,116, 97, 95,109, 97,115,107, 95,109,111,100, 97,108, 0, 99,117,115,101,114, 0, 98,108,101,110,100, 0,118,105,101,119, 0, -119,105,110,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,105, -110,118, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,105,110,118, 91, 52, - 93, 91, 52, 93, 0,118,105,101,119,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116,111, 98, 91, 52, - 93, 91, 52, 93, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 99,108,105,112, 95,108,111, 99, 97,108, 91, 54, 93, 91, 52, 93, - 0, 42, 99,108,105,112, 98, 98, 0, 42,108,111, 99, 97,108,118,100, 0, 42,114,105, 0, 42,114,101,110,100,101,114, 95,101,110, -103,105,110,101, 0, 42,100,101,112,116,104,115, 0, 42,115,109,115, 0, 42,115,109,111,111,116,104, 95,116,105,109,101,114, 0, -116,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,122,102, 97, 99, 0, 99, 97,109, -100,120, 0, 99, 97,109,100,121, 0,112,105,120,115,105,122,101, 0, 99, 97,109,122,111,111,109, 0,105,115, 95,112,101,114,115, -112, 0,112,101,114,115,112, 0,118,105,101,119,108,111, 99,107, 0,116,119,100,114, 97,119,102,108, 97,103, 0,114,102,108, 97, -103, 0,108,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,108,112,101,114,115,112, 0,108,118,105,101,119, 0,103,114,105,100, -118,105,101,119, 0,116,119, 97,110,103,108,101, 91, 51, 93, 0,114,111,116, 95, 97,110,103,108,101, 0,114,111,116, 95, 97,120, -105,115, 91, 51, 93, 0,114,101,103,105,111,110, 98, 97,115,101, 0,115,112, 97, 99,101,116,121,112,101, 0, 98,108,111, 99,107, -115, 99, 97,108,101, 0, 98,108,111, 99,107,104, 97,110,100,108,101,114, 91, 56, 93, 0, 98,117,110,100,108,101, 95,115,105,122, -101, 0, 98,117,110,100,108,101, 95,100,114, 97,119,116,121,112,101, 0,108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99, -101,110,116,114,101, 0, 98,103,112,105, 99, 98, 97,115,101, 0, 42, 98,103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, - 95, 98,111,110,101, 91, 54, 52, 93, 0,100,114, 97,119,116,121,112,101, 0,111, 98, 95, 99,101,110,116,114,101, 95, 99,117,114, -115,111,114, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117,110,100, 0,103,114,105,100, 0,110,101, 97,114, 0,102, - 97,114, 0,109,111,100,101,115,101,108,101, 99,116, 0,103,114,105,100,108,105,110,101,115, 0,103,114,105,100,115,117, 98,100, -105,118, 0,103,114,105,100,102,108, 97,103, 0,116,119,116,121,112,101, 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, - 0,112, 97,100, 50, 91, 50, 93, 0, 97,102,116,101,114,100,114, 97,119, 95,116,114, 97,110,115,112, 0, 97,102,116,101,114,100, -114, 97,119, 95,120,114, 97,121, 0, 97,102,116,101,114,100,114, 97,119, 95,120,114, 97,121,116,114, 97,110,115,112, 0,122, 98, -117,102, 0,120,114, 97,121, 0,112, 97,100, 51, 91, 50, 93, 0, 42,112,114,111,112,101,114,116,105,101,115, 95,115,116,111,114, - 97,103,101, 0,118,101,114,116, 0,104,111,114, 0,109, 97,115,107, 0,109,105,110, 91, 50, 93, 0,109, 97,120, 91, 50, 93, 0, -109,105,110,122,111,111,109, 0,109, 97,120,122,111,111,109, 0,115, 99,114,111,108,108, 0,115, 99,114,111,108,108, 95,117,105, - 0,107,101,101,112,116,111,116, 0,107,101,101,112,122,111,111,109, 0,107,101,101,112,111,102,115, 0, 97,108,105,103,110, 0, -119,105,110,120, 0,119,105,110,121, 0,111,108,100,119,105,110,120, 0,111,108,100,119,105,110,121, 0, 42,116, 97, 98, 95,111, -102,102,115,101,116, 0,116, 97, 98, 95,110,117,109, 0,116, 97, 98, 95, 99,117,114, 0,114,112,116, 95,109, 97,115,107, 0,118, - 50,100, 0, 42, 97,100,115, 0,103,104,111,115,116, 67,117,114,118,101,115, 0, 97,117,116,111,115,110, 97,112, 0, 99,117,114, -115,111,114, 86, 97,108, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0,109, 97,105,110, 98,117,115,101,114, 0,114,101, - 95, 97,108,105,103,110, 0,112,114,101,118,105,101,119, 0,116,101,120,116,117,114,101, 95, 99,111,110,116,101,120,116, 0,112, - 97,116,104,102,108, 97,103, 0,100, 97,116, 97,105, 99,111,110, 0, 42,112,105,110,105,100, 0, 42,116,101,120,117,115,101,114, - 0,114,101,110,100,101,114, 95,115,105,122,101, 0, 99,104, 97,110,115,104,111,119,110, 0,122,101, 98,114, 97, 0,122,111,111, -109, 0,116,105,116,108,101, 91, 51, 50, 93, 0,100,105,114, 91, 49, 48, 53, 54, 93, 0,102,105,108,101, 91, 50, 53, 54, 93, 0, -114,101,110, 97,109,101,102,105,108,101, 91, 50, 53, 54, 93, 0,114,101,110, 97,109,101,101,100,105,116, 91, 50, 53, 54, 93, 0, -102,105,108,116,101,114, 95,103,108,111, 98, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115,101,108, 95, -102,105,114,115,116, 0,115,101,108, 95,108, 97,115,116, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, 0,102, 95,102,112, - 0,102,112, 95,115,116,114, 91, 56, 93, 0,115, 99,114,111,108,108, 95,111,102,102,115,101,116, 0, 42,112, 97,114, 97,109,115, - 0, 42,102,105,108,101,115, 0, 42,102,111,108,100,101,114,115, 95,112,114,101,118, 0, 42,102,111,108,100,101,114,115, 95,110, -101,120,116, 0, 42,111,112, 0, 42,115,109,111,111,116,104,115, 99,114,111,108,108, 95,116,105,109,101,114, 0, 42,108, 97,121, -111,117,116, 0,114,101, 99,101,110,116,110,114, 0, 98,111,111,107,109, 97,114,107,110,114, 0,115,121,115,116,101,109,110,114, - 0,116,114,101,101, 0, 42,116,114,101,101,115,116,111,114,101, 0,115,101, 97,114, 99,104, 95,115,116,114,105,110,103, 91, 51, - 50, 93, 0,115,101, 97,114, 99,104, 95,116,115,101, 0,111,117,116,108,105,110,101,118,105,115, 0,115,116,111,114,101,102,108, - 97,103, 0,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0, 42, 99,117,109, 97,112, 0,115, 99,111,112,101,115, 0,115, 97, -109,112,108,101, 95,108,105,110,101, 95,104,105,115,116, 0, 99,117,114,115,111,114, 91, 50, 93, 0, 99,101,110,116,120, 0, 99, -101,110,116,121, 0, 99,117,114,116,105,108,101, 0,108,111, 99,107, 0,112,105,110, 0,100,116, 95,117,118, 0,115,116,105, 99, -107,121, 0,100,116, 95,117,118,115,116,114,101,116, 99,104, 0, 42,116,101,120,116, 0,116,111,112, 0,118,105,101,119,108,105, -110,101,115, 0,109,101,110,117,110,114, 0,108,104,101,105,103,104,116, 0, 99,119,105,100,116,104, 0,108,105,110,101,110,114, -115, 95,116,111,116, 0,108,101,102,116, 0,115,104,111,119,108,105,110,101,110,114,115, 0,116, 97, 98,110,117,109, 98,101,114, - 0,115,104,111,119,115,121,110,116, 97,120, 0,108,105,110,101, 95,104,108,105,103,104,116, 0,111,118,101,114,119,114,105,116, -101, 0,108,105,118,101, 95,101,100,105,116, 0,112,105,120, 95,112,101,114, 95,108,105,110,101, 0,116,120,116,115, 99,114,111, -108,108, 0,116,120,116, 98, 97,114, 0,119,111,114,100,119,114, 97,112, 0,100,111,112,108,117,103,105,110,115, 0,102,105,110, -100,115,116,114, 91, 50, 53, 54, 93, 0,114,101,112,108, 97, 99,101,115,116,114, 91, 50, 53, 54, 93, 0,109, 97,114,103,105,110, - 95, 99,111,108,117,109,110, 0, 42,100,114, 97,119, 99, 97, 99,104,101, 0, 42,112,121, 95,100,114, 97,119, 0, 42,112,121, 95, -101,118,101,110,116, 0, 42,112,121, 95, 98,117,116,116,111,110, 0, 42,112,121, 95, 98,114,111,119,115,101,114, 99, 97,108,108, - 98, 97, 99,107, 0, 42,112,121, 95,103,108,111, 98, 97,108,100,105, 99,116, 0,108, 97,115,116,115,112, 97, 99,101, 0,115, 99, -114,105,112,116,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0,115, 99,114,105,112,116, 97,114,103, 91, 50, 53, 54, 93, 0, 42,115, - 99,114,105,112,116, 0, 42, 98,117,116, 95,114,101,102,115, 0, 42, 97,114,114, 97,121, 0, 99, 97, 99,104,101,115, 0, 99, 97, - 99,104,101, 95,100,105,115,112,108, 97,121, 0, 42,105,100, 0, 97,115,112,101, 99,116, 0,112, 97,100,102, 0,109,120, 0,109, -121, 0, 42,101,100,105,116,116,114,101,101, 0,116,114,101,101,116,121,112,101, 0,116,101,120,102,114,111,109, 0,115,104, 97, -100,101,114,102,114,111,109, 0,108,105,110,107,100,114, 97,103, 0,108,101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111, -114, 0,115, 99,114,111,108,108, 98, 97, 99,107, 0,104,105,115,116,111,114,121, 0,112,114,111,109,112,116, 91, 50, 53, 54, 93, - 0,108, 97,110,103,117, 97,103,101, 91, 51, 50, 93, 0,115,101,108, 95,115,116, 97,114,116, 0,115,101,108, 95,101,110,100, 0, -102,105,108,116,101,114, 91, 54, 52, 93, 0,120,108,111, 99,107,111,102, 0,121,108,111, 99,107,111,102, 0,117,115,101,114, 0, -112, 97,116,104, 95,108,101,110,103,116,104, 0,108,111, 99, 91, 50, 93, 0,115,116, 97, 98,109, 97,116, 91, 52, 93, 91, 52, 93, - 0,117,110,105,115,116, 97, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,116,112,114,111, 99, 95,102,108, 97,103, 0, - 42,100,114, 97,119, 95, 99,111,110,116,101,120,116, 0,100,111,112,101, 95,115,111,114,116, 0,100,111,112,101, 95,102,108, 97, -103, 0,102,105,108,101,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0, 98,108,102, 95,105,100, 0,117,105,102,111,110,116, 95,105, -100, 0,114, 95,116,111, 95,108, 0,112,111,105,110,116,115, 0,107,101,114,110,105,110,103, 0,105,116, 97,108,105, 99, 0, 98, -111,108,100, 0,115,104, 97,100,111,119, 0,115,104, 97,100,120, 0,115,104, 97,100,121, 0,115,104, 97,100,111,119, 97,108,112, -104, 97, 0,115,104, 97,100,111,119, 99,111,108,111,114, 0,112, 97,110,101,108,116,105,116,108,101, 0,103,114,111,117,112,108, - 97, 98,101,108, 0,119,105,100,103,101,116,108, 97, 98,101,108, 0,119,105,100,103,101,116, 0,112, 97,110,101,108,122,111,111, -109, 0,109,105,110,108, 97, 98,101,108, 99,104, 97,114,115, 0,109,105,110,119,105,100,103,101,116, 99,104, 97,114,115, 0, 99, -111,108,117,109,110,115,112, 97, 99,101, 0,116,101,109,112,108, 97,116,101,115,112, 97, 99,101, 0, 98,111,120,115,112, 97, 99, -101, 0, 98,117,116,116,111,110,115,112, 97, 99,101,120, 0, 98,117,116,116,111,110,115,112, 97, 99,101,121, 0,112, 97,110,101, -108,115,112, 97, 99,101, 0,112, 97,110,101,108,111,117,116,101,114, 0,111,117,116,108,105,110,101, 91, 52, 93, 0,105,110,110, -101,114, 91, 52, 93, 0,105,110,110,101,114, 95,115,101,108, 91, 52, 93, 0,105,116,101,109, 91, 52, 93, 0,116,101,120,116, 91, - 52, 93, 0,116,101,120,116, 95,115,101,108, 91, 52, 93, 0,115,104, 97,100,101,100, 0,115,104, 97,100,101,116,111,112, 0,115, -104, 97,100,101,100,111,119,110, 0, 97,108,112,104, 97, 95, 99,104,101, 99,107, 0,105,110,110,101,114, 95, 97,110,105,109, 91, - 52, 93, 0,105,110,110,101,114, 95, 97,110,105,109, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 91, 52, - 93, 0,105,110,110,101,114, 95,107,101,121, 95,115,101,108, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 91, - 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 95,115,101,108, 91, 52, 93, 0,104,101, 97,100,101,114, 91, 52, 93, - 0,115,104,111,119, 95,104,101, 97,100,101,114, 0,119, 99,111,108, 95,114,101,103,117,108, 97,114, 0,119, 99,111,108, 95,116, -111,111,108, 0,119, 99,111,108, 95,116,101,120,116, 0,119, 99,111,108, 95,114, 97,100,105,111, 0,119, 99,111,108, 95,111,112, -116,105,111,110, 0,119, 99,111,108, 95,116,111,103,103,108,101, 0,119, 99,111,108, 95,110,117,109, 0,119, 99,111,108, 95,110, -117,109,115,108,105,100,101,114, 0,119, 99,111,108, 95,109,101,110,117, 0,119, 99,111,108, 95,112,117,108,108,100,111,119,110, - 0,119, 99,111,108, 95,109,101,110,117, 95, 98, 97, 99,107, 0,119, 99,111,108, 95,109,101,110,117, 95,105,116,101,109, 0,119, - 99,111,108, 95,116,111,111,108,116,105,112, 0,119, 99,111,108, 95, 98,111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, - 0,119, 99,111,108, 95,112,114,111,103,114,101,115,115, 0,119, 99,111,108, 95,108,105,115,116, 95,105,116,101,109, 0,119, 99, -111,108, 95,115,116, 97,116,101, 0,112, 97,110,101,108, 0,105, 99,111,110,102,105,108,101, 91, 50, 53, 54, 93, 0,105, 99,111, -110, 95, 97,108,112,104, 97, 0, 98, 97, 99,107, 91, 52, 93, 0,116,105,116,108,101, 91, 52, 93, 0,116,101,120,116, 95,104,105, - 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,105,116,108,101, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 91, - 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0, 98,117,116,116,111,110, 91, 52, 93, 0, 98, -117,116,116,111,110, 95,116,105,116,108,101, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 91, 52, 93, 0, 98,117, -116,116,111,110, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,108,105,115,116, 91, 52, 93, 0,108,105,115,116, 95,116,105,116, -108,101, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 95,104,105, 91, - 52, 93, 0,112, 97,110,101,108, 91, 52, 93, 0,112, 97,110,101,108, 95,116,105,116,108,101, 91, 52, 93, 0,112, 97,110,101,108, - 95,116,101,120,116, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,115,104, 97,100,101, 49, - 91, 52, 93, 0,115,104, 97,100,101, 50, 91, 52, 93, 0,104,105,108,105,116,101, 91, 52, 93, 0,103,114,105,100, 91, 52, 93, 0, -119,105,114,101, 91, 52, 93, 0,115,101,108,101, 99,116, 91, 52, 93, 0,108, 97,109,112, 91, 52, 93, 0,115,112,101, 97,107,101, -114, 91, 52, 93, 0,101,109,112,116,121, 91, 52, 93, 0, 99, 97,109,101,114, 97, 91, 52, 93, 0,112, 97,100, 91, 56, 93, 0, 97, - 99,116,105,118,101, 91, 52, 93, 0,103,114,111,117,112, 91, 52, 93, 0,103,114,111,117,112, 95, 97, 99,116,105,118,101, 91, 52, - 93, 0,116,114, 97,110,115,102,111,114,109, 91, 52, 93, 0,118,101,114,116,101,120, 91, 52, 93, 0,118,101,114,116,101,120, 95, -115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 91, 52, 93, 0,101,100,103,101, 95,115,101,108,101, 99,116, 91, 52, 93, - 0,101,100,103,101, 95,115,101, 97,109, 91, 52, 93, 0,101,100,103,101, 95,115,104, 97,114,112, 91, 52, 93, 0,101,100,103,101, - 95,102, 97, 99,101,115,101,108, 91, 52, 93, 0,101,100,103,101, 95, 99,114,101, 97,115,101, 91, 52, 93, 0,102, 97, 99,101, 91, - 52, 93, 0,102, 97, 99,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,102, 97, 99,101, 95,100,111,116, 91, 52, 93, 0,101,120, -116,114, 97, 95,101,100,103,101, 95,108,101,110, 91, 52, 93, 0,101,120,116,114, 97, 95,102, 97, 99,101, 95, 97,110,103,108,101, - 91, 52, 93, 0,101,120,116,114, 97, 95,102, 97, 99,101, 95, 97,114,101, 97, 91, 52, 93, 0,112, 97,100, 51, 91, 52, 93, 0,110, -111,114,109, 97,108, 91, 52, 93, 0,118,101,114,116,101,120, 95,110,111,114,109, 97,108, 91, 52, 93, 0, 98,111,110,101, 95,115, -111,108,105,100, 91, 52, 93, 0, 98,111,110,101, 95,112,111,115,101, 91, 52, 93, 0,115,116,114,105,112, 91, 52, 93, 0,115,116, -114,105,112, 95,115,101,108,101, 99,116, 91, 52, 93, 0, 99,102,114, 97,109,101, 91, 52, 93, 0,110,117,114, 98, 95,117,108,105, -110,101, 91, 52, 93, 0,110,117,114, 98, 95,118,108,105,110,101, 91, 52, 93, 0, 97, 99,116, 95,115,112,108,105,110,101, 91, 52, - 93, 0,110,117,114, 98, 95,115,101,108, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101,108, 95,118,108,105, -110,101, 91, 52, 93, 0,108, 97,115,116,115,101,108, 95,112,111,105,110,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,102,114, -101,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101, 99,116, - 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,108,105,103,110, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,117,116,111, 95, - 99,108, 97,109,112,101,100, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95,102,114,101,101, 91, 52, 93, 0,104, 97, -110,100,108,101, 95,115,101,108, 95, 97,117,116,111, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95,118,101, 99,116, - 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,108,105,103,110, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115, -101,108, 95, 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, 52, 93, 0,100,115, 95, 99,104, 97,110,110,101,108, 91, 52, 93, - 0,100,115, 95,115,117, 98, 99,104, 97,110,110,101,108, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,111,117,116,112,117,116, - 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,102, -111, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,101,114,114,111,114, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95, 99,117, -114,115,111,114, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122,101, 0,111,117,116,108,105,110,101, 95,119,105,100,116, -104, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0,110,111,111,100,108,101, 95, 99,117,114,118,105,110,103, 0,115,121, -110,116, 97,120,108, 91, 52, 93, 0,115,121,110,116, 97,120,110, 91, 52, 93, 0,115,121,110,116, 97,120, 98, 91, 52, 93, 0,115, -121,110,116, 97,120,118, 91, 52, 93, 0,115,121,110,116, 97,120, 99, 91, 52, 93, 0,109,111,118,105,101, 91, 52, 93, 0,109,111, -118,105,101, 99,108,105,112, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, 93, 0,115, 99,101,110,101, 91, 52, 93, 0, 97,117,100, -105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,112,108,117,103,105,110, 91, 52, 93, 0,116,114, 97,110,115,105, -116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105,116,109,101,115,104, 95, 97, 99,116,105,118,101, 91, - 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101, -120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 95,115,105,122,101, 0,109, - 97,114,107,101,114, 95,111,117,116,108,105,110,101, 91, 52, 93, 0,109, 97,114,107,101,114, 91, 52, 93, 0, 97, 99,116, 95,109, - 97,114,107,101,114, 91, 52, 93, 0,115,101,108, 95,109, 97,114,107,101,114, 91, 52, 93, 0,100,105,115, 95,109, 97,114,107,101, -114, 91, 52, 93, 0,108,111, 99,107, 95,109, 97,114,107,101,114, 91, 52, 93, 0, 98,117,110,100,108,101, 95,115,111,108,105,100, - 91, 52, 93, 0,112, 97,116,104, 95, 98,101,102,111,114,101, 91, 52, 93, 0,112, 97,116,104, 95, 97,102,116,101,114, 91, 52, 93, - 0, 99, 97,109,101,114, 97, 95,112, 97,116,104, 91, 52, 93, 0,104,112, 97,100, 91, 55, 93, 0,112,114,101,118,105,101,119, 95, - 98, 97, 99,107, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,102, 97, 99,101, 91, 52, 93, 0,112, -114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,101,100,103,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116, -105,116, 99,104, 95,118,101,114,116, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,115,116,105,116, - 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,117,110,115,116,105,116, 99, -104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95, 97, 99,116,105,118,101, 91, 52, - 93, 0,109, 97,116, 99,104, 91, 52, 93, 0,115,101,108,101, 99,116,101,100, 95,104,105,103,104,108,105,103,104,116, 91, 52, 93, - 0,115,111,108,105,100, 91, 52, 93, 0,116,117,105, 0,116, 98,117,116,115, 0,116,118, 51,100, 0,116,102,105,108,101, 0,116, -105,112,111, 0,116,105,110,102,111, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,101, -120,116, 0,116,111,111,112,115, 0,116,116,105,109,101, 0,116,110,111,100,101, 0,116,108,111,103,105, 99, 0,116,117,115,101, -114,112,114,101,102, 0,116, 99,111,110,115,111,108,101, 0,116, 99,108,105,112, 0,116, 97,114,109, 91, 50, 48, 93, 0, 97, 99, -116,105,118,101, 95,116,104,101,109,101, 95, 97,114,101, 97, 0,109,111,100,117,108,101, 91, 54, 52, 93, 0,115,112,101, 99, 91, - 52, 93, 0,100,117,112,102,108, 97,103, 0,115, 97,118,101,116,105,109,101, 0,116,101,109,112,100,105,114, 91, 55, 54, 56, 93, - 0,102,111,110,116,100,105,114, 91, 55, 54, 56, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 48, 50, 52, 93, 0,116,101, -120,116,117,100,105,114, 91, 55, 54, 56, 93, 0,112,108,117,103,116,101,120,100,105,114, 91, 55, 54, 56, 93, 0,112,108,117,103, -115,101,113,100,105,114, 91, 55, 54, 56, 93, 0,112,121,116,104,111,110,100,105,114, 91, 55, 54, 56, 93, 0,115,111,117,110,100, -100,105,114, 91, 55, 54, 56, 93, 0,105,109, 97,103,101, 95,101,100,105,116,111,114, 91, 49, 48, 50, 52, 93, 0, 97,110,105,109, - 95,112,108, 97,121,101,114, 91, 49, 48, 50, 52, 93, 0, 97,110,105,109, 95,112,108, 97,121,101,114, 95,112,114,101,115,101,116, - 0,118, 50,100, 95,109,105,110, 95,103,114,105,100,115,105,122,101, 0,116,105,109,101, 99,111,100,101, 95,115,116,121,108,101, - 0,118,101,114,115,105,111,110,115, 0,100, 98,108, 95, 99,108,105, 99,107, 95,116,105,109,101, 0,103, 97,109,101,102,108, 97, -103,115, 0,119,104,101,101,108,108,105,110,101,115, 99,114,111,108,108, 0,117,105,102,108, 97,103, 0,108, 97,110,103,117, 97, -103,101, 0,117,115,101,114,112,114,101,102, 0,118,105,101,119,122,111,111,109, 0,109,105,120, 98,117,102,115,105,122,101, 0, - 97,117,100,105,111,100,101,118,105, 99,101, 0, 97,117,100,105,111,114, 97,116,101, 0, 97,117,100,105,111,102,111,114,109, 97, -116, 0, 97,117,100,105,111, 99,104, 97,110,110,101,108,115, 0,100,112,105, 0,101,110, 99,111,100,105,110,103, 0,116,114, 97, -110,115,111,112,116,115, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 49, 0,109,101,110,117,116,104,114,101,115,104, -111,108,100, 50, 0,116,104,101,109,101,115, 0,117,105,102,111,110,116,115, 0,117,105,115,116,121,108,101,115, 0,107,101,121, -109, 97,112,115, 0,117,115,101,114, 95,107,101,121,109, 97,112,115, 0, 97,100,100,111,110,115, 0,107,101,121, 99,111,110,102, -105,103,115,116,114, 91, 54, 52, 93, 0,117,110,100,111,115,116,101,112,115, 0,117,110,100,111,109,101,109,111,114,121, 0,103, -112, 95,109, 97,110,104, 97,116,116,101,110,100,105,115,116, 0,103,112, 95,101,117, 99,108,105,100,101, 97,110,100,105,115,116, - 0,103,112, 95,101,114, 97,115,101,114, 0,103,112, 95,115,101,116,116,105,110,103,115, 0,116, 98, 95,108,101,102,116,109,111, -117,115,101, 0,116, 98, 95,114,105,103,104,116,109,111,117,115,101, 0,108,105,103,104,116, 91, 51, 93, 0,116,119, 95,104,111, -116,115,112,111,116, 0,116,119, 95,102,108, 97,103, 0,116,119, 95,104, 97,110,100,108,101,115,105,122,101, 0,116,119, 95,115, -105,122,101, 0,116,101,120,116,105,109,101,111,117,116, 0,116,101,120, 99,111,108,108,101, 99,116,114, 97,116,101, 0,119,109, -100,114, 97,119,109,101,116,104,111,100, 0,100,114, 97,103,116,104,114,101,115,104,111,108,100, 0,109,101,109, 99, 97, 99,104, -101,108,105,109,105,116, 0,112,114,101,102,101,116, 99,104,102,114, 97,109,101,115, 0,102,114, 97,109,101,115,101,114,118,101, -114,112,111,114,116, 0,112, 97,100, 95,114,111,116, 95, 97,110,103,108,101, 0,111, 98, 99,101,110,116,101,114, 95,100,105, 97, - 0,114,118,105,115,105,122,101, 0,114,118,105, 98,114,105,103,104,116, 0,114,101, 99,101,110,116, 95,102,105,108,101,115, 0, -115,109,111,111,116,104, 95,118,105,101,119,116,120, 0,103,108,114,101,115,108,105,109,105,116, 0, 99,117,114,115,115,105,122, -101, 0, 99,111,108,111,114, 95,112,105, 99,107,101,114, 95,116,121,112,101, 0,105,112,111, 95,110,101,119, 0,107,101,121,104, - 97,110,100,108,101,115, 95,110,101,119, 0,115, 99,114, 99, 97,115,116,102,112,115, 0,115, 99,114, 99, 97,115,116,119, 97,105, -116, 0,119,105,100,103,101,116, 95,117,110,105,116, 0, 97,110,105,115,111,116,114,111,112,105, 99, 95,102,105,108,116,101,114, - 0,117,115,101, 95, 49, 54, 98,105,116, 95,116,101,120,116,117,114,101,115, 0,112, 97,100, 56, 0,110,100,111,102, 95,115,101, -110,115,105,116,105,118,105,116,121, 0,110,100,111,102, 95,102,108, 97,103, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0, -116,101,120,116, 95,114,101,110,100,101,114, 0,112, 97,100, 57, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 0,115, 99,117, -108,112,116, 95,112, 97,105,110,116, 95,111,118,101,114,108, 97,121, 95, 99,111,108, 91, 51, 93, 0,116,119,101, 97,107, 95,116, -104,114,101,115,104,111,108,100, 0, 97,117,116,104,111,114, 91, 56, 48, 93, 0, 99,111,109,112,117,116,101, 95,100,101,118,105, - 99,101, 95,116,121,112,101, 0, 99,111,109,112,117,116,101, 95,100,101,118,105, 99,101, 95,105,100, 0,102, 99,117, 95,105,110, - 97, 99,116,105,118,101, 95, 97,108,112,104, 97, 0,118,101,114,116, 98, 97,115,101, 0,101,100,103,101, 98, 97,115,101, 0, 97, -114,101, 97, 98, 97,115,101, 0, 42,110,101,119,115, 99,101,110,101, 0,114,101,100,114, 97,119,115, 95,102,108, 97,103, 0,102, -117,108,108, 0,116,101,109,112, 0,119,105,110,105,100, 0,100,111, 95,100,114, 97,119, 0,100,111, 95,114,101,102,114,101,115, -104, 0,100,111, 95,100,114, 97,119, 95,103,101,115,116,117,114,101, 0,100,111, 95,100,114, 97,119, 95,112, 97,105,110,116, 99, -117,114,115,111,114, 0,100,111, 95,100,114, 97,119, 95,100,114, 97,103, 0,115,119, 97,112, 0,109, 97,105,110,119,105,110, 0, -115,117, 98,119,105,110, 97, 99,116,105,118,101, 0, 42, 97,110,105,109,116,105,109,101,114, 0, 42, 99,111,110,116,101,120,116, - 0,104, 97,110,100,108,101,114, 91, 56, 93, 0, 42,110,101,119,118, 0,118,101, 99, 0, 42,118, 49, 0, 42,118, 50, 0, 42,116, -121,112,101, 0,112, 97,110,101,108,110, 97,109,101, 91, 54, 52, 93, 0,116, 97, 98,110, 97,109,101, 91, 54, 52, 93, 0,100,114, - 97,119,110, 97,109,101, 91, 54, 52, 93, 0,111,102,115,120, 0,111,102,115,121, 0,115,105,122,101,120, 0,115,105,122,101,121, - 0,108, 97, 98,101,108,111,102,115, 0,114,117,110,116,105,109,101, 95,102,108, 97,103, 0, 99,111,110,116,114,111,108, 0,115, -110, 97,112, 0,115,111,114,116,111,114,100,101,114, 0, 42,112, 97,110,101,108,116, 97, 98, 0, 42, 97, 99,116,105,118,101,100, - 97,116, 97, 0,108,105,115,116, 95,115, 99,114,111,108,108, 0,108,105,115,116, 95,115,105,122,101, 0,108,105,115,116, 95,108, - 97,115,116, 95,108,101,110, 0,108,105,115,116, 95,103,114,105,112, 95,115,105,122,101, 0,108,105,115,116, 95,115,101, 97,114, - 99,104, 91, 54, 52, 93, 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0, 98,117,116,115,112, 97, 99,101,116,121,112, -101, 0,104,101, 97,100,101,114,116,121,112,101, 0,115,112, 97, 99,101,100, 97,116, 97, 0,104, 97,110,100,108,101,114,115, 0, - 97, 99,116,105,111,110,122,111,110,101,115, 0,119,105,110,114, 99,116, 0,100,114, 97,119,114, 99,116, 0,115,119,105,110,105, -100, 0,114,101,103,105,111,110,116,121,112,101, 0, 97,108,105,103,110,109,101,110,116, 0,100,111, 95,100,114, 97,119, 95,111, -118,101,114,108, 97,121, 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115, 0, 42,104,101, 97,100,101,114,115,116, -114, 0, 42,114,101,103,105,111,110,100, 97,116, 97, 0,115,117, 98,118,115,116,114, 91, 52, 93, 0,115,117, 98,118,101,114,115, -105,111,110, 0,112, 97,100,115, 0,109,105,110,118,101,114,115,105,111,110, 0,109,105,110,115,117, 98,118,101,114,115,105,111, -110, 0,119,105,110,112,111,115, 0, 42, 99,117,114,115, 99,114,101,101,110, 0, 42, 99,117,114,115, 99,101,110,101, 0,102,105, -108,101,102,108, 97,103,115, 0,103,108,111, 98, 97,108,102, 0,114,101,118,105,115,105,111,110, 0,110, 97,109,101, 91, 50, 53, - 54, 93, 0,111,114,105,103, 95,119,105,100,116,104, 0,111,114,105,103, 95,104,101,105,103,104,116, 0, 98,111,116,116,111,109, - 0,114,105,103,104,116, 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51, 93, 0,103, 97,109,109, 97, 91, 51, - 93, 0,103, 97,105,110, 91, 51, 93, 0,100,105,114, 91, 55, 54, 56, 93, 0,116, 99, 0, 98,117,105,108,100, 95,115,105,122,101, - 95,102,108, 97,103,115, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103,115, 0,100,111,110,101, 0,115,116, 97,114,116, -115,116,105,108,108, 0,101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100, 97,116, 97, 0, 42, 99,114,111,112, 0, - 42,116,114, 97,110,115,102,111,114,109, 0, 42, 99,111,108,111,114, 95, 98, 97,108, 97,110, 99,101, 0, 42,105,110,115,116, 97, -110, 99,101, 95,112,114,105,118, 97,116,101, 95,100, 97,116, 97, 0, 42, 42, 99,117,114,114,101,110,116, 95,112,114,105,118, 97, -116,101, 95,100, 97,116, 97, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102,115, 0,101,110,100,111,102,115, 0,109, 97, 99, -104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105,115,112, 0,115, 97,116, 0,109,117,108, 0,104, - 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, 0,115,116,114,101, 97,109,105,110,100,101,120, - 0,109,117,108,116,105, 99, 97,109, 95,115,111,117,114, 99,101, 0, 99,108,105,112, 95,102,108, 97,103, 0, 42,115,116,114,105, -112, 0, 42,115, 99,101,110,101, 95, 99, 97,109,101,114, 97, 0,101,102,102,101, 99,116, 95,102, 97,100,101,114, 0,115,112,101, -101,100, 95,102, 97,100,101,114, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, 0, 42,115,101,113, 51, 0,115,101,113, 98, 97, -115,101, 0, 42,115,111,117,110,100, 0, 42,115, 99,101,110,101, 95,115,111,117,110,100, 0,112,105,116, 99,104, 0,112, 97,110, - 0,115,116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, 97,116, 97, 0, 97,110,105,109, 95,115,116, 97,114,116,111,102, -115, 0, 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108,101,110,100, 95,109,111,100,101, 0, 98,108,101,110,100, 95,111, -112, 97, 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, 0, 42,112, 97,114,115,101,113, 0, 42,115,101,113, 98, 97,115, -101,112, 0,109,101,116, 97,115,116, 97, 99,107, 0, 42, 97, 99,116, 95,115,101,113, 0, 97, 99,116, 95,105,109, 97,103,101,100, -105,114, 91, 49, 48, 50, 52, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105,114, 91, 49, 48, 50, 52, 93, 0,111,118,101,114, - 95,111,102,115, 0,111,118,101,114, 95, 99,102,114, 97, 0,111,118,101,114, 95,102,108, 97,103, 0,111,118,101,114, 95, 98,111, -114,100,101,114, 0,101,100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97,114,100, 0,119,105,112,101,116,121,112,101, 0, -102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0,100, 68,105,115,116, 0,100, 81,117, 97,108,105, -116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, 0, 83, 99, 97,108,101,121, 73,110,105, 0,120, - 73,110,105, 0,121, 73,110,105, 0,114,111,116, 73,110,105, 0,105,110,116,101,114,112,111,108, 97,116,105,111,110, 0,117,110, -105,102,111,114,109, 95,115, 99, 97,108,101, 0, 42,102,114, 97,109,101, 77, 97,112, 0,103,108,111, 98, 97,108, 83,112,101,101, -100, 0,108, 97,115,116, 86, 97,108,105,100, 70,114, 97,109,101, 0, 98,117,116,116,121,112,101, 0,117,115,101,114,106,105,116, - 0,115,116, 97, 0,116,111,116,112, 97,114,116, 0,110,111,114,109,102, 97, 99, 0,111, 98,102, 97, 99, 0,114, 97,110,100,102, - 97, 99, 0,116,101,120,102, 97, 99, 0,114, 97,110,100,108,105,102,101, 0,102,111,114, 99,101, 91, 51, 93, 0,118,101, 99,116, -115,105,122,101, 0,109, 97,120,108,101,110, 0,100,101,102,118,101, 99, 91, 51, 93, 0,109,117,108,116, 91, 52, 93, 0,108,105, -102,101, 91, 52, 93, 0, 99,104,105,108,100, 91, 52, 93, 0,109, 97,116, 91, 52, 93, 0,116,101,120,109, 97,112, 0, 99,117,114, -109,117,108,116, 0,115,116, 97,116,105, 99,115,116,101,112, 0,111,109, 97,116, 0,116,105,109,101,116,101,120, 0,115,112,101, -101,100,116,101,120, 0,102,108, 97,103, 50,110,101,103, 0,118,101,114,116,103,114,111,117,112, 95,118, 0,118,103,114,111,117, -112,110, 97,109,101, 91, 54, 52, 93, 0,118,103,114,111,117,112,110, 97,109,101, 95,118, 91, 54, 52, 93, 0, 42,107,101,121,115, - 0,109,105,110,102, 97, 99, 0,110,114, 0,117,115,101,100, 0,117,115,101,100,101,108,101,109, 0, 42,112,111,105,110, 0,114, -101,115,101,116,100,105,115,116, 0,108, 97,115,116,118, 97,108, 0, 42,109, 97, 0,107,101,121, 0,113,117, 97,108, 0,113,117, - 97,108, 50, 0,116, 97,114,103,101,116, 78, 97,109,101, 91, 54, 52, 93, 0,116,111,103,103,108,101, 78, 97,109,101, 91, 54, 52, - 93, 0,118, 97,108,117,101, 91, 54, 52, 93, 0,109, 97,120,118, 97,108,117,101, 91, 54, 52, 93, 0,100,101,108, 97,121, 0,100, -117,114, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 78, 97,109,101, 91, 54, 52, 93, 0,100, 97,109,112,116,105,109, -101,114, 0,112,114,111,112,110, 97,109,101, 91, 54, 52, 93, 0,109, 97,116,110, 97,109,101, 91, 54, 52, 93, 0, 97,120,105,115, -102,108, 97,103, 0,112,111,115,101, 99,104, 97,110,110,101,108, 91, 54, 52, 93, 0, 99,111,110,115,116,114, 97,105,110,116, 91, - 54, 52, 93, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106,101, 99,116, 91, 54, 52, 93, 0, 98,111,100,121, - 91, 54, 52, 93, 0,111,116,121,112,101, 0,112,117,108,115,101, 0,102,114,101,113, 0,116,111,116,108,105,110,107,115, 0, 42, - 42,108,105,110,107,115, 0,116, 97,112, 0,106,111,121,105,110,100,101,120, 0, 97,120,105,115, 95,115,105,110,103,108,101, 0, - 97,120,105,115,102, 0, 98,117,116,116,111,110, 0,104, 97,116, 0,104, 97,116,102, 0,112,114,101, 99,105,115,105,111,110, 0, -115,116,114, 91, 49, 50, 56, 93, 0, 42,109,121,110,101,119, 0,105,110,112,117,116,115, 0,116,111,116,115,108,105,110,107,115, - 0, 42, 42,115,108,105,110,107,115, 0,118, 97,108,111, 0,115,116, 97,116,101, 95,109, 97,115,107, 0, 42, 97, 99,116, 0,102, -114, 97,109,101, 80,114,111,112, 91, 54, 52, 93, 0, 98,108,101,110,100,105,110, 0,112,114,105,111,114,105,116,121, 0,101,110, -100, 95,114,101,115,101,116, 0,115,116,114,105,100,101, 97,120,105,115, 0,115,116,114,105,100,101,108,101,110,103,116,104, 0, -108, 97,121,101,114, 95,119,101,105,103,104,116, 0,109,105,110, 95,103, 97,105,110, 0,109, 97,120, 95,103, 97,105,110, 0,114, -101,102,101,114,101,110, 99,101, 95,100,105,115,116, 97,110, 99,101, 0,109, 97,120, 95,100,105,115,116, 97,110, 99,101, 0,114, -111,108,108,111,102,102, 95,102, 97, 99,116,111,114, 0, 99,111,110,101, 95,105,110,110,101,114, 95, 97,110,103,108,101, 0, 99, -111,110,101, 95,111,117,116,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95,103, 97,105,110, 0, -115,110,100,110,114, 0,115,111,117,110,100, 51, 68, 0,112, 97,100, 54, 91, 49, 93, 0, 42,109,101, 0,108,105,110, 86,101,108, -111, 99,105,116,121, 91, 51, 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0,108,111, 99, 97,108,102,108, 97, -103, 0,100,121,110, 95,111,112,101,114, 97,116,105,111,110, 0,102,111,114, 99,101,108,111, 99, 91, 51, 93, 0,102,111,114, 99, -101,114,111,116, 91, 51, 93, 0,112, 97,100, 49, 91, 51, 93, 0,108,105,110,101, 97,114,118,101,108,111, 99,105,116,121, 91, 51, - 93, 0, 97,110,103,117,108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 42,114,101,102,101,114,101,110, 99,101, 0, -109,105,110, 0,109, 97,120, 0,114,111,116,100, 97,109,112, 0,109,105,110,108,111, 99, 91, 51, 93, 0,109, 97,120,108,111, 99, - 91, 51, 93, 0,109,105,110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,116, 91, 51, 93, 0,109, 97,116,112,114,111,112, 91, - 54, 52, 93, 0, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,100,105,115,116,114,105, 98,117,116,105,111,110, 0,105, -110,116, 95, 97,114,103, 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102,108,111, 97,116, 95, 97,114,103, 95, 49, 0,102, -108,111, 97,116, 95, 97,114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109,101, 91, 54, 52, 93, 0, 42,116,111, 79, 98,106, -101, 99,116, 0, 98,111,100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109,101, 91, 54, 52, 93, 0,108,111, 97,100, 97,110, -105,110, 97,109,101, 91, 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108,111, 97,116, 95, 97,114,103, 0,105,110,102,108, -117,101,110, 99,101, 0, 42,115,117, 98,116, 97,114,103,101,116, 0,102, 97, 99,105,110,103, 97,120,105,115, 0,118,101,108,111, - 99,105,116,121, 0, 97, 99, 99,101,108,101,114, 97,116,105,111,110, 0,116,117,114,110,115,112,101,101,100, 0,117,112,100, 97, -116,101, 84,105,109,101, 0, 42,110, 97,118,109,101,115,104, 0,103,111, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108, -101, 0, 97,116,116,101,110,117, 97,116,105,111,110, 0,100,105,115,116, 97,110, 99,101, 0, 42, 99, 97, 99,104,101, 0, 42,119, - 97,118,101,102,111,114,109, 0, 42,112,108, 97,121, 98, 97, 99,107, 95,104, 97,110,100,108,101, 0, 42,108, 97,109,112,114,101, -110, 0,103,111, 98,106,101, 99,116, 0,100,117,112,108,105, 95,111,102,115, 91, 51, 93, 0, 42,112,114,111,112, 0, 99,104,105, -108,100, 98, 97,115,101, 0,114,111,108,108, 0,104,101, 97,100, 91, 51, 93, 0,116, 97,105,108, 91, 51, 93, 0, 98,111,110,101, - 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97,114,109, 95,104,101, 97,100, 91, 51, 93, 0, 97,114,109, 95,116, 97,105,108, 91, - 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 97,114,109, 95,114,111,108,108, 0,120,119,105,100,116,104, - 0,122,119,105,100,116,104, 0,101, 97,115,101, 49, 0,101, 97,115,101, 50, 0,114, 97,100, 95,104,101, 97,100, 0,114, 97,100, - 95,116, 97,105,108, 0,112, 97,100, 91, 49, 93, 0, 98,111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110, 98, 97,115,101, 0, - 42,101,100, 98,111, 0, 42, 97, 99,116, 95, 98,111,110,101, 0, 42, 97, 99,116, 95,101,100, 98,111,110,101, 0, 42,115,107,101, -116, 99,104, 0,103,101,118,101,114,116,100,101,102,111,114,109,101,114, 0,108, 97,121,101,114, 95,117,115,101,100, 0,108, 97, -121,101,114, 95,112,114,111,116,101, 99,116,101,100, 0,103,104,111,115,116,101,112, 0,103,104,111,115,116,115,105,122,101, 0, -103,104,111,115,116,116,121,112,101, 0,112, 97,116,104,115,105,122,101, 0,103,104,111,115,116,115,102, 0,103,104,111,115,116, -101,102, 0,112, 97,116,104,115,102, 0,112, 97,116,104,101,102, 0,112, 97,116,104, 98, 99, 0,112, 97,116,104, 97, 99, 0, 42, -112,111,105,110,116,115, 0,115,116, 97,114,116, 95,102,114, 97,109,101, 0,101,110,100, 95,102,114, 97,109,101, 0,103,104,111, -115,116, 95,115,102, 0,103,104,111,115,116, 95,101,102, 0,103,104,111,115,116, 95, 98, 99, 0,103,104,111,115,116, 95, 97, 99, - 0,103,104,111,115,116, 95,116,121,112,101, 0,103,104,111,115,116, 95,115,116,101,112, 0,103,104,111,115,116, 95,102,108, 97, -103, 0,112, 97,116,104, 95,116,121,112,101, 0,112, 97,116,104, 95,115,116,101,112, 0,112, 97,116,104, 95,118,105,101,119,102, -108, 97,103, 0,112, 97,116,104, 95, 98, 97,107,101,102,108, 97,103, 0,112, 97,116,104, 95,115,102, 0,112, 97,116,104, 95,101, -102, 0,112, 97,116,104, 95, 98, 99, 0,112, 97,116,104, 95, 97, 99, 0,105,107,102,108, 97,103, 0, 97,103,114,112, 95,105,110, -100,101,120, 0, 99,111,110,115,116,102,108, 97,103, 0,115,101,108,101, 99,116,102,108, 97,103, 0,112, 97,100, 48, 91, 54, 93, - 0, 42, 98,111,110,101, 0, 42, 99,104,105,108,100, 0,105,107,116,114,101,101, 0,115,105,107,116,114,101,101, 0, 42, 99,117, -115,116,111,109, 0, 42, 99,117,115,116,111,109, 95,116,120, 0,101,117,108, 91, 51, 93, 0, 99,104, 97,110, 95,109, 97,116, 91, - 52, 93, 91, 52, 93, 0,112,111,115,101, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,104,101, 97,100, 91, 51, - 93, 0,112,111,115,101, 95,116, 97,105,108, 91, 51, 93, 0,108,105,109,105,116,109,105,110, 91, 51, 93, 0,108,105,109,105,116, -109, 97,120, 91, 51, 93, 0,115,116,105,102,102,110,101,115,115, 91, 51, 93, 0,105,107,115,116,114,101,116, 99,104, 0,105,107, -114,111,116,119,101,105,103,104,116, 0,105,107,108,105,110,119,101,105,103,104,116, 0, 42,116,101,109,112, 0, 99,104, 97,110, - 98, 97,115,101, 0, 42, 99,104, 97,110,104, 97,115,104, 0,112,114,111,120,121, 95,108, 97,121,101,114, 0,115,116,114,105,100, -101, 95,111,102,102,115,101,116, 91, 51, 93, 0, 99,121, 99,108,105, 99, 95,111,102,102,115,101,116, 91, 51, 93, 0, 97,103,114, -111,117,112,115, 0, 97, 99,116,105,118,101, 95,103,114,111,117,112, 0,105,107,115,111,108,118,101,114, 0, 42,105,107,100, 97, -116, 97, 0, 42,105,107,112, 97,114, 97,109, 0,112,114,111,120,121, 95, 97, 99,116, 95, 98,111,110,101, 91, 54, 52, 93, 0,110, -117,109,105,116,101,114, 0,110,117,109,115,116,101,112, 0,109,105,110,115,116,101,112, 0,109, 97,120,115,116,101,112, 0,115, -111,108,118,101,114, 0,102,101,101,100, 98, 97, 99,107, 0,109, 97,120,118,101,108, 0,100, 97,109,112,109, 97,120, 0,100, 97, -109,112,101,112,115, 0, 99,104, 97,110,110,101,108,115, 0, 99,117,115,116,111,109, 67,111,108, 0, 99,115, 0, 99,117,114,118, -101,115, 0,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95,109, 97,114,107,101,114, 0,105,100,114,111,111,116, 0, 42, -115,111,117,114, 99,101, 0, 42,102,105,108,116,101,114, 95,103,114,112, 0,115,101, 97,114, 99,104,115,116,114, 91, 54, 52, 93, - 0,102,105,108,116,101,114,102,108, 97,103, 0,114,101,110, 97,109,101, 73,110,100,101,120, 0, 97,100,115, 0,116,105,109,101, -115,108,105,100,101, 0, 42,103,114,112, 0,110, 97,109,101, 91, 51, 48, 93, 0,111,119,110,115,112, 97, 99,101, 0,116, 97,114, -115,112, 97, 99,101, 0,101,110,102,111,114, 99,101, 0,104,101, 97,100,116, 97,105,108, 0,108,105,110, 95,101,114,114,111,114, - 0,114,111,116, 95,101,114,114,111,114, 0, 42,116, 97,114, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, - 99,101, 0,114,111,116, 79,114,100,101,114, 0,116, 97,114,110,117,109, 0,116, 97,114,103,101,116,115, 0,105,116,101,114, 97, -116,105,111,110,115, 0,114,111,111,116, 98,111,110,101, 0,109, 97,120, 95,114,111,111,116, 98,111,110,101, 0, 42,112,111,108, -101,116, 97,114, 0,112,111,108,101,115,117, 98,116, 97,114,103,101,116, 91, 54, 52, 93, 0,112,111,108,101, 97,110,103,108,101, - 0,111,114,105,101,110,116,119,101,105,103,104,116, 0,103,114, 97, 98,116, 97,114,103,101,116, 91, 51, 93, 0,110,117,109,112, -111,105,110,116,115, 0, 99,104, 97,105,110,108,101,110, 0,120,122, 83, 99, 97,108,101, 77,111,100,101, 0,114,101,115,101,114, -118,101,100, 49, 0,114,101,115,101,114,118,101,100, 50, 0,109,105,110,109, 97,120,102,108, 97,103, 0,115,116,117, 99,107, 0, - 99, 97, 99,104,101, 91, 51, 93, 0,108,111, 99,107,102,108, 97,103, 0,102,111,108,108,111,119,102,108, 97,103, 0,118,111,108, -109,111,100,101, 0,112,108, 97,110,101, 0,111,114,103,108,101,110,103,116,104, 0, 98,117,108,103,101, 0,112,105,118, 88, 0, -112,105,118, 89, 0,112,105,118, 90, 0, 97,120, 88, 0, 97,120, 89, 0, 97,120, 90, 0,109,105,110, 76,105,109,105,116, 91, 54, - 93, 0,109, 97,120, 76,105,109,105,116, 91, 54, 93, 0,101,120,116,114, 97, 70,122, 0,105,110,118,109, 97,116, 91, 52, 93, 91, - 52, 93, 0,102,114,111,109, 0,116,111, 0,109, 97,112, 91, 51, 93, 0,101,120,112,111, 0,102,114,111,109, 95,109,105,110, 91, - 51, 93, 0,102,114,111,109, 95,109, 97,120, 91, 51, 93, 0,116,111, 95,109,105,110, 91, 51, 93, 0,116,111, 95,109, 97,120, 91, - 51, 93, 0,114,111,116, 65,120,105,115, 0,122,109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 0,116,114, 97, 99, -107, 91, 54, 52, 93, 0,111, 98,106,101, 99,116, 91, 54, 52, 93, 0, 42,100,101,112,116,104, 95,111, 98, 0, 99,104, 97,110,110, -101,108, 91, 51, 50, 93, 0,110,111, 95,114,111,116, 95, 97,120,105,115, 0,115,116,114,105,100,101, 95, 97,120,105,115, 0, 99, -117,114,109,111,100, 0, 97, 99,116,115,116, 97,114,116, 0, 97, 99,116,101,110,100, 0, 97, 99,116,111,102,102,115, 0,115,116, -114,105,100,101,108,101,110, 0, 98,108,101,110,100,111,117,116, 0,115,116,114,105,100,101, 99,104, 97,110,110,101,108, 91, 51, - 50, 93, 0,111,102,102,115, 95, 98,111,110,101, 91, 51, 50, 93, 0,104, 97,115,105,110,112,117,116, 0,104, 97,115,111,117,116, -112,117,116, 0,100, 97,116, 97,116,121,112,101, 0,115,111, 99,107,101,116,116,121,112,101, 0,105,115, 95, 99,111,112,121, 0, -101,120,116,101,114,110, 97,108, 0, 42,110,101,119, 95,115,111, 99,107, 0, 42,115,116,111,114, 97,103,101, 0,108,105,109,105, -116, 0,108,111, 99,120, 0,108,111, 99,121, 0, 42,100,101,102, 97,117,108,116, 95,118, 97,108,117,101, 0,115,116, 97, 99,107, - 95,105,110,100,101,120, 0,115,116, 97, 99,107, 95,116,121,112,101, 0,114,101,115,105,122,101,109,111,100,101, 0,111,119,110, - 95,105,110,100,101,120, 0,116,111, 95,105,110,100,101,120, 0, 42,103,114,111,117,112,115,111, 99,107, 0, 42,108,105,110,107, - 0,110,115, 0, 42,114,101, 99,116, 0,120,115,105,122,101, 0,121,115,105,122,101, 0, 42,110,101,119, 95,110,111,100,101, 0, -108, 97,115,116,121, 0, 99,111,108,111,114, 91, 51, 93, 0,111,117,116,112,117,116,115, 0,109,105,110,105,119,105,100,116,104, - 0,111,102,102,115,101,116,120, 0,111,102,102,115,101,116,121, 0,117,112,100, 97,116,101, 0,108, 97, 98,101,108, 91, 54, 52, - 93, 0, 99,117,115,116,111,109, 49, 0, 99,117,115,116,111,109, 50, 0, 99,117,115,116,111,109, 51, 0, 99,117,115,116,111,109, - 52, 0,110,101,101,100, 95,101,120,101, 99, 0,101,120,101, 99, 0, 42,116,104,114,101, 97,100,100, 97,116, 97, 0,116,111,116, -114, 0, 98,117,116,114, 0,112,114,118,114, 0, 42, 98,108,111, 99,107, 0, 42,116,121,112,101,105,110,102,111, 0, 42,102,114, -111,109,110,111,100,101, 0, 42,116,111,110,111,100,101, 0, 42,102,114,111,109,115,111, 99,107, 0, 42,116,111,115,111, 99,107, - 0,110,111,100,101,115, 0,108,105,110,107,115, 0,105,110,105,116, 0, 99,117,114, 95,105,110,100,101,120, 0,110,111,100,101, -116,121,112,101, 0,101,100,105,116, 95,113,117, 97,108,105,116,121, 0,114,101,110,100,101,114, 95,113,117, 97,108,105,116,121, - 0, 99,104,117,110,107,115,105,122,101, 0, 42,101,120,101, 99,100, 97,116, 97, 0, 40, 42,112,114,111,103,114,101,115,115, 41, - 40, 41, 0, 40, 42,115,116, 97,116,115, 95,100,114, 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116, 95, 98,114,101, 97,107, 41, - 40, 41, 0, 42,116, 98,104, 0, 42,112,114,104, 0, 42,115,100,104, 0,118, 97,108,117,101, 91, 51, 93, 0,118, 97,108,117,101, - 91, 52, 93, 0,108, 97, 98,101,108, 95,115,105,122,101, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,103, 97,109,109, - 97, 0,103, 97,105,110, 0,108,105,102,116, 0,109, 97,115,116,101,114, 0,115,104, 97,100,111,119,115, 0,109,105,100,116,111, -110,101,115, 0,104,105,103,104,108,105,103,104,116,115, 0,115,116, 97,114,116,109,105,100,116,111,110,101,115, 0,101,110,100, -109,105,100,116,111,110,101,115, 0,102,108, 97,112,115, 0,114,111,117,110,100,105,110,103, 0, 99, 97,116, 97,100,105,111,112, -116,114,105, 99, 0,108,101,110,115,115,104,105,102,116, 0,114,111,116, 97,116,105,111,110, 0,112, 97,115,115, 95,105,110,100, -101,120, 0,112, 97,115,115, 95,102,108, 97,103, 0,109, 97,120,115,112,101,101,100, 0,109,105,110,115,112,101,101,100, 0, 99, -117,114,118,101,100, 0,112,101,114, 99,101,110,116,120, 0,112,101,114, 99,101,110,116,121, 0, 98,111,107,101,104, 0,105,109, - 97,103,101, 95,105,110, 95,119,105,100,116,104, 0,105,109, 97,103,101, 95,105,110, 95,104,101,105,103,104,116, 0, 99,101,110, -116,101,114, 95,120, 0, 99,101,110,116,101,114, 95,121, 0,115,112,105,110, 0,119,114, 97,112, 0,115,105,103,109, 97, 95, 99, -111,108,111,114, 0,115,105,103,109, 97, 95,115,112, 97, 99,101, 0,104,117,101, 0, 98, 97,115,101, 95,112, 97,116,104, 91, 49, - 48, 50, 52, 93, 0,102,111,114,109, 97,116, 0, 97, 99,116,105,118,101, 95,105,110,112,117,116, 0,117,115,101, 95,114,101,110, -100,101,114, 95,102,111,114,109, 97,116, 0,117,115,101, 95,110,111,100,101, 95,102,111,114,109, 97,116, 0,108, 97,121,101,114, - 91, 51, 48, 93, 0,116, 49, 0,116, 50, 0,116, 51, 0,102,115,116,114,101,110,103,116,104, 0,102, 97,108,112,104, 97, 0,107, -101,121, 91, 52, 93, 0, 97,108,103,111,114,105,116,104,109, 0, 99,104, 97,110,110,101,108, 0,120, 49, 0,120, 50, 0,121, 49, - 0,121, 50, 0,102, 97, 99, 95,120, 49, 0,102, 97, 99, 95,120, 50, 0,102, 97, 99, 95,121, 49, 0,102, 97, 99, 95,121, 50, 0, - 99,111,108,110, 97,109,101, 91, 54, 52, 93, 0, 98,107,116,121,112,101, 0,112, 97,100, 95, 99, 49, 0,103, 97,109, 99,111, 0, -110,111, 95,122, 98,117,102, 0,102,115,116,111,112, 0,109, 97,120, 98,108,117,114, 0, 98,116,104,114,101,115,104, 0,112, 97, -100, 95,102, 49, 0, 42,100,105, 99,116, 0, 42,110,111,100,101, 0, 99,111,108,109,111,100, 0,109,105,120, 0,102, 97,100,101, - 0, 97,110,103,108,101, 95,111,102,115, 0,109, 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 0,115,108,111,112, -101, 91, 51, 93, 0,112,111,119,101,114, 91, 51, 93, 0,108,105,102,116, 95,108,103,103, 91, 51, 93, 0,103, 97,109,109, 97, 95, -105,110,118, 91, 51, 93, 0,108,105,109, 99,104, 97,110, 0,117,110,115,112,105,108,108, 0,108,105,109,115, 99, 97,108,101, 0, -117,115,112,105,108,108,114, 0,117,115,112,105,108,108,103, 0,117,115,112,105,108,108, 98, 0,116,101,120, 95,109, 97,112,112, -105,110,103, 0, 99,111,108,111,114, 95,109, 97,112,112,105,110,103, 0,115,117,110, 95,100,105,114,101, 99,116,105,111,110, 91, - 51, 93, 0,116,117,114, 98,105,100,105,116,121, 0, 99,111,108,111,114, 95,115,112, 97, 99,101, 0,112,114,111,106,101, 99,116, -105,111,110, 0,103,114, 97,100,105,101,110,116, 95,116,121,112,101, 0, 99,111,108,111,114,105,110,103, 0,109,117,115,103,114, - 97,118,101, 95,116,121,112,101, 0,119, 97,118,101, 95,116,121,112,101, 0,115,104,111,114,116,121, 0,109,105,110,116, 97, 98, -108,101, 0,109, 97,120,116, 97, 98,108,101, 0,101,120,116, 95,105,110, 91, 50, 93, 0,101,120,116, 95,111,117,116, 91, 50, 93, - 0, 42, 99,117,114,118,101, 0, 42,116, 97, 98,108,101, 0, 42,112,114,101,109,117,108,116, 97, 98,108,101, 0,112,114,101,115, -101,116, 0, 99,104, 97,110,103,101,100, 95,116,105,109,101,115,116, 97,109,112, 0, 99,117,114,114, 0, 99,108,105,112,114, 0, - 99,109, 91, 52, 93, 0, 98,108, 97, 99,107, 91, 51, 93, 0,119,104,105,116,101, 91, 51, 93, 0, 98,119,109,117,108, 91, 51, 93, - 0,115, 97,109,112,108,101, 91, 51, 93, 0,120, 95,114,101,115,111,108,117,116,105,111,110, 0,100, 97,116, 97, 95,114, 91, 50, - 53, 54, 93, 0,100, 97,116, 97, 95,103, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95, 98, 91, 50, 53, 54, 93, 0,100, 97,116, 97, - 95,108,117,109, 97, 91, 50, 53, 54, 93, 0,115, 97,109,112,108,101, 95,102,117,108,108, 0,115, 97,109,112,108,101, 95,108,105, -110,101,115, 0, 97, 99, 99,117,114, 97, 99,121, 0,119, 97,118,101,102,114,109, 95,109,111,100,101, 0,119, 97,118,101,102,114, -109, 95, 97,108,112,104, 97, 0,119, 97,118,101,102,114,109, 95,121,102, 97, 99, 0,119, 97,118,101,102,114,109, 95,104,101,105, -103,104,116, 0,118,101, 99,115, 99,111,112,101, 95, 97,108,112,104, 97, 0,118,101, 99,115, 99,111,112,101, 95,104,101,105,103, -104,116, 0,109,105,110,109, 97,120, 91, 51, 93, 91, 50, 93, 0,104,105,115,116, 0, 42,119, 97,118,101,102,111,114,109, 95, 49, - 0, 42,119, 97,118,101,102,111,114,109, 95, 50, 0, 42,119, 97,118,101,102,111,114,109, 95, 51, 0, 42,118,101, 99,115, 99,111, -112,101, 0,119, 97,118,101,102,111,114,109, 95,116,111,116, 0,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0, -109,116,101,120, 0, 42,116,111,103,103,108,101, 95, 98,114,117,115,104, 0, 42,105, 99,111,110, 95,105,109, 98,117,102, 0,105, - 99,111,110, 95,102,105,108,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,110,111,114,109, 97,108, 95,119,101,105,103,104,116, - 0,111, 98, 95,109,111,100,101, 0,106,105,116,116,101,114, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,114, 97, -100,105,117,115, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,102, 97, 99,116,111,114, 0,114, 97,116,101, 0,114, -103, 98, 91, 51, 93, 0,115, 99,117,108,112,116, 95,112,108, 97,110,101, 0,112,108, 97,110,101, 95,111,102,102,115,101,116, 0, -115, 99,117,108,112,116, 95,116,111,111,108, 0,118,101,114,116,101,120,112, 97,105,110,116, 95,116,111,111,108, 0,105,109, 97, -103,101,112, 97,105,110,116, 95,116,111,111,108, 0,109, 97,115,107, 95,116,111,111,108, 0, 97,117,116,111,115,109,111,111,116, -104, 95,102, 97, 99,116,111,114, 0, 99,114,101, 97,115,101, 95,112,105,110, 99,104, 95,102, 97, 99,116,111,114, 0,112,108, 97, -110,101, 95,116,114,105,109, 0,116,101,120,116,117,114,101, 95,115, 97,109,112,108,101, 95, 98,105, 97,115, 0,116,101,120,116, -117,114,101, 95,111,118,101,114,108, 97,121, 95, 97,108,112,104, 97, 0, 97,100,100, 95, 99,111,108, 91, 51, 93, 0,115,117, 98, - 95, 99,111,108, 91, 51, 93, 0, 97, 99,116,105,118,101, 95,114,110,100, 0, 97, 99,116,105,118,101, 95, 99,108,111,110,101, 0, - 97, 99,116,105,118,101, 95,109, 97,115,107, 0, 42,108, 97,121,101,114,115, 0,116,121,112,101,109, 97,112, 91, 51, 54, 93, 0, -116,111,116,108, 97,121,101,114, 0,109, 97,120,108, 97,121,101,114, 0,116,111,116,115,105,122,101, 0, 42,112,111,111,108, 0, - 42,101,120,116,101,114,110, 97,108, 0,114,111,116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 0, 42,103,114,111,117,110,100, 0, -119, 97,110,100,101,114, 91, 51, 93, 0,114,101,115,116, 95,108,101,110,103,116,104, 0,112, 97,114,116,105, 99,108,101, 95,105, -110,100,101,120, 91, 50, 93, 0,100,101,108,101,116,101, 95,102,108, 97,103, 0,110,117,109, 0,112, 97,114,101,110,116, 0,112, - 97, 91, 52, 93, 0,119, 91, 52, 93, 0,102,117,118, 91, 52, 93, 0,102,111,102,102,115,101,116, 0,112,114,101,118, 95,115,116, - 97,116,101, 0, 42,104, 97,105,114, 0, 42, 98,111,105,100, 0,100,105,101,116,105,109,101, 0,110,117,109, 95,100,109, 99, 97, - 99,104,101, 0,104, 97,105,114, 95,105,110,100,101,120, 0, 97,108,105,118,101, 0,115,112,114,105,110,103, 95,107, 0,112,108, - 97,115,116,105, 99,105,116,121, 95, 99,111,110,115,116, 97,110,116, 0,121,105,101,108,100, 95,114, 97,116,105,111, 0,112,108, - 97,115,116,105, 99,105,116,121, 95, 98, 97,108, 97,110, 99,101, 0,121,105,101,108,100, 95, 98, 97,108, 97,110, 99,101, 0,118, -105,115, 99,111,115,105,116,121, 95,111,109,101,103, 97, 0,118,105,115, 99,111,115,105,116,121, 95, 98,101,116, 97, 0,115,116, -105,102,102,110,101,115,115, 95,107, 0,115,116,105,102,102,110,101,115,115, 95,107,110,101, 97,114, 0,114,101,115,116, 95,100, -101,110,115,105,116,121, 0, 98,117,111,121, 97,110, 99,121, 0,115,112,114,105,110,103, 95,102,114, 97,109,101,115, 0, 42, 98, -111,105,100,115, 0, 42,102,108,117,105,100, 0,100,105,115,116,114, 0,112,104,121,115,116,121,112,101, 0, 97,118,101,109,111, -100,101, 0,114,101, 97, 99,116,101,118,101,110,116, 0,100,114, 97,119, 0,100,114, 97,119, 95, 97,115, 0,100,114, 97,119, 95, -115,105,122,101, 0, 99,104,105,108,100,116,121,112,101, 0,114,101,110, 95, 97,115, 0,115,117, 98,102,114, 97,109,101,115, 0, -100,114, 97,119, 95, 99,111,108, 0,114,101,110, 95,115,116,101,112, 0,104, 97,105,114, 95,115,116,101,112, 0,107,101,121,115, - 95,115,116,101,112, 0, 97,100, 97,112,116, 95, 97,110,103,108,101, 0, 97,100, 97,112,116, 95,112,105,120, 0,114,111,116,102, -114,111,109, 0,105,110,116,101,103,114, 97,116,111,114, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118, 95,115,112, -108,105,116, 0, 98, 98, 95, 97,110,105,109, 0, 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98, 98, 95,116, -105,108,116, 0, 98, 98, 95,114, 97,110,100, 95,116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93, 0, 98, 98, - 95,115,105,122,101, 91, 50, 93, 0, 98, 98, 95,118,101,108, 95,104,101, 97,100, 0, 98, 98, 95,118,101,108, 95,116, 97,105,108, - 0, 99,111,108,111,114, 95,118,101, 99, 95,109, 97,120, 0,115,105,109,112,108,105,102,121, 95,114,101,102,115,105,122,101, 0, -115,105,109,112,108,105,102,121, 95,114, 97,116,101, 0,115,105,109,112,108,105,102,121, 95,116,114, 97,110,115,105,116,105,111, -110, 0,115,105,109,112,108,105,102,121, 95,118,105,101,119,112,111,114,116, 0,116,105,109,101,116,119,101, 97,107, 0, 99,111, -117,114, 97,110,116, 95,116, 97,114,103,101,116, 0,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105, -100, 95,114, 97,110,100, 0,112,115, 95,111,102,102,115,101,116, 91, 49, 93, 0,103,114,105,100, 95,114,101,115, 0,101,102,102, -101, 99,116,111,114, 95, 97,109,111,117,110,116, 0,116,105,109,101, 95,102,108, 97,103, 0,116,105,109,101, 95,112, 97,100, 91, - 51, 93, 0,112, 97,114,116,102, 97, 99, 0,116, 97,110,102, 97, 99, 0,116, 97,110,112,104, 97,115,101, 0,114,101, 97, 99,116, -102, 97, 99, 0,111, 98, 95,118,101,108, 91, 51, 93, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,101,102, 97, 99, 0,114, 97, -110,100,114,111,116,102, 97, 99, 0,114, 97,110,100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,115,105,122,101, 0, 97, - 99, 99, 91, 51, 93, 0,100,114, 97,103,102, 97, 99, 0, 98,114,111,119,110,102, 97, 99, 0,114, 97,110,100,108,101,110,103,116, -104, 0, 99,104,105,108,100, 95,110, 98,114, 0,114,101,110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,114,101,110,116, -115, 0, 99,104,105,108,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,105,108,100,114, - 97,100, 0, 99,104,105,108,100,102,108, 97,116, 0, 99,108,117,109,112,112,111,119, 0,107,105,110,107, 95,102,108, 97,116, 0, -107,105,110,107, 95, 97,109,112, 95, 99,108,117,109,112, 0,114,111,117,103,104, 49, 0,114,111,117,103,104, 49, 95,115,105,122, -101, 0,114,111,117,103,104, 50, 0,114,111,117,103,104, 50, 95,115,105,122,101, 0,114,111,117,103,104, 50, 95,116,104,114,101, -115, 0,114,111,117,103,104, 95,101,110,100, 0,114,111,117,103,104, 95,101,110,100, 95,115,104, 97,112,101, 0, 99,108,101,110, -103,116,104, 0, 99,108,101,110,103,116,104, 95,116,104,114,101,115, 0,112, 97,114,116,105,110,103, 95,102, 97, 99, 0,112, 97, -114,116,105,110,103, 95,109,105,110, 0,112, 97,114,116,105,110,103, 95,109, 97,120, 0, 98,114, 97,110, 99,104, 95,116,104,114, -101,115, 0,100,114, 97,119, 95,108,105,110,101, 91, 50, 93, 0,112, 97,116,104, 95,115,116, 97,114,116, 0,112, 97,116,104, 95, -101,110,100, 0,116,114, 97,105,108, 95, 99,111,117,110,116, 0,107,101,121,101,100, 95,108,111,111,112,115, 0,100,117,112,108, -105,119,101,105,103,104,116,115, 0, 42,101,102,102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, 98, 0, 42, 98, 98, 95, -111, 98, 0, 42,112,100, 50, 0, 42,112, 97,114,116, 0, 42,112, 97,114,116,105, 99,108,101,115, 0, 42, 42,112, 97,116,104, 99, - 97, 99,104,101, 0, 42, 42, 99,104,105,108,100, 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104,101, 98,117,102,115, 0, - 99,104,105,108,100, 99, 97, 99,104,101, 98,117,102,115, 0, 42, 99,108,109,100, 0, 42,104, 97,105,114, 95,105,110, 95,100,109, - 0, 42,104, 97,105,114, 95,111,117,116, 95,100,109, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99, -101, 0,116,114,101,101, 95,102,114, 97,109,101, 0, 98,118,104,116,114,101,101, 95,102,114, 97,109,101, 0, 99,104,105,108,100, - 95,115,101,101,100, 0,116,111,116,117,110,101,120,105,115,116, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99, 97, 99, -104,101,100, 0,116,111,116, 99,104,105,108,100, 99, 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,116,111, -116,107,101,121,101,100, 0, 98, 97,107,101,115,112, 97, 99,101, 0, 98, 98, 95,117,118,110, 97,109,101, 91, 51, 93, 91, 54, 52, - 93, 0,118,103,114,111,117,112, 91, 49, 50, 93, 0,118,103, 95,110,101,103, 0,114,116, 51, 0, 42,114,101,110,100,101,114,100, - 97,116, 97, 0, 42,101,102,102,101, 99,116,111,114,115, 0, 42,102,108,117,105,100, 95,115,112,114,105,110,103,115, 0,116,111, -116, 95,102,108,117,105,100,115,112,114,105,110,103,115, 0, 97,108,108,111, 99, 95,102,108,117,105,100,115,112,114,105,110,103, -115, 0, 42,116,114,101,101, 0, 42,112,100,100, 0, 42,102,114, 97,110,100, 0,100,116, 95,102,114, 97, 99, 0, 95,112, 97,100, - 0, 67,100,105,115, 0, 67,118,105, 0,115,116,114,117, 99,116,117,114, 97,108, 0, 98,101,110,100,105,110,103, 0,109, 97,120, - 95, 98,101,110,100, 0,109, 97,120, 95,115,116,114,117, 99,116, 0,109, 97,120, 95,115,104,101, 97,114, 0, 97,118,103, 95,115, -112,114,105,110,103, 95,108,101,110, 0,116,105,109,101,115, 99, 97,108,101, 0,101,102,102, 95,102,111,114, 99,101, 95,115, 99, - 97,108,101, 0,101,102,102, 95,119,105,110,100, 95,115, 99, 97,108,101, 0,115,105,109, 95,116,105,109,101, 95,111,108,100, 0, -118,101,108,111, 99,105,116,121, 95,115,109,111,111,116,104, 0, 99,111,108,108,105,100,101,114, 95,102,114,105, 99,116,105,111, -110, 0,118,101,108, 95,100, 97,109,112,105,110,103, 0,115,116,101,112,115, 80,101,114, 70,114, 97,109,101, 0,112,114,101,114, -111,108,108, 0,109, 97,120,115,112,114,105,110,103,108,101,110, 0,115,111,108,118,101,114, 95,116,121,112,101, 0,118,103,114, -111,117,112, 95, 98,101,110,100, 0,118,103,114,111,117,112, 95,109, 97,115,115, 0,118,103,114,111,117,112, 95,115,116,114,117, - 99,116, 0,115,104, 97,112,101,107,101,121, 95,114,101,115,116, 0,112,114,101,115,101,116,115, 0,114,101,115,101,116, 0, 42, - 99,111,108,108,105,115,105,111,110, 95,108,105,115,116, 0,101,112,115,105,108,111,110, 0,115,101,108,102, 95,102,114,105, 99, -116,105,111,110, 0,115,101,108,102,101,112,115,105,108,111,110, 0,114,101,112,101,108, 95,102,111,114, 99,101, 0,100,105,115, -116, 97,110, 99,101, 95,114,101,112,101,108, 0,115,101,108,102, 95,108,111,111,112, 95, 99,111,117,110,116, 0,108,111,111,112, - 95, 99,111,117,110,116, 0,112,114,101,115,115,117,114,101, 0,116,104,105, 99,107,110,101,115,115, 0,115,116,114,111,107,101, -115, 0,102,114, 97,109,101,110,117,109, 0, 42, 97, 99,116,102,114, 97,109,101, 0,103,115,116,101,112, 0,105,110,102,111, 91, - 49, 50, 56, 93, 0,115, 98,117,102,102,101,114, 95,115,105,122,101, 0,115, 98,117,102,102,101,114, 95,115,102,108, 97,103, 0, - 42,115, 98,117,102,102,101,114, 0,108,105,115,116, 0,112,114,105,110,116,108,101,118,101,108, 0,115,116,111,114,101,108,101, -118,101,108, 0, 42,114,101,112,111,114,116,116,105,109,101,114, 0, 42,119,105,110,100,114, 97,119, 97, 98,108,101, 0, 42,119, -105,110, 97, 99,116,105,118,101, 0,119,105,110,100,111,119,115, 0,105,110,105,116,105, 97,108,105,122,101,100, 0,102,105,108, -101, 95,115, 97,118,101,100, 0,111,112, 95,117,110,100,111, 95,100,101,112,116,104, 0,111,112,101,114, 97,116,111,114,115, 0, -113,117,101,117,101, 0,114,101,112,111,114,116,115, 0,106,111, 98,115, 0,112, 97,105,110,116, 99,117,114,115,111,114,115, 0, -100,114, 97,103,115, 0,107,101,121, 99,111,110,102,105,103,115, 0, 42,100,101,102, 97,117,108,116, 99,111,110,102, 0, 42, 97, -100,100,111,110, 99,111,110,102, 0, 42,117,115,101,114, 99,111,110,102, 0,116,105,109,101,114,115, 0, 42, 97,117,116,111,115, - 97,118,101,116,105,109,101,114, 0, 42,103,104,111,115,116,119,105,110, 0,103,114, 97, 98, 99,117,114,115,111,114, 0, 42,115, - 99,114,101,101,110, 0, 42,110,101,119,115, 99,114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 54, 52, 93, 0, -112,111,115,120, 0,112,111,115,121, 0,119,105,110,100,111,119,115,116, 97,116,101, 0,109,111,110,105,116,111,114, 0,108, 97, -115,116, 99,117,114,115,111,114, 0,109,111,100, 97,108, 99,117,114,115,111,114, 0, 97,100,100,109,111,117,115,101,109,111,118, -101, 0, 42,101,118,101,110,116,115,116, 97,116,101, 0, 42, 99,117,114,115,119,105,110, 0, 42,116,119,101, 97,107, 0,100,114, - 97,119,109,101,116,104,111,100, 0,100,114, 97,119,102, 97,105,108, 0, 42,100,114, 97,119,100, 97,116, 97, 0,109,111,100, 97, -108,104, 97,110,100,108,101,114,115, 0,115,117, 98,119,105,110,100,111,119,115, 0,103,101,115,116,117,114,101, 0,105,100,110, - 97,109,101, 91, 54, 52, 93, 0,112,114,111,112,118, 97,108,117,101, 95,115,116,114, 91, 54, 52, 93, 0,112,114,111,112,118, 97, -108,117,101, 0,115,104,105,102,116, 0, 99,116,114,108, 0, 97,108,116, 0,111,115,107,101,121, 0,107,101,121,109,111,100,105, -102,105,101,114, 0,109, 97,112,116,121,112,101, 0, 42,112,116,114, 0, 42,114,101,109,111,118,101, 95,105,116,101,109, 0, 42, - 97,100,100, 95,105,116,101,109, 0,105,116,101,109,115, 0,100,105,102,102, 95,105,116,101,109,115, 0,115,112, 97, 99,101,105, -100, 0,114,101,103,105,111,110,105,100, 0,107,109,105, 95,105,100, 0, 40, 42,112,111,108,108, 41, 40, 41, 0, 42,109,111,100, - 97,108, 95,105,116,101,109,115, 0, 98, 97,115,101,110, 97,109,101, 91, 54, 52, 93, 0, 97, 99,116,107,101,121,109, 97,112, 0, - 42, 99,117,115,116,111,109,100, 97,116, 97, 0, 42,112,121, 95,105,110,115,116, 97,110, 99,101, 0, 42,114,101,112,111,114,116, -115, 0,109, 97, 99,114,111, 0, 42,111,112,109, 0, 42,101,100, 97,116, 97, 0, 42, 99,111,101,102,102,105, 99,105,101,110,116, -115, 0, 97,114,114, 97,121,115,105,122,101, 0,112,111,108,121, 95,111,114,100,101,114, 0, 97,109,112,108,105,116,117,100,101, - 0,112,104, 97,115,101, 95,109,117,108,116,105,112,108,105,101,114, 0,112,104, 97,115,101, 95,111,102,102,115,101,116, 0,118, - 97,108,117,101, 95,111,102,102,115,101,116, 0,109,105,100,118, 97,108, 0, 98,101,102,111,114,101, 95,109,111,100,101, 0, 97, -102,116,101,114, 95,109,111,100,101, 0, 98,101,102,111,114,101, 95, 99,121, 99,108,101,115, 0, 97,102,116,101,114, 95, 99,121, - 99,108,101,115, 0,114,101, 99,116, 0,112,104, 97,115,101, 0,109,111,100,105,102,105, 99, 97,116,105,111,110, 0,115,116,101, -112, 95,115,105,122,101, 0, 42,114,110, 97, 95,112, 97,116,104, 0,112, 99,104, 97,110, 95,110, 97,109,101, 91, 51, 50, 93, 0, -116,114, 97,110,115, 67,104, 97,110, 0,105,100,116,121,112,101, 0,116, 97,114,103,101,116,115, 91, 56, 93, 0,110,117,109, 95, -116, 97,114,103,101,116,115, 0,118, 97,114,105, 97, 98,108,101,115, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, - 93, 0, 42,101,120,112,114, 95, 99,111,109,112, 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 97,114,114, 97,121, 95,105, -110,100,101,120, 0, 99,111,108,111,114, 95,109,111,100,101, 0,102,114,111,109, 91, 49, 50, 56, 93, 0,116,111, 91, 49, 50, 56, - 93, 0,109, 97,112,112,105,110,103,115, 0,115,116,114,105,112,115, 0, 42,114,101,109, 97,112, 0,102, 99,117,114,118,101,115, - 0,115,116,114,105,112, 95,116,105,109,101, 0, 98,108,101,110,100,109,111,100,101, 0,101,120,116,101,110,100,109,111,100,101, - 0, 42,115,112,101, 97,107,101,114, 95,104, 97,110,100,108,101, 0,103,114,111,117,112, 91, 54, 52, 93, 0,103,114,111,117,112, -109,111,100,101, 0,107,101,121,105,110,103,102,108, 97,103, 0,112, 97,116,104,115, 0,100,101,115, 99,114,105,112,116,105,111, -110, 91, 50, 52, 48, 93, 0,116,121,112,101,105,110,102,111, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,112, 97,116,104, 0, - 42,116,109,112, 97, 99,116, 0,110,108, 97, 95,116,114, 97, 99,107,115, 0, 42, 97, 99,116,115,116,114,105,112, 0,100,114,105, -118,101,114,115, 0,111,118,101,114,114,105,100,101,115, 0, 97, 99,116, 95, 98,108,101,110,100,109,111,100,101, 0, 97, 99,116, - 95,101,120,116,101,110,100,109,111,100,101, 0, 97, 99,116, 95,105,110,102,108,117,101,110, 99,101, 0,114,117,108,101, 0,111, -112,116,105,111,110,115, 0,102,101, 97,114, 95,102, 97, 99,116,111,114, 0,115,105,103,110, 97,108, 95,105,100, 0,108,111,111, -107, 95, 97,104,101, 97,100, 0,111,108,111, 99, 91, 51, 93, 0,113,117,101,117,101, 95,115,105,122,101, 0,119, 97,110,100,101, -114, 0,102,108,101,101, 95,100,105,115,116, 97,110, 99,101, 0,104,101, 97,108,116,104, 0,115,116, 97,116,101, 95,105,100, 0, -114,117,108,101,115, 0, 99,111,110,100,105,116,105,111,110,115, 0, 97, 99,116,105,111,110,115, 0,114,117,108,101,115,101,116, - 95,116,121,112,101, 0,114,117,108,101, 95,102,117,122,122,105,110,101,115,115, 0,108, 97,115,116, 95,115,116, 97,116,101, 95, -105,100, 0,108, 97,110,100,105,110,103, 95,115,109,111,111,116,104,110,101,115,115, 0, 98, 97,110,107,105,110,103, 0, 97,103, -103,114,101,115,115,105,111,110, 0, 97,105,114, 95,109,105,110, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95,115, -112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95, 97, 99, 99, 0, 97,105,114, 95,109, 97,120, 95, 97,118,101, 0, 97,105,114, - 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,106,117,109,112, 95,115,112,101,101,100, 0, -108, 97,110,100, 95,109, 97,120, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95, 97, 99, 99, 0,108, 97,110,100, - 95,109, 97,120, 95, 97,118,101, 0,108, 97,110,100, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110, -100, 95,115,116,105, 99,107, 95,102,111,114, 99,101, 0,115,116, 97,116,101,115, 0, 42,115,109,100, 0, 42,102,108,117,105,100, - 95,103,114,111,117,112, 0, 42, 99,111,108,108, 95,103,114,111,117,112, 0, 42,119,116, 0, 42,116,101,120, 95,119,116, 0, 42, -116,101,120, 95,115,104, 97,100,111,119, 0, 42,115,104, 97,100,111,119, 0,112, 48, 91, 51, 93, 0,112, 49, 91, 51, 93, 0,100, -120, 0,111,109,101,103, 97, 0,116,101,109,112, 65,109, 98, 0, 98,101,116, 97, 0,114,101,115, 91, 51, 93, 0, 97,109,112,108, -105,102,121, 0,109, 97,120,114,101,115, 0,118,105,101,119,115,101,116,116,105,110,103,115, 0,110,111,105,115,101, 0,100,105, -115,115, 95,112,101,114, 99,101,110,116, 0,100,105,115,115, 95,115,112,101,101,100, 0,114,101,115, 95,119,116, 91, 51, 93, 0, -100,120, 95,119,116, 0,118, 51,100,110,117,109, 0, 99, 97, 99,104,101, 95, 99,111,109,112, 0, 99, 97, 99,104,101, 95,104,105, -103,104, 95, 99,111,109,112, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, 91, 50, 93, 0,112,116, 99, 97, 99,104,101,115, - 91, 50, 93, 0, 98,111,114,100,101,114, 95, 99,111,108,108,105,115,105,111,110,115, 0,116,105,109,101, 95,115, 99, 97,108,101, - 0,118,111,114,116,105, 99,105,116,121, 0,118,101,108,111, 99,105,116,121, 91, 50, 93, 0,118,101,108, 95,109,117,108,116,105, - 0,118,103,114,112, 95,104,101, 97,116, 95,115, 99, 97,108,101, 91, 50, 93, 0,118,103,114,111,117,112, 95,102,108,111,119, 0, -118,103,114,111,117,112, 95,100,101,110,115,105,116,121, 0,118,103,114,111,117,112, 95,104,101, 97,116, 0, 42,112,111,105,110, -116,115, 95,111,108,100, 0, 42,118,101,108, 0, 42,116,114,105,100,105,118,115, 0,109, 97,116, 95,111,108,100, 91, 52, 93, 91, - 52, 93, 0,110,117,109,116,114,105,115, 0,118,111,108,117,109,101, 95,109, 97,120, 0,118,111,108,117,109,101, 95,109,105,110, - 0,100,105,115,116, 97,110, 99,101, 95,109, 97,120, 0,100,105,115,116, 97,110, 99,101, 95,114,101,102,101,114,101,110, 99,101, - 0, 99,111,110,101, 95, 97,110,103,108,101, 95,111,117,116,101,114, 0, 99,111,110,101, 95, 97,110,103,108,101, 95,105,110,110, -101,114, 0, 99,111,110,101, 95,118,111,108,117,109,101, 95,111,117,116,101,114, 0,114,101,110,100,101,114, 95,102,108, 97,103, - 0, 98,117,105,108,100, 95,115,105,122,101, 95,102,108, 97,103, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103, 0,108, - 97,115,116,115,105,122,101, 91, 50, 93, 0,116,114, 97, 99,107,105,110,103, 0, 42,116,114, 97, 99,107,105,110,103, 95, 99,111, -110,116,101,120,116, 0,112,114,111,120,121, 0,116,114, 97, 99,107, 95,112,114,101,118,105,101,119, 95,104,101,105,103,104,116, - 0, 42,116,114, 97, 99,107, 95,112,114,101,118,105,101,119, 0,116,114, 97, 99,107, 95,112,111,115, 91, 50, 93, 0,116,114, 97, - 99,107, 95,100,105,115, 97, 98,108,101,100, 0, 42,109, 97,114,107,101,114, 0,115,108,105,100,101, 95,115, 99, 97,108,101, 91, - 50, 93, 0,101,114,114,111,114, 0, 42,105,110,116,114,105,110,115,105, 99,115, 0,115,101,110,115,111,114, 95,119,105,100,116, -104, 0,112,105,120,101,108, 95, 97,115,112,101, 99,116, 0,102,111, 99, 97,108, 0,117,110,105,116,115, 0,112,114,105,110, 99, -105,112, 97,108, 91, 50, 93, 0,107, 49, 0,107, 50, 0,107, 51, 0,112,111,115, 91, 50, 93, 0,112, 97,116, 95,109,105,110, 91, - 50, 93, 0,112, 97,116, 95,109, 97,120, 91, 50, 93, 0,115,101, 97,114, 99,104, 95,109,105,110, 91, 50, 93, 0,115,101, 97,114, - 99,104, 95,109, 97,120, 91, 50, 93, 0,109, 97,114,107,101,114,115,110,114, 0,108, 97,115,116, 95,109, 97,114,107,101,114, 0, - 42,109, 97,114,107,101,114,115, 0, 98,117,110,100,108,101, 95,112,111,115, 91, 51, 93, 0,112, 97,116, 95,102,108, 97,103, 0, -115,101, 97,114, 99,104, 95,102,108, 97,103, 0,102,114, 97,109,101,115, 95,108,105,109,105,116, 0,112, 97,116,116,101,114,110, - 95,109, 97,116, 99,104, 0,116,114, 97, 99,107,101,114, 0,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,109,105, -110,105,109,117,109, 95, 99,111,114,114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,116,114, 97, 99,107,101, -114, 0,100,101,102, 97,117,108,116, 95,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,100,101,102, 97,117,108,116, - 95,109,105,110,105,109,117,109, 95, 99,111,114,114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,112, 97,116, -116,101,114,110, 95,115,105,122,101, 0,100,101,102, 97,117,108,116, 95,115,101, 97,114, 99,104, 95,115,105,122,101, 0,100,101, -102, 97,117,108,116, 95,102,114, 97,109,101,115, 95,108,105,109,105,116, 0,100,101,102, 97,117,108,116, 95,109, 97,114,103,105, -110, 0,100,101,102, 97,117,108,116, 95,112, 97,116,116,101,114,110, 95,109, 97,116, 99,104, 0,100,101,102, 97,117,108,116, 95, -102,108, 97,103, 0,109,111,116,105,111,110, 95,102,108, 97,103, 0,107,101,121,102,114, 97,109,101, 49, 0,107,101,121,102,114, - 97,109,101, 50, 0,114,101,102,105,110,101, 95, 99, 97,109,101,114, 97, 95,105,110,116,114,105,110,115,105, 99,115, 0, 99,108, -101, 97,110, 95,102,114, 97,109,101,115, 0, 99,108,101, 97,110, 95, 97, 99,116,105,111,110, 0, 99,108,101, 97,110, 95,101,114, -114,111,114, 0,111, 98,106,101, 99,116, 95,100,105,115,116, 97,110, 99,101, 0,116,111,116, 95,116,114, 97, 99,107, 0, 97, 99, -116, 95,116,114, 97, 99,107, 0,109, 97,120,115, 99, 97,108,101, 0, 42,114,111,116, 95,116,114, 97, 99,107, 0,108,111, 99,105, -110,102, 0,115, 99, 97,108,101,105,110,102, 0,114,111,116,105,110,102, 0, 42,115, 99, 97,108,101,105, 98,117,102, 0,108, 97, -115,116, 95, 99, 97,109,101,114, 97, 0, 99, 97,109,110,114, 0, 42, 99, 97,109,101,114, 97,115, 0,116,114, 97, 99,107,115, 0, -114,101, 99,111,110,115,116,114,117, 99,116,105,111,110, 0,109,101,115,115, 97,103,101, 91, 50, 53, 54, 93, 0,116,111,116, 95, -115,101,103,109,101,110,116, 0, 42,115,101,103,109,101,110,116,115, 0,109, 97,120, 95,115,101,103,109,101,110,116, 0,116,111, -116, 97,108, 95,102,114, 97,109,101,115, 0,116,111,116, 95, 99,104, 97,110,110,101,108, 0,115,111,114,116, 95,109,101,116,104, -111,100, 0,115,111,114,116, 95,105,110,118,101,114,115,101, 0,115,101,116,116,105,110,103,115, 0, 99, 97,109,101,114, 97, 0, -115,116, 97, 98,105,108,105,122, 97,116,105,111,110, 0, 42, 97, 99,116, 95,116,114, 97, 99,107, 0,111, 98,106,101, 99,116,115, - 0,111, 98,106,101, 99,116,110,114, 0,116,111,116, 95,111, 98,106,101, 99,116, 0,100,111,112,101,115,104,101,101,116, 0, 42, - 98,114,117,115,104, 95,103,114,111,117,112, 0, 99,117,114,114,101,110,116, 95,102,114, 97,109,101, 0,100,105,115,112, 95,116, -121,112,101, 0,105,109, 97,103,101, 95,102,105,108,101,102,111,114,109, 97,116, 0,101,102,102,101, 99,116, 95,117,105, 0,112, -114,101,118,105,101,119, 95,105,100, 0,105,110,105,116, 95, 99,111,108,111,114, 95,116,121,112,101, 0,112, 97,100, 95,115, 0, -105,109, 97,103,101, 95,114,101,115,111,108,117,116,105,111,110, 0,115,117, 98,115,116,101,112,115, 0,105,110,105,116, 95, 99, -111,108,111,114, 91, 52, 93, 0, 42,105,110,105,116, 95,116,101,120,116,117,114,101, 0,105,110,105,116, 95,108, 97,121,101,114, -110, 97,109,101, 91, 54, 52, 93, 0,100,114,121, 95,115,112,101,101,100, 0, 99,111,108,111,114, 95,100,114,121, 95,116,104,114, -101,115,104,111,108,100, 0,100,101,112,116,104, 95, 99,108, 97,109,112, 0,100,105,115,112, 95,102, 97, 99,116,111,114, 0,115, -112,114,101, 97,100, 95,115,112,101,101,100, 0, 99,111,108,111,114, 95,115,112,114,101, 97,100, 95,115,112,101,101,100, 0,115, -104,114,105,110,107, 95,115,112,101,101,100, 0,100,114,105,112, 95,118,101,108, 0,100,114,105,112, 95, 97, 99, 99, 0,105,110, -102,108,117,101,110, 99,101, 95,115, 99, 97,108,101, 0,114, 97,100,105,117,115, 95,115, 99, 97,108,101, 0,119, 97,118,101, 95, -100, 97,109,112,105,110,103, 0,119, 97,118,101, 95,115,112,101,101,100, 0,119, 97,118,101, 95,116,105,109,101,115, 99, 97,108, -101, 0,119, 97,118,101, 95,115,112,114,105,110,103, 0,105,109, 97,103,101, 95,111,117,116,112,117,116, 95,112, 97,116,104, 91, - 49, 48, 50, 52, 93, 0,111,117,116,112,117,116, 95,110, 97,109,101, 91, 54, 52, 93, 0,111,117,116,112,117,116, 95,110, 97,109, -101, 50, 91, 54, 52, 93, 0, 42,112,109,100, 0,115,117,114,102, 97, 99,101,115, 0, 97, 99,116,105,118,101, 95,115,117,114, 0, -101,114,114,111,114, 91, 54, 52, 93, 0, 99,111,108,108,105,115,105,111,110, 0,119,101,116,110,101,115,115, 0,112, 97,114,116, -105, 99,108,101, 95,114, 97,100,105,117,115, 0,112, 97,114,116,105, 99,108,101, 95,115,109,111,111,116,104, 0,112, 97,105,110, -116, 95,100,105,115,116, 97,110, 99,101, 0, 42,112, 97,105,110,116, 95,114, 97,109,112, 0, 42,118,101,108, 95,114, 97,109,112, - 0,112,114,111,120,105,109,105,116,121, 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95,100,105,114, 0,119, 97,118,101, 95, -102, 97, 99,116,111,114, 0,119, 97,118,101, 95, 99,108, 97,109,112, 0,109, 97,120, 95,118,101,108,111, 99,105,116,121, 0,115, -109,117,100,103,101, 95,115,116,114,101,110,103,116,104, 0, 0, 84, 89, 80, 69, 26, 2, 0, 0, 99,104, 97,114, 0,117, 99,104, - 97,114, 0,115,104,111,114,116, 0,117,115,104,111,114,116, 0,105,110,116, 0,108,111,110,103, 0,117,108,111,110,103, 0,102, -108,111, 97,116, 0,100,111,117, 98,108,101, 0,105,110,116, 54, 52, 95,116, 0,117,105,110,116, 54, 52, 95,116, 0,118,111,105, -100, 0, 76,105,110,107, 0, 76,105,110,107, 68, 97,116, 97, 0, 76,105,115,116, 66, 97,115,101, 0,118,101, 99, 50,115, 0,118, -101, 99, 50,102, 0,118,101, 99, 51,102, 0,114, 99,116,105, 0,114, 99,116,102, 0, 73, 68, 80,114,111,112,101,114,116,121, 68, - 97,116, 97, 0, 73, 68, 80,114,111,112,101,114,116,121, 0, 73, 68, 0, 76,105, 98,114, 97,114,121, 0, 70,105,108,101, 68, 97, -116, 97, 0, 80,114,101,118,105,101,119, 73,109, 97,103,101, 0, 73,112,111, 68,114,105,118,101,114, 0, 79, 98,106,101, 99,116, - 0, 73,112,111, 67,117,114,118,101, 0, 66, 80,111,105,110,116, 0, 66,101,122, 84,114,105,112,108,101, 0, 73,112,111, 0, 75, -101,121, 66,108,111, 99,107, 0, 75,101,121, 0, 65,110,105,109, 68, 97,116, 97, 0, 84,101,120,116, 76,105,110,101, 0, 84,101, -120,116, 77, 97,114,107,101,114, 0, 84,101,120,116, 0, 80, 97, 99,107,101,100, 70,105,108,101, 0, 67, 97,109,101,114, 97, 0, - 73,109, 97,103,101, 85,115,101,114, 0, 83, 99,101,110,101, 0, 73,109, 97,103,101, 0, 71, 80, 85, 84,101,120,116,117,114,101, - 0, 97,110,105,109, 0, 82,101,110,100,101,114, 82,101,115,117,108,116, 0, 77, 84,101,120, 0, 84,101,120, 0, 80,108,117,103, -105,110, 84,101,120, 0, 67, 66, 68, 97,116, 97, 0, 67,111,108,111,114, 66, 97,110,100, 0, 69,110,118, 77, 97,112, 0, 73,109, - 66,117,102, 0, 80,111,105,110,116, 68,101,110,115,105,116,121, 0, 67,117,114,118,101, 77, 97,112,112,105,110,103, 0, 86,111, -120,101,108, 68, 97,116, 97, 0, 79, 99,101, 97,110, 84,101,120, 0, 98, 78,111,100,101, 84,114,101,101, 0, 84,101,120, 77, 97, -112,112,105,110,103, 0, 67,111,108,111,114, 77, 97,112,112,105,110,103, 0, 76, 97,109,112, 0, 86,111,108,117,109,101, 83,101, -116,116,105,110,103,115, 0, 71, 97,109,101, 83,101,116,116,105,110,103,115, 0, 77, 97,116,101,114,105, 97,108, 0, 71,114,111, -117,112, 0, 86, 70,111,110,116, 0, 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101,116, 97, 69,108,101,109, 0, 66,111,117,110, -100, 66,111,120, 0, 77,101,116, 97, 66, 97,108,108, 0, 78,117,114, 98, 0, 67,104, 97,114, 73,110,102,111, 0, 84,101,120,116, - 66,111,120, 0, 69,100,105,116, 78,117,114, 98, 0, 71, 72, 97,115,104, 0, 67,117,114,118,101, 0, 80, 97,116,104, 0, 83,101, -108, 66,111,120, 0, 69,100,105,116, 70,111,110,116, 0, 77,101,115,104, 0, 77, 83,101,108,101, 99,116, 0, 77, 80,111,108,121, - 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 0, 77, 76,111,111,112, 85, 86, 0, 77, 76,111,111,112, 67,111,108, - 0, 77, 70, 97, 99,101, 0, 77, 84, 70, 97, 99,101, 0, 84, 70, 97, 99,101, 0, 77, 86,101,114,116, 0, 77, 69,100,103,101, 0, - 77, 68,101,102,111,114,109, 86,101,114,116, 0, 77, 67,111,108, 0, 77, 83,116,105, 99,107,121, 0, 66, 77, 69,100,105,116, 77, -101,115,104, 0, 67,117,115,116,111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 0, 77, 68,101,102,111,114,109, 87, -101,105,103,104,116, 0, 77, 70,108,111, 97,116, 80,114,111,112,101,114,116,121, 0, 77, 73,110,116, 80,114,111,112,101,114,116, -121, 0, 77, 83,116,114,105,110,103, 80,114,111,112,101,114,116,121, 0, 79,114,105,103, 83,112, 97, 99,101, 70, 97, 99,101, 0, - 79,114,105,103, 83,112, 97, 99,101, 76,111,111,112, 0, 77, 68,105,115,112,115, 0, 77,117,108,116,105,114,101,115, 67,111,108, - 0, 77,117,108,116,105,114,101,115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 70, 97, 99,101, 0, 77,117, -108,116,105,114,101,115, 69,100,103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118,101,108, 0, 77, 82,101, 99, 97,115,116, - 0, 71,114,105,100, 80, 97,105,110,116, 77, 97,115,107, 0, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,112,112, -105,110,103, 73,110,102,111, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,117, 98,115,117,114,102, 77,111,100,105,102, -105,101,114, 68, 97,116, 97, 0, 76, 97,116,116,105, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,117,114,118, -101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,117,105,108,100, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, - 77, 97,115,107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,114, 97,121, 77,111,100,105,102,105,101,114, 68, 97, -116, 97, 0, 77,105,114,114,111,114, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,100,103,101, 83,112,108,105,116, 77, -111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66,101,118,101,108, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 77, -101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 77,111,100,105,102,105,101,114, 68, 97,116, - 97, 0, 83,109,111,107,101, 68,111,109, 97,105,110, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,101, 70,108,111,119, 83, -101,116,116,105,110,103,115, 0, 83,109,111,107,101, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 68,105,115,112,108, 97, - 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 85, 86, 80,114,111,106,101, 99,116, 77,111,100,105,102,105,101,114, - 68, 97,116, 97, 0, 68,101, 99,105,109, 97,116,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,111,116,104, - 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67, 97,115,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87, 97, -118,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 65,114,109, 97,116,117,114,101, 77,111,100,105,102,105,101,114, 68, - 97,116, 97, 0, 72,111,111,107, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,111,102,116, 98,111,100,121, 77,111,100, -105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116, -104, 0, 67,108,111,116,104, 83,105,109, 83,101,116,116,105,110,103,115, 0, 67,108,111,116,104, 67,111,108,108, 83,101,116,116, -105,110,103,115, 0, 80,111,105,110,116, 67, 97, 99,104,101, 0, 67,111,108,108,105,115,105,111,110, 77,111,100,105,102,105,101, -114, 68, 97,116, 97, 0, 66, 86, 72, 84,114,101,101, 0, 83,117,114,102, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, - 97, 0, 68,101,114,105,118,101,100, 77,101,115,104, 0, 66, 86, 72, 84,114,101,101, 70,114,111,109, 77,101,115,104, 0, 66,111, -111,108,101, 97,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 68,101,102, 73,110,102,108,117,101,110, 99,101, 0, - 77, 68,101,102, 67,101,108,108, 0, 77,101,115,104, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, - 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, - 99,108,101, 83,121,115,116,101,109, 0, 80, 97,114,116,105, 99,108,101, 73,110,115,116, 97,110, 99,101, 77,111,100,105,102,105, -101,114, 68, 97,116, 97, 0, 69,120,112,108,111,100,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,117,108,116,105, -114,101,115, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105,109, 77,111,100,105,102,105,101,114, - 68, 97,116, 97, 0, 70,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 83,104,114,105,110,107,119,114, 97,112, - 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,105,109,112,108,101, 68,101,102,111,114,109, 77,111,100,105,102,105,101, -114, 68, 97,116, 97, 0, 83,104, 97,112,101, 75,101,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,111,108,105,100, -105,102,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83, 99,114,101,119, 77,111,100,105,102,105,101,114, 68, 97,116, - 97, 0, 79, 99,101, 97,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 79, 99,101, 97,110, 0, 79, 99,101, 97,110, 67, - 97, 99,104,101, 0, 87, 97,114,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, 71, 69,100, -105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, 71, 77,105,120, 77,111,100,105,102,105, -101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, 71, 80,114,111,120,105,109,105,116,121, 77,111,100,105,102,105,101,114, - 68, 97,116, 97, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,121, -110, 97,109,105, 99, 80, 97,105,110,116, 67, 97,110,118, 97,115, 83,101,116,116,105,110,103,115, 0, 68,121,110, 97,109,105, 99, - 80, 97,105,110,116, 66,114,117,115,104, 83,101,116,116,105,110,103,115, 0, 82,101,109,101,115,104, 77,111,100,105,102,105,101, -114, 68, 97,116, 97, 0, 69,100,105,116, 76, 97,116,116, 0, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102,111,114,109, 71,114, -111,117,112, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 98, 65, 99,116,105,111,110, 0, 98, 80,111,115,101, 0, - 98, 71, 80,100, 97,116, 97, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116,105,110,103,115, 0, 98, 77,111,116,105,111,110, - 80, 97,116,104, 0, 66,117,108,108,101,116, 83,111,102,116, 66,111,100,121, 0, 80, 97,114,116, 68,101,102,108,101, 99,116, 0, - 83,111,102,116, 66,111,100,121, 0, 79, 98, 72,111,111,107, 0, 68,117,112,108,105, 79, 98,106,101, 99,116, 0, 82, 78, 71, 0, - 69,102,102,101, 99,116,111,114, 87,101,105,103,104,116,115, 0, 80, 84, 67, 97, 99,104,101, 69,120,116,114, 97, 0, 80, 84, 67, - 97, 99,104,101, 77,101,109, 0, 80, 84, 67, 97, 99,104,101, 69,100,105,116, 0, 83, 66, 86,101,114,116,101,120, 0, 66,111,100, -121, 80,111,105,110,116, 0, 66,111,100,121, 83,112,114,105,110,103, 0, 83, 66, 83, 99,114, 97,116, 99,104, 0, 70,108,117,105, -100, 86,101,114,116,101,120, 86,101,108,111, 99,105,116,121, 0, 87,111,114,108,100, 0, 66, 97,115,101, 0, 65,118,105, 67,111, -100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107, -116,105,109,101, 67,111,100,101, 99, 83,101,116,116,105,110,103,115, 0, 70, 70, 77,112,101,103, 67,111,100,101, 99, 68, 97,116, - 97, 0, 65,117,100,105,111, 68, 97,116, 97, 0, 83, 99,101,110,101, 82,101,110,100,101,114, 76, 97,121,101,114, 0, 73,109, 97, -103,101, 70,111,114,109, 97,116, 68, 97,116, 97, 0, 82,101,110,100,101,114, 68, 97,116, 97, 0, 82,101,110,100,101,114, 80,114, -111,102,105,108,101, 0, 71, 97,109,101, 68,111,109,101, 0, 71, 97,109,101, 70,114, 97,109,105,110,103, 0, 82,101, 99, 97,115, -116, 68, 97,116, 97, 0, 71, 97,109,101, 68, 97,116, 97, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 80, 97,105,110,116, 0, - 66,114,117,115,104, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108, -101, 66,114,117,115,104, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 69,100,105,116, 83,101,116,116,105,110,103,115, 0, - 83, 99,117,108,112,116, 0, 85,118, 83, 99,117,108,112,116, 0, 86, 80, 97,105,110,116, 0, 84,114, 97,110,115,102,111,114,109, - 79,114,105,101,110,116, 97,116,105,111,110, 0, 85,110,105,102,105,101,100, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, - 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,115, 0, 85,110,105,116, 83,101,116,116,105,110,103, -115, 0, 80,104,121,115,105, 99,115, 83,101,116,116,105,110,103,115, 0, 69,100,105,116,105,110,103, 0, 83, 99,101,110,101, 83, -116, 97,116,115, 0, 68, 97,103, 70,111,114,101,115,116, 0, 77,111,118,105,101, 67,108,105,112, 0, 66, 71,112,105, 99, 0, 77, -111,118,105,101, 67,108,105,112, 85,115,101,114, 0, 82,101,103,105,111,110, 86,105,101,119, 51, 68, 0, 82,101,110,100,101,114, - 73,110,102,111, 0, 82,101,110,100,101,114, 69,110,103,105,110,101, 0, 86,105,101,119, 68,101,112,116,104,115, 0, 83,109,111, -111,116,104, 86,105,101,119, 83,116,111,114,101, 0,119,109, 84,105,109,101,114, 0, 86,105,101,119, 51, 68, 0, 83,112, 97, 99, -101, 76,105,110,107, 0, 86,105,101,119, 50, 68, 0, 83,112, 97, 99,101, 73,110,102,111, 0, 83,112, 97, 99,101, 73,112,111, 0, - 98, 68,111,112,101, 83,104,101,101,116, 0, 83,112, 97, 99,101, 66,117,116,115, 0, 83,112, 97, 99,101, 83,101,113, 0, 70,105, -108,101, 83,101,108,101, 99,116, 80, 97,114, 97,109,115, 0, 83,112, 97, 99,101, 70,105,108,101, 0, 70,105,108,101, 76,105,115, -116, 0,119,109, 79,112,101,114, 97,116,111,114, 0, 70,105,108,101, 76, 97,121,111,117,116, 0, 83,112, 97, 99,101, 79,111,112, -115, 0, 84,114,101,101, 83,116,111,114,101, 0, 84,114,101,101, 83,116,111,114,101, 69,108,101,109, 0, 83,112, 97, 99,101, 73, -109, 97,103,101, 0, 83, 99,111,112,101,115, 0, 72,105,115,116,111,103,114, 97,109, 0, 83,112, 97, 99,101, 78,108, 97, 0, 83, -112, 97, 99,101, 84,101,120,116, 0, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 83, 99,114,105,112,116, 0, 83,112, 97, 99, -101, 84,105,109,101, 67, 97, 99,104,101, 0, 83,112, 97, 99,101, 84,105,109,101, 0, 83,112, 97, 99,101, 78,111,100,101, 0, 83, -112, 97, 99,101, 76,111,103,105, 99, 0, 67,111,110,115,111,108,101, 76,105,110,101, 0, 83,112, 97, 99,101, 67,111,110,115,111, -108,101, 0, 83,112, 97, 99,101, 85,115,101,114, 80,114,101,102, 0, 83,112, 97, 99,101, 67,108,105,112, 0, 77,111,118,105,101, - 67,108,105,112, 83, 99,111,112,101,115, 0,117,105, 70,111,110,116, 0,117,105, 70,111,110,116, 83,116,121,108,101, 0,117,105, - 83,116,121,108,101, 0,117,105, 87,105,100,103,101,116, 67,111,108,111,114,115, 0,117,105, 87,105,100,103,101,116, 83,116, 97, -116,101, 67,111,108,111,114,115, 0,117,105, 80, 97,110,101,108, 67,111,108,111,114,115, 0, 84,104,101,109,101, 85, 73, 0, 84, -104,101,109,101, 83,112, 97, 99,101, 0, 84,104,101,109,101, 87,105,114,101, 67,111,108,111,114, 0, 98, 84,104,101,109,101, 0, - 98, 65,100,100,111,110, 0, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 0, 98, 83, 99,114,101,101, -110, 0, 83, 99,114, 86,101,114,116, 0, 83, 99,114, 69,100,103,101, 0, 80, 97,110,101,108, 0, 80, 97,110,101,108, 84,121,112, -101, 0,117,105, 76, 97,121,111,117,116, 0, 83, 99,114, 65,114,101, 97, 0, 83,112, 97, 99,101, 84,121,112,101, 0, 65, 82,101, -103,105,111,110, 0, 65, 82,101,103,105,111,110, 84,121,112,101, 0, 70,105,108,101, 71,108,111, 98, 97,108, 0, 83,116,114,105, -112, 69,108,101,109, 0, 83,116,114,105,112, 67,114,111,112, 0, 83,116,114,105,112, 84,114, 97,110,115,102,111,114,109, 0, 83, -116,114,105,112, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 83,116,114,105,112, 80,114,111,120,121, 0, 83,116,114,105, -112, 0, 80,108,117,103,105,110, 83,101,113, 0, 83,101,113,117,101,110, 99,101, 0, 98, 83,111,117,110,100, 0, 77,101,116, 97, - 83,116, 97, 99,107, 0, 87,105,112,101, 86, 97,114,115, 0, 71,108,111,119, 86, 97,114,115, 0, 84,114, 97,110,115,102,111,114, -109, 86, 97,114,115, 0, 83,111,108,105,100, 67,111,108,111,114, 86, 97,114,115, 0, 83,112,101,101,100, 67,111,110,116,114,111, -108, 86, 97,114,115, 0, 69,102,102,101, 99,116, 0, 66,117,105,108,100, 69,102,102, 0, 80, 97,114,116, 69,102,102, 0, 80, 97, -114,116,105, 99,108,101, 0, 87, 97,118,101, 69,102,102, 0, 98, 80,114,111,112,101,114,116,121, 0, 98, 78,101, 97,114, 83,101, -110,115,111,114, 0, 98, 77,111,117,115,101, 83,101,110,115,111,114, 0, 98, 84,111,117, 99,104, 83,101,110,115,111,114, 0, 98, - 75,101,121, 98,111, 97,114,100, 83,101,110,115,111,114, 0, 98, 80,114,111,112,101,114,116,121, 83,101,110,115,111,114, 0, 98, - 65, 99,116,117, 97,116,111,114, 83,101,110,115,111,114, 0, 98, 68,101,108, 97,121, 83,101,110,115,111,114, 0, 98, 67,111,108, -108,105,115,105,111,110, 83,101,110,115,111,114, 0, 98, 82, 97,100, 97,114, 83,101,110,115,111,114, 0, 98, 82, 97,110,100,111, -109, 83,101,110,115,111,114, 0, 98, 82, 97,121, 83,101,110,115,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 83,101,110,115, -111,114, 0, 98, 77,101,115,115, 97,103,101, 83,101,110,115,111,114, 0, 98, 83,101,110,115,111,114, 0, 98, 67,111,110,116,114, -111,108,108,101,114, 0, 98, 74,111,121,115,116,105, 99,107, 83,101,110,115,111,114, 0, 98, 69,120,112,114,101,115,115,105,111, -110, 67,111,110,116, 0, 98, 80,121,116,104,111,110, 67,111,110,116, 0, 98, 65, 99,116,117, 97,116,111,114, 0, 98, 65,100,100, - 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 65, 99,116,105,111,110, 65, 99,116,117, 97,116,111,114, 0, 83, -111,117,110,100, 51, 68, 0, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 98, 69,100,105,116, 79, 98,106,101, 99, -116, 65, 99,116,117, 97,116,111,114, 0, 98, 83, 99,101,110,101, 65, 99,116,117, 97,116,111,114, 0, 98, 80,114,111,112,101,114, -116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 73,112,111, 65, - 99,116,117, 97,116,111,114, 0, 98, 67, 97,109,101,114, 97, 65, 99,116,117, 97,116,111,114, 0, 98, 67,111,110,115,116,114, 97, -105,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 71,114,111,117,112, 65, 99,116,117, 97,116,111,114, 0, 98, 82, 97,110,100, -111,109, 65, 99,116,117, 97,116,111,114, 0, 98, 77,101,115,115, 97,103,101, 65, 99,116,117, 97,116,111,114, 0, 98, 71, 97,109, -101, 65, 99,116,117, 97,116,111,114, 0, 98, 86,105,115,105, 98,105,108,105,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 84, -119,111, 68, 70,105,108,116,101,114, 65, 99,116,117, 97,116,111,114, 0, 98, 80, 97,114,101,110,116, 65, 99,116,117, 97,116,111, -114, 0, 98, 83,116, 97,116,101, 65, 99,116,117, 97,116,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 65, 99,116,117, 97,116, -111,114, 0, 98, 83,116,101,101,114,105,110,103, 65, 99,116,117, 97,116,111,114, 0, 71,114,111,117,112, 79, 98,106,101, 99,116, - 0, 66,111,110,101, 0, 98, 65,114,109, 97,116,117,114,101, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, 86,101,114,116, 0, - 98, 80,111,115,101, 67,104, 97,110,110,101,108, 0, 98, 73, 75, 80, 97,114, 97,109, 0, 98, 73,116, 97,115, 99, 0, 98, 65, 99, -116,105,111,110, 71,114,111,117,112, 0, 83,112, 97, 99,101, 65, 99,116,105,111,110, 0, 98, 65, 99,116,105,111,110, 67,104, 97, -110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97, -105,110,116, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 84, 97,114,103,101,116, 0, 98, 80,121,116,104,111,110, 67,111,110, -115,116,114, 97,105,110,116, 0, 98, 75,105,110,101,109, 97,116,105, 99, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,112, -108,105,110,101, 73, 75, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97, 99,107, 84,111, 67,111,110,115,116,114, 97, -105,110,116, 0, 98, 82,111,116, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 97,116, -101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,107,101, 67,111,110,115,116,114, 97, -105,110,116, 0, 98, 83, 97,109,101, 86,111,108,117,109,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115, - 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 77,105,110, 77, 97,120, 67,111,110,115,116,114, 97,105,110,116, - 0, 98, 65, 99,116,105,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99,107, 84,114, 97, 99,107, 67,111,110, -115,116,114, 97,105,110,116, 0, 98, 68, 97,109,112, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 70,111, -108,108,111,119, 80, 97,116,104, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,116,114,101,116, 99,104, 84,111, 67,111,110, -115,116,114, 97,105,110,116, 0, 98, 82,105,103,105,100, 66,111,100,121, 74,111,105,110,116, 67,111,110,115,116,114, 97,105,110, -116, 0, 98, 67,108, 97,109,112, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,104,105,108,100, 79,102, 67,111,110, -115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115,102,111,114,109, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 80,105, -118,111,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110, -116, 0, 98, 82,111,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,109,105,116, - 67,111,110,115,116,114, 97,105,110,116, 0, 98, 68,105,115,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, - 98, 83,104,114,105,110,107,119,114, 97,112, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 84,114, 97, - 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67, 97,109,101,114, 97, 83,111,108,118,101,114, 67,111,110,115,116,114, - 97,105,110,116, 0, 98, 79, 98,106,101, 99,116, 83,111,108,118,101,114, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99, -116,105,111,110, 77,111,100,105,102,105,101,114, 0, 98, 65, 99,116,105,111,110, 83,116,114,105,112, 0, 98, 78,111,100,101, 83, -116, 97, 99,107, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 0, 98, 78,111,100,101, 76,105,110,107, 0, 98, 78,111,100,101, - 80,114,101,118,105,101,119, 0, 98, 78,111,100,101, 0,117,105, 66,108,111, 99,107, 0, 98, 78,111,100,101, 84,121,112,101, 0, - 98, 78,111,100,101, 84,114,101,101, 69,120,101, 99, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 73,110, -116, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 70,108,111, 97,116, 0, 98, 78,111,100,101, 83,111, 99, -107,101,116, 86, 97,108,117,101, 66,111,111,108,101, 97,110, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, - 86,101, 99,116,111,114, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 82, 71, 66, 65, 0, 78,111,100,101, - 70,114, 97,109,101, 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 0, 67,111,108,111,114, 67,111,114,114,101, 99,116, -105,111,110, 68, 97,116, 97, 0, 78,111,100,101, 67,111,108,111,114, 67,111,114,114,101, 99,116,105,111,110, 0, 78,111,100,101, - 66,111,107,101,104, 73,109, 97,103,101, 0, 78,111,100,101, 66,111,120, 77, 97,115,107, 0, 78,111,100,101, 69,108,108,105,112, -115,101, 77, 97,115,107, 0, 78,111,100,101, 73,109, 97,103,101, 76, 97,121,101,114, 0, 78,111,100,101, 66,108,117,114, 68, 97, -116, 97, 0, 78,111,100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 66,105,108, 97,116,101,114, 97,108, 66,108, -117,114, 68, 97,116, 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100,101, 73,109, 97,103,101, 70,105,108,101, 0, - 78,111,100,101, 73,109, 97,103,101, 77,117,108,116,105, 70,105,108,101, 0, 78,111,100,101, 73,109, 97,103,101, 77,117,108,116, -105, 70,105,108,101, 83,111, 99,107,101,116, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,101, 84,119,111, 88, 89, -115, 0, 78,111,100,101, 84,119,111, 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,114,121, 0, 78,111,100, -101, 86,101,114,116,101,120, 67,111,108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,101, 83, 99,114,105,112, -116, 68,105, 99,116, 0, 78,111,100,101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,112, 0, 78,111,100,101, - 76,101,110,115, 68,105,115,116, 0, 78,111,100,101, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 78,111,100,101, 67,111, -108,111,114,115,112,105,108,108, 0, 78,111,100,101, 84,101,120, 66, 97,115,101, 0, 78,111,100,101, 84,101,120, 83,107,121, 0, - 78,111,100,101, 84,101,120, 73,109, 97,103,101, 0, 78,111,100,101, 84,101,120, 67,104,101, 99,107,101,114, 0, 78,111,100,101, - 84,101,120, 69,110,118,105,114,111,110,109,101,110,116, 0, 78,111,100,101, 84,101,120, 71,114, 97,100,105,101,110,116, 0, 78, -111,100,101, 84,101,120, 78,111,105,115,101, 0, 78,111,100,101, 84,101,120, 86,111,114,111,110,111,105, 0, 78,111,100,101, 84, -101,120, 77,117,115,103,114, 97,118,101, 0, 78,111,100,101, 84,101,120, 87, 97,118,101, 0, 78,111,100,101, 84,101,120, 77, 97, -103,105, 99, 0, 78,111,100,101, 83,104, 97,100,101,114, 65,116,116,114,105, 98,117,116,101, 0, 84,101,120, 78,111,100,101, 79, -117,116,112,117,116, 0, 67,117,114,118,101, 77, 97,112, 80,111,105,110,116, 0, 67,117,114,118,101, 77, 97,112, 0, 66,114,117, -115,104, 67,108,111,110,101, 0, 67,117,115,116,111,109, 68, 97,116, 97, 76, 97,121,101,114, 0, 67,117,115,116,111,109, 68, 97, -116, 97, 69,120,116,101,114,110, 97,108, 0, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 66, -111,105,100, 80, 97,114,116,105, 99,108,101, 0, 66,111,105,100, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,112,114, -105,110,103, 0, 67,104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, - 0, 80, 97,114,116,105, 99,108,101, 68,117,112,108,105, 87,101,105,103,104,116, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, - 97, 0, 83, 80, 72, 70,108,117,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105, -110,103,115, 0, 66,111,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101, -121, 0, 75, 68, 84,114,101,101, 0, 80, 97,114,116,105, 99,108,101, 68,114, 97,119, 68, 97,116, 97, 0, 76,105,110,107, 78,111, -100,101, 0, 98, 71, 80, 68,115,112,111,105,110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, 71, 80, 68,102,114, 97, -109,101, 0, 98, 71, 80, 68,108, 97,121,101,114, 0, 82,101,112,111,114,116, 76,105,115,116, 0,119,109, 87,105,110,100,111,119, - 77, 97,110, 97,103,101,114, 0,119,109, 87,105,110,100,111,119, 0,119,109, 75,101,121, 67,111,110,102,105,103, 0,119,109, 69, -118,101,110,116, 0,119,109, 83,117, 98, 87,105,110,100,111,119, 0,119,109, 71,101,115,116,117,114,101, 0,119,109, 75,101,121, - 77, 97,112, 73,116,101,109, 0, 80,111,105,110,116,101,114, 82, 78, 65, 0,119,109, 75,101,121, 77, 97,112, 68,105,102,102, 73, -116,101,109, 0,119,109, 75,101,121, 77, 97,112, 0,119,109, 79,112,101,114, 97,116,111,114, 84,121,112,101, 0, 70, 77,111,100, -105,102,105,101,114, 0, 70, 77,111,100, 95, 71,101,110,101,114, 97,116,111,114, 0, 70, 77,111,100, 95, 70,117,110, 99,116,105, -111,110, 71,101,110,101,114, 97,116,111,114, 0, 70, 67, 77, 95, 69,110,118,101,108,111,112,101, 68, 97,116, 97, 0, 70, 77,111, -100, 95, 69,110,118,101,108,111,112,101, 0, 70, 77,111,100, 95, 67,121, 99,108,101,115, 0, 70, 77,111,100, 95, 80,121,116,104, -111,110, 0, 70, 77,111,100, 95, 76,105,109,105,116,115, 0, 70, 77,111,100, 95, 78,111,105,115,101, 0, 70, 77,111,100, 95, 83, -116,101,112,112,101,100, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 0, 68,114,105,118,101,114, 86, 97,114, 0, 67,104, - 97,110,110,101,108, 68,114,105,118,101,114, 0, 70, 80,111,105,110,116, 0, 70, 67,117,114,118,101, 0, 65,110,105,109, 77, 97, -112, 80, 97,105,114, 0, 65,110,105,109, 77, 97,112,112,101,114, 0, 78,108, 97, 83,116,114,105,112, 0, 78,108, 97, 84,114, 97, - 99,107, 0, 75, 83, 95, 80, 97,116,104, 0, 75,101,121,105,110,103, 83,101,116, 0, 65,110,105,109, 79,118,101,114,114,105,100, -101, 0, 73,100, 65,100,116, 84,101,109,112,108, 97,116,101, 0, 66,111,105,100, 82,117,108,101, 0, 66,111,105,100, 82,117,108, -101, 71,111, 97,108, 65,118,111,105,100, 0, 66,111,105,100, 82,117,108,101, 65,118,111,105,100, 67,111,108,108,105,115,105,111, -110, 0, 66,111,105,100, 82,117,108,101, 70,111,108,108,111,119, 76,101, 97,100,101,114, 0, 66,111,105,100, 82,117,108,101, 65, -118,101,114, 97,103,101, 83,112,101,101,100, 0, 66,111,105,100, 82,117,108,101, 70,105,103,104,116, 0, 66,111,105,100, 83,116, - 97,116,101, 0, 70, 76, 85, 73, 68, 95, 51, 68, 0, 87, 84, 85, 82, 66, 85, 76, 69, 78, 67, 69, 0, 83,112,101, 97,107,101,114, - 0, 77,111,118,105,101, 67,108,105,112, 80,114,111,120,121, 0, 77,111,118,105,101, 67,108,105,112, 67, 97, 99,104,101, 0, 77, -111,118,105,101, 84,114, 97, 99,107,105,110,103, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 84,114, 97, 99,107, 0, - 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 77, 97,114,107,101,114, 0, 77,111,118,105,101, 82,101, 99,111,110,115,116, -114,117, 99,116,101,100, 67, 97,109,101,114, 97, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 67, 97,109,101,114, 97, - 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 83,101,116,116,105,110,103,115, 0, 77,111,118,105,101, 84,114, 97, 99, -107,105,110,103, 83,116, 97, 98,105,108,105,122, 97,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 82, -101, 99,111,110,115,116,114,117, 99,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 79, 98,106,101, 99, -116, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 83,116, 97,116,115, 0, 77,111,118,105,101, 84,114, 97, 99,107,105, -110,103, 68,111,112,101,115,104,101,101,116, 67,104, 97,110,110,101,108, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, - 68,111,112,101,115,104,101,101,116, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 83,117,114,102, 97, 99,101, 0, 80, 97, -105,110,116, 83,117,114,102, 97, 99,101, 68, 97,116, 97, 0, 0, 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 8, 0, 8, 0, 8, 0, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 12, 0, 16, 0, 16, 0, 32, 0,128, 0, -120, 0,144, 8, 0, 0, 40, 0,144, 0,112, 5,112, 0, 36, 0, 56, 0,160, 0,192, 0,224, 0, 96, 0, 40, 0, 48, 0,224, 0, - 16, 0,200, 0, 40, 0,216, 11, 48, 5, 0, 0, 0, 0, 0, 0, 56, 1,168, 1,216, 4, 24, 0, 8, 3,200, 0, 0, 0,104, 0, - 64, 1, 56, 4, 80, 0, 32, 1,144, 0, 56, 3, 16, 2, 88, 0, 16, 0,128, 3,152, 0,136, 4, 0, 0,104, 0,104, 0, 0, 1, - 80, 0, 8, 0, 16, 0, 32, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0, 16, 5, 8, 0, 12, 0, 16, 0, 8, 0, 12, 0, 4, 0, - 20, 0, 48, 0, 64, 0, 20, 0, 12, 0, 16, 0, 4, 0, 8, 0, 0, 0,184, 0,160, 1, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, - 8, 0, 24, 0, 16, 0, 64, 0, 24, 0, 12, 0, 64, 0, 4, 0, 16, 0,112, 0,200, 0,136, 0,192, 0,192, 0,128, 0,192, 0, -192, 0,128, 0,120, 0,200, 0,120, 0,144, 0, 16, 1, 56, 0,200, 0, 24, 1, 40, 1,120, 0,184, 0,200, 0, 64, 1,200, 0, - 88, 1,112, 0,168, 0, 0, 0,152, 0, 48, 0, 40, 5,192, 0, 0, 0,152, 0, 0, 0, 0, 0,128, 0, 8, 0, 8, 0,112, 1, -144, 0,152, 2,136, 0,192, 0,120, 0,128, 0,224, 4,208, 0,200, 0,112, 0,208, 0,144, 0, 16, 5, 0, 0, 0, 0, 48, 1, -104, 1,160, 1,104, 1,136, 0,104, 0,112, 0,128, 0, 16, 0, 96, 1, 88, 0, 0, 0,200, 0,216, 0,152, 0, 48, 0, 24, 0, -120, 0,152, 0,216, 1, 0, 1,184, 0, 0, 0, 72, 0, 32, 0,176, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 12, 0, 24, 2, - 40, 0,184, 0,152, 0, 64, 0, 72, 0, 32, 0,128, 0, 24, 0, 56, 9, 64, 0, 24, 0, 16, 0, 56, 0,168, 0, 96, 0, 32, 0, - 96, 6, 56, 0, 16, 0,168, 0,104, 0, 32, 0, 64, 0,120, 0, 24, 0,248, 1, 32, 0, 8, 0, 24, 0, 80, 8, 0, 0, 0, 0, -224, 8,104, 0, 8, 0,112, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 56, 0,144, 0, 64, 0,240, 0,112, 0,248, 0, -240, 0,160, 7,104, 0, 0, 0,168, 0, 0, 0, 24, 1, 16, 0, 16, 0, 40, 33,128, 16, 24, 16,216, 0,160, 2,168, 5, 64, 0, - 24, 0,208, 0, 48, 1, 72, 0, 40, 0,136, 1,104, 0, 56, 1, 56, 0, 24, 4, 32, 0,232, 0, 32, 0, 32, 0, 8, 0, 80, 3, -224, 1, 16, 0,168, 36, 80, 0, 56, 0,112, 38, 8, 1, 32, 0, 40, 0, 88, 1, 0, 0, 0, 0,160, 0, 0, 0, 40, 1, 0, 0, - 48, 4, 8, 1, 16, 0, 8, 0, 44, 0, 16, 4, 72, 3,200, 4, 80, 1,208, 4, 32, 0, 12, 0, 24, 0, 32, 0, 16, 0, 24, 0, - 24, 0, 32, 0,136, 1, 0, 0, 64, 0, 96, 0, 80, 0, 8, 0, 80, 0,136, 0,200, 0, 72, 0, 8, 0,136, 0, 76, 0, 72, 0, -204, 0,136, 0,136, 0,128, 0,136, 0, 92, 0,128, 0, 80, 0,112, 0, 16, 0,168, 0, 32, 0, 72, 0,120, 0, 24, 0,144, 0, -112, 0,148, 0, 32, 0,128, 0, 88, 0, 88, 0,208, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0,160, 0, 48, 0, 40, 0, 72, 1, - 0, 1, 16, 0, 32, 2, 4, 0, 40, 0,120, 0, 72, 1,120, 0, 56, 0,120, 0,160, 0,112, 0,184, 0, 24, 0, 88, 0, 80, 0, - 80, 0, 80, 0, 8, 0, 72, 0,104, 0,104, 0, 80, 0, 80, 0, 24, 0, 88, 0,104, 0, 16, 0,144, 0,128, 0, 88, 0, 28, 0, - 28, 0, 28, 0, 88, 0, 24, 0,160, 0, 16, 0,152, 0, 72, 0,168, 0, 48, 0,208, 0, 56, 0, 16, 0,112, 1, 0, 0, 0, 0, - 0, 0, 16, 0, 16, 0, 4, 0, 24, 0, 16, 0, 4, 0, 16, 0, 24, 0,104, 0, 20, 0, 24, 0, 24, 0, 8, 0, 40, 0, 28, 0, - 12, 0, 12, 0, 32, 4, 40, 4, 64, 4, 44, 0, 24, 0, 8, 0,128, 0, 64, 0, 32, 0, 16, 0, 32, 0, 32, 0, 8, 0, 96, 0, - 20, 0,200, 3,216, 3,208, 3,200, 3,208, 3,208, 3,200, 3,208, 3,208, 3,208, 3,208, 3, 64, 0, 64, 0, 12, 0, 56, 0, - 24, 0,104, 0, 0, 4, 24, 0, 56, 0, 56, 0, 20, 0, 16, 0, 64, 0, 40, 0, 32, 0,192, 0, 60, 0, 16, 3,104, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 40, 0,192, 0, 40, 0, 88, 1, 0, 1,168, 0, 0, 0, 0, 0, 0, 0,184, 0, 0, 0, - 32, 0,136, 0, 0, 0,120, 0, 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, 16, 0, 24, 0, 20, 0, 20, 0, 56, 0, 24, 2, 40, 1, - 16, 0,104, 0, 0, 1, 40, 0,208, 0,104, 0,112, 0,216, 1, 32, 0,128, 0, 56, 0, 80, 0, 64, 0,104, 0, 72, 0, 64, 0, -128, 0, 0, 0, 0, 0,184, 0, 8, 3, 0, 0, 24, 1,192, 0, 16, 0, 72, 0, 48, 0, 64, 0, 56, 0, 24, 0,128, 0, 0, 1, - 48, 0, 32, 0, 16, 6, 0, 0, 83, 84, 82, 67,217, 1, 0, 0, 12, 0, 2, 0, 12, 0, 0, 0, 12, 0, 1, 0, 13, 0, 3, 0, - 13, 0, 0, 0, 13, 0, 1, 0, 11, 0, 2, 0, 14, 0, 2, 0, 11, 0, 3, 0, 11, 0, 4, 0, 15, 0, 2, 0, 2, 0, 5, 0, - 2, 0, 6, 0, 16, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 17, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, - 18, 0, 4, 0, 4, 0, 8, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 19, 0, 4, 0, 7, 0, 8, 0, 7, 0, 9, 0, - 7, 0, 10, 0, 7, 0, 11, 0, 20, 0, 4, 0, 11, 0, 12, 0, 14, 0, 13, 0, 4, 0, 14, 0, 4, 0, 15, 0, 21, 0, 10, 0, - 21, 0, 0, 0, 21, 0, 1, 0, 0, 0, 16, 0, 0, 0, 17, 0, 2, 0, 18, 0, 0, 0, 19, 0, 4, 0, 20, 0, 20, 0, 21, 0, - 4, 0, 22, 0, 4, 0, 23, 0, 22, 0, 11, 0, 11, 0, 0, 0, 11, 0, 1, 0, 22, 0, 24, 0, 23, 0, 25, 0, 0, 0, 26, 0, - 2, 0, 27, 0, 2, 0, 28, 0, 2, 0, 18, 0, 4, 0, 29, 0, 4, 0, 30, 0, 21, 0, 31, 0, 23, 0, 6, 0, 22, 0, 32, 0, - 22, 0, 33, 0, 24, 0, 34, 0, 0, 0, 35, 0, 0, 0, 36, 0, 23, 0, 37, 0, 25, 0, 5, 0, 4, 0, 38, 0, 4, 0, 39, 0, - 2, 0, 40, 0, 2, 0, 41, 0, 4, 0, 42, 0, 26, 0, 6, 0, 27, 0, 43, 0, 2, 0, 44, 0, 2, 0, 45, 0, 2, 0, 16, 0, - 2, 0, 18, 0, 0, 0, 46, 0, 28, 0, 21, 0, 28, 0, 0, 0, 28, 0, 1, 0, 29, 0, 47, 0, 30, 0, 48, 0, 19, 0, 49, 0, - 19, 0, 50, 0, 2, 0, 44, 0, 2, 0, 45, 0, 2, 0, 51, 0, 2, 0, 52, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 18, 0, - 2, 0, 55, 0, 7, 0, 10, 0, 7, 0, 11, 0, 4, 0, 56, 0, 7, 0, 57, 0, 7, 0, 58, 0, 7, 0, 59, 0, 26, 0, 60, 0, - 31, 0, 7, 0, 22, 0, 32, 0, 14, 0, 61, 0, 19, 0, 62, 0, 2, 0, 44, 0, 2, 0, 63, 0, 2, 0, 64, 0, 2, 0, 27, 0, - 32, 0, 16, 0, 32, 0, 0, 0, 32, 0, 1, 0, 7, 0, 65, 0, 7, 0, 59, 0, 2, 0, 16, 0, 2, 0, 66, 0, 2, 0, 67, 0, - 2, 0, 18, 0, 4, 0, 68, 0, 4, 0, 69, 0, 11, 0, 2, 0, 7, 0, 70, 0, 0, 0, 19, 0, 0, 0, 71, 0, 7, 0, 72, 0, - 7, 0, 73, 0, 33, 0, 15, 0, 22, 0, 32, 0, 34, 0, 74, 0, 32, 0, 75, 0, 0, 0, 76, 0, 4, 0, 77, 0, 4, 0, 27, 0, - 14, 0, 78, 0, 31, 0, 79, 0, 22, 0, 80, 0, 2, 0, 16, 0, 2, 0, 81, 0, 2, 0, 82, 0, 2, 0, 18, 0, 7, 0, 83, 0, - 4, 0, 84, 0, 35, 0, 6, 0, 35, 0, 0, 0, 35, 0, 1, 0, 0, 0, 85, 0, 0, 0, 86, 0, 4, 0, 22, 0, 4, 0, 87, 0, - 36, 0, 10, 0, 36, 0, 0, 0, 36, 0, 1, 0, 4, 0, 88, 0, 4, 0, 89, 0, 4, 0, 90, 0, 4, 0, 66, 0, 4, 0, 13, 0, - 4, 0, 91, 0, 0, 0, 92, 0, 0, 0, 93, 0, 37, 0, 15, 0, 22, 0, 32, 0, 0, 0, 94, 0, 4, 0, 91, 0, 4, 0, 95, 0, - 14, 0, 96, 0, 35, 0, 97, 0, 35, 0, 98, 0, 4, 0, 99, 0, 4, 0,100, 0, 14, 0,101, 0, 0, 0,102, 0, 4, 0,103, 0, - 4, 0,104, 0, 11, 0,105, 0, 8, 0,106, 0, 38, 0, 3, 0, 4, 0,107, 0, 4, 0,108, 0, 11, 0, 2, 0, 39, 0, 20, 0, - 22, 0, 32, 0, 34, 0, 74, 0, 0, 0, 16, 0, 0, 0,109, 0, 2, 0, 18, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0,112, 0, - 7, 0,113, 0, 7, 0,114, 0, 7, 0,115, 0, 7, 0,116, 0, 7, 0,117, 0, 7, 0,118, 0, 7, 0,119, 0, 7, 0,120, 0, - 31, 0, 79, 0, 27, 0,121, 0, 0, 0,122, 0, 0, 0,123, 0, 40, 0, 14, 0, 41, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, - 4, 0,127, 0, 4, 0,128, 0, 0, 0,129, 0, 0, 0,130, 0, 0, 0,131, 0, 0, 0, 27, 0, 2, 0,132, 0, 2, 0,133, 0, - 2, 0,134, 0, 2, 0, 18, 0, 4, 0, 30, 0, 42, 0, 33, 0, 22, 0, 32, 0, 0, 0, 35, 0, 14, 0,135, 0, 43, 0,136, 0, - 44, 0,137, 0, 45, 0,138, 0, 45, 0,139, 0, 2, 0,140, 0, 2, 0,141, 0, 2, 0,131, 0, 2, 0, 18, 0, 2, 0,142, 0, - 2, 0, 16, 0, 4, 0,143, 0, 2, 0,144, 0, 2, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, 2, 0,148, 0, 2, 0,149, 0, - 4, 0,150, 0, 4, 0,151, 0, 38, 0,152, 0, 25, 0,153, 0, 7, 0,154, 0, 4, 0,155, 0, 2, 0,156, 0, 2, 0,157, 0, - 2, 0,158, 0, 0, 0,159, 0, 0, 0,160, 0, 7, 0,161, 0, 7, 0,162, 0, 46, 0, 65, 0, 2, 0,163, 0, 2, 0,164, 0, - 2, 0,165, 0, 2, 0,166, 0, 27, 0,167, 0, 47, 0,168, 0, 0, 0,169, 0, 0, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, - 0, 0,173, 0, 7, 0,174, 0, 7, 0,175, 0, 7, 0,176, 0, 2, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 2, 0,180, 0, - 2, 0,181, 0, 2, 0,182, 0, 0, 0,183, 0, 0, 0,123, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, - 7, 0,188, 0, 7, 0, 55, 0, 7, 0,189, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, 7, 0,194, 0, - 7, 0,195, 0, 7, 0,196, 0, 7, 0,197, 0, 7, 0,198, 0, 7, 0,199, 0, 7, 0,200, 0, 7, 0,201, 0, 7, 0,202, 0, - 7, 0,203, 0, 7, 0,204, 0, 7, 0,205, 0, 7, 0,206, 0, 7, 0,207, 0, 7, 0,208, 0, 7, 0,209, 0, 7, 0,210, 0, - 7, 0,211, 0, 7, 0,212, 0, 7, 0,213, 0, 7, 0,214, 0, 7, 0,215, 0, 7, 0,216, 0, 7, 0,217, 0, 7, 0,218, 0, - 7, 0,219, 0, 7, 0,220, 0, 7, 0,221, 0, 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 48, 0, 15, 0, - 0, 0, 35, 0, 11, 0,226, 0, 0, 0,227, 0, 0, 0,228, 0, 4, 0,229, 0, 4, 0,230, 0, 11, 0,231, 0, 7, 0,232, 0, - 7, 0,233, 0, 7, 0,234, 0, 4, 0,235, 0, 11, 0,236, 0, 11, 0,237, 0, 4, 0,238, 0, 4, 0, 27, 0, 49, 0, 6, 0, - 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,239, 0, 7, 0, 65, 0, 4, 0, 62, 0, 50, 0, 5, 0, 2, 0, 18, 0, - 2, 0,240, 0, 2, 0, 62, 0, 2, 0,241, 0, 49, 0,234, 0, 51, 0, 17, 0, 27, 0,167, 0, 42, 0,242, 0, 52, 0,243, 0, - 7, 0,244, 0, 7, 0,245, 0, 2, 0, 16, 0, 2, 0,246, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,247, 0, 4, 0,248, 0, - 2, 0,249, 0, 2, 0,250, 0, 4, 0,131, 0, 4, 0,143, 0, 2, 0,251, 0, 2, 0,252, 0, 53, 0, 25, 0, 2, 0, 18, 0, - 2, 0,253, 0, 7, 0,254, 0, 7, 0,255, 0, 2, 0,142, 0, 2, 0, 0, 1, 4, 0, 1, 1, 4, 0, 2, 1, 27, 0,167, 0, - 4, 0, 3, 1, 2, 0, 4, 1, 2, 0, 5, 1, 11, 0, 6, 1, 7, 0, 7, 1, 7, 0, 8, 1, 2, 0, 9, 1, 2, 0, 10, 1, - 2, 0, 11, 1, 2, 0, 12, 1, 7, 0, 13, 1, 7, 0, 14, 1, 7, 0, 15, 1, 7, 0, 16, 1, 50, 0, 17, 1, 54, 0, 18, 1, - 55, 0, 13, 0, 4, 0, 19, 1, 4, 0, 20, 1, 2, 0, 21, 1, 2, 0, 18, 0, 2, 0, 22, 1, 2, 0, 23, 1, 27, 0,167, 0, - 7, 0, 24, 1, 4, 0, 25, 1, 0, 0, 26, 1, 7, 0, 27, 1, 4, 0, 28, 1, 4, 0,131, 0, 56, 0, 4, 0, 27, 0,167, 0, - 0, 0, 29, 1, 4, 0, 30, 1, 4, 0, 27, 0, 47, 0, 64, 0, 22, 0, 32, 0, 34, 0, 74, 0, 7, 0, 31, 1, 7, 0, 32, 1, - 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, 7, 0, 36, 1, 7, 0, 37, 1, 7, 0, 38, 1, 7, 0, 39, 1, 7, 0, 30, 0, - 7, 0, 40, 1, 7, 0, 41, 1, 7, 0, 42, 1, 7, 0, 43, 1, 7, 0, 44, 1, 7, 0, 45, 1, 7, 0, 46, 1, 7, 0, 47, 1, - 7, 0, 48, 1, 7, 0, 49, 1, 7, 0, 50, 1, 7, 0, 51, 1, 2, 0, 52, 1, 2, 0, 53, 1, 2, 0, 54, 1, 2, 0, 55, 1, - 2, 0, 56, 1, 2, 0, 57, 1, 2, 0, 58, 1, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0,246, 0, 7, 0, 59, 1, 7, 0, 60, 1, - 7, 0, 61, 1, 7, 0, 62, 1, 4, 0, 63, 1, 4, 0, 64, 1, 2, 0, 65, 1, 2, 0, 66, 1, 2, 0, 22, 1, 2, 0,129, 0, - 4, 0, 22, 0, 4, 0,126, 0, 4, 0,127, 0, 4, 0,128, 0, 7, 0, 67, 1, 7, 0, 68, 1, 7, 0, 66, 0, 40, 0, 69, 1, - 57, 0, 70, 1, 31, 0, 79, 0, 42, 0,242, 0, 48, 0, 71, 1, 50, 0, 17, 1, 51, 0, 72, 1, 25, 0,153, 0, 53, 0, 73, 1, - 55, 0, 74, 1, 56, 0, 75, 1, 0, 0, 76, 1, 0, 0,123, 0, 58, 0, 13, 0, 7, 0, 77, 1, 7, 0, 78, 1, 7, 0,175, 0, - 4, 0, 18, 0, 0, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, 4, 0, 27, 0, 7, 0, 79, 1, 7, 0, 80, 1, - 7, 0, 81, 1, 27, 0, 43, 0, 59, 0, 9, 0, 50, 0, 82, 1, 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, 4, 0, 18, 0, - 7, 0, 83, 1, 7, 0, 84, 1, 4, 0, 85, 1, 4, 0, 86, 1, 60, 0, 76, 0, 22, 0, 32, 0, 34, 0, 74, 0, 2, 0, 16, 0, - 2, 0, 18, 0, 4, 0, 87, 1, 2, 0,178, 0, 2, 0, 88, 1, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, - 7, 0, 89, 1, 7, 0, 90, 1, 7, 0, 91, 1, 7, 0, 92, 1, 7, 0, 93, 1, 7, 0, 94, 1, 7, 0, 95, 1, 7, 0, 96, 1, - 7, 0, 97, 1, 7, 0, 98, 1, 7, 0, 99, 1, 54, 0,100, 1, 2, 0,253, 0, 2, 0, 30, 0, 7, 0,111, 0, 7, 0,112, 0, - 7, 0,101, 1, 7, 0,102, 1, 7, 0,103, 1, 7, 0,104, 1, 7, 0,105, 1, 7, 0,106, 1, 2, 0,107, 1, 2, 0,108, 1, - 2, 0,109, 1, 2, 0,110, 1, 0, 0,111, 1, 0, 0,112, 1, 2, 0,113, 1, 2, 0,114, 1, 2, 0,115, 1, 2, 0,116, 1, - 2, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, 7, 0,120, 1, 7, 0,121, 1, 2, 0,122, 1, 2, 0,123, 1, 2, 0,124, 1, - 2, 0,125, 1, 2, 0,126, 1, 2, 0,127, 1, 7, 0,128, 1, 7, 0,129, 1, 7, 0,130, 1, 7, 0,131, 1, 7, 0,132, 1, + 0, 0,128, 63, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,130,130,130,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, + 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, + 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60, +255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, + 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255, +240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255, +240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,170, 64,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, + 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, 32,255,255,255, 75, 75, 75,255,204, 0,153,255, + 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 32, 0, 0,255, 0, 32, 0,255, 0, 0,128,255, 0, 0, 0, 0, 34,221,221,255, + 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255, +219, 37, 18,255,240,255, 64,255,240,144,160,255,255,255,255,255, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, + 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,200,200,255, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76,255, 0, 0, 0, 0, +250,250,250,255, 15, 15, 15,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,145,145,145,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100,255,140, 25,255,250,250,250,255, 0, 0, 0,255,241, 88, 0,255, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,130,130,130,255, 8, 48, 8,255, + 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, +144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, + 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,250,250,250,255, 0, 0, 0, 0,250,250,250,255, +250,250,250,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, + 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255,140, 25,255, 79,101, 73,255,135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255, +219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, + 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255,153, 64, 48,255, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255, +240,144,160,255,240,175,144,255, 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255,255,255,128, 0, 0, 0,255,255,133, 0,255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, + 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, + 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60, +255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, + 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255, +240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255, +240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 79,101, 73,255,135,177,125,255,255,255,255,255, + 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, + 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, + 35, 97,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255,144,144, 0,255,128, 48, 96,255, +219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, + 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 82, 96,110,255,124,137,150,255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,133, 0,255, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,107,107,255, 0, 0, 0, 0, + 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,255,255,255,150, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,150,150,150,100,112,112,112,100, 96,192, 64,255, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 79,101, 73,255, +135,177,125,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255, +144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, + 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, + 82, 96,110,255,124,137,150,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255, +255,133, 0,255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +116,116,116,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, + 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255, +219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, + 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255, +240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,105,135,255, + 32, 32,143,255,109, 88,129,255, 78,152, 62,255, 46,143,143,255,169, 84,124,255, 0, 0, 0, 0,162, 95,111,255,109,145,131,255, +255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, + 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, + 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0,255,255,255, 10,255,133, 0, 60, +255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, + 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255, +240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255, +240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,114,114,114,255, 18, 66,176, 38,255,133, 0,178,255,133, 0,127, 0,255, 0,255,255, 0, 0,255,225,210,195, 35, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,153,153,153,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +143,143,143,255,198,119,119,255,255, 0, 0,255, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, + 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, + 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, + 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255, +219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, + 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0,100, 0, 0,255, 0, 0,200,255, +128, 0, 80,255, 95, 95, 0,255, 0,100, 50,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, + 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, + 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, +144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, + 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,127, 51, 76,130,135,140, 76, 0, 0, 0, 0, 0, 0, 0, 0, +114,114,114,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,173,173,173,255,127,112,112,100, 0, 0, 0, 0, 91, 91, 91,255, + 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255, +219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, + 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255, +240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, + 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,255,255,255,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, + 0, 0, 0,255,255,255,255,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60, +255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, + 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255, +240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255, +240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 5,155,155,155,160,100,104,111,255,111,106,100,255,104,106,117,255, +105,117,110,255,154,155,155,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,100,100,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, + 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, + 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, + 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255, +219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, + 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,114,114,255, 0, 0, 0, 0, + 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, 0, 0, 0,255,241, 88, 0,255, + 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,140, 25,255, 8, 48, 8,255, + 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255,219, 37, 18,255,255, 32, 32,255, + 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 96,192, 64,255, +144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0,255,144,144, 0,255, + 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,165,165,165,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255, +165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, 0, 0, 0, 0, 64, 64, 64,255, + 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255,140, 25,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, 0, 0, 0,255,255,160, 0,255, +219, 37, 18,255,255, 32, 32,255, 75, 75, 75,255, 0, 0, 0, 0, 0, 0, 0, 18,255,133, 0, 60,255,133, 0,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, 80,200,255, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255,240,144,160,255, 0, 0, 0, 0, + 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255,240,255, 64,255, 64,192, 48,255, +240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,128,255,255,255,255,255,255, 0,170, 0,255,220, 96, 96,255, +220, 96, 96,255, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +255,255,255,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57,255, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,114,114,114,255, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,102,102,102,255, 0, 0, 0,255, + 0, 0, 0,255,255,255,255,255,165,165,165,127, 0, 0, 0,255, 0, 0, 0,255,255,255,255,255,160,160,160,100,127,112,112,100, + 0, 0, 0, 0, 94, 94, 94,255, 0, 0, 0,255,241, 88, 0,255, 0, 0, 0, 40, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,170, 64,255, 8, 48, 8,255, 85,187, 85,255,255,255,255,255, 0, 0, 0,255,255,133, 0,255, + 0, 0, 0,255,255,160, 0,255,219, 37, 18,255, 32,255,255,255, 75, 75, 75,255,204, 0,153,255, 0, 0, 0, 18,255,133, 0, 60, +255,133, 0,255, 32, 0, 0,255, 0, 32, 0,255, 0, 0,128,255, 0, 0, 0, 0, 34,221,221,255, 35, 97,221,255,200,200,200,255, + 80,200,255, 80, 12, 10, 10,128,255,140, 0,255, 96,192, 64,255,144,144, 0,255,128, 48, 96,255,219, 37, 18,255,240,255, 64,255, +240,144,160,255,255,255,255,255, 0, 0, 0,255,144,144, 0,255, 64,144, 48,255,128, 48, 96,255, 0, 0, 0, 0, 0, 0, 0,255, +240,255, 64,255, 64,192, 48,255,240,144,160,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,128, 0, 0, 0,255,255,255, 0,255, 4, 0, 0, 0,255,127,127, 0,255,255,255,255, +255,255,255, 0,255,127, 0, 0,255,127,127,127,255,200,200,200,255,255, 0, 0,255, 0, 0,255,255, 0, 0, 0,255, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0,255,189, 17, 17,255,247, 10, 10,255, 0, 0, 0, 0, +247, 64, 24,255,246,105, 19,255,250,153, 0,255, 0, 0, 0, 0, 30,145, 9,255, 89,183, 11,255,131,239, 29,255, 0, 0, 0, 0, + 10, 54,148,255, 54,103,223,255, 94,193,239,255, 0, 0, 0, 0,169, 41, 78,255,193, 65,106,255,240, 93,145,255, 0, 0, 0, 0, + 67, 12,120,255, 84, 58,163,255,135,100,213,255, 0, 0, 0, 0, 36,120, 90,255, 60,149,121,255,111,182,171,255, 0, 0, 0, 0, + 75,112,124,255,106,134,145,255,155,194,205,255, 0, 0, 0, 0,244,201, 12,255,238,194, 54,255,243,255, 0,255, 0, 0, 0, 0, + 30, 32, 36,255, 72, 76, 86,255,255,255,255,255, 0, 0, 0, 0,111, 47,106,255,152, 69,190,255,211, 48,214,255, 0, 0, 0, 0, +108,142, 34,255,127,176, 34,255,187,239, 91,255, 0, 0, 0, 0,141,141,141,255,176,176,176,255,222,222,222,255, 0, 0, 0, 0, +131, 67, 38,255,139, 88, 17,255,189,106, 17,255, 0, 0, 0, 0, 8, 49, 14,255, 28, 67, 11,255, 52, 98, 43,255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, +216,206,222, 4, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0,120,207,222, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +105,111, 95,115, 99,101,110,101, 95, 51,100,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 80, 0, 0, 0,120,207,222, 4, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0,232, 39,224, 4, 0, 0, 0, 0, +216,206,222, 4, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,102, 98,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,232, 39,224, 4, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0, +136, 40,224, 4, 0, 0, 0, 0,120,207,222, 4, 0, 0, 0, 0,105,111, 95, 97,110,105,109, 95, 98,118,104, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,136, 40,224, 4, 0, 0, 0, 0, +209, 0, 0, 0, 1, 0, 0, 0, 40, 41,224, 4, 0, 0, 0, 0,232, 39,224, 4, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95, +112,108,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, + 40, 41,224, 4, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0,200, 41,224, 4, 0, 0, 0, 0,136, 40,224, 4, 0, 0, 0, 0, +105,111, 95,115, 99,101,110,101, 95,111, 98,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 80, 0, 0, 0,200, 41,224, 4, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0,104, 42,224, 4, 0, 0, 0, 0, + 40, 41,224, 4, 0, 0, 0, 0,105,111, 95,115, 99,101,110,101, 95,120, 51,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0,104, 42,224, 4, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0, + 8, 43,224, 4, 0, 0, 0, 0,200, 41,224, 4, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95,115,116,108, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, 8, 43,224, 4, 0, 0, 0, 0, +209, 0, 0, 0, 1, 0, 0, 0,168, 43,224, 4, 0, 0, 0, 0,104, 42,224, 4, 0, 0, 0, 0,105,111, 95,109,101,115,104, 95, +117,118, 95,108, 97,121,111,117,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65, 80, 0, 0, 0, +168, 43,224, 4, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0, 72, 44,224, 4, 0, 0, 0, 0, 8, 43,224, 4, 0, 0, 0, 0, +105,111, 95, 99,117,114,118,101, 95,115,118,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 68, 65, 84, 65, 80, 0, 0, 0, 72, 44,224, 4, 0, 0, 0, 0,209, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +168, 43,224, 4, 0, 0, 0, 0, 99,121, 99,108,101,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, 84, 65,232, 0, 0, 0,232, 44,224, 4, 0, 0, 0, 0,201, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,101,102, 97,117,108,116, 32, 83,116,121,108,101, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0,255,255, 0, 0,154,153, 25, 62, 0, 0,128, 63, 0, 0, 12, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0,255,255, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0, 11, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0,255,255, 0, 0,154,153, 25, 62, 0, 0,128, 63, 0, 0, 11, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 62, 0, 0, 0, 0, 0, 0,128, 63, 0, 0, 0, 0, 8, 0, 5, 0, 5, 0, 8, 0, + 2, 0, 8, 0, 4, 0, 0, 0, 68, 78, 65, 49, 40, 8, 1, 0,232,232,142, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 83, 68, 78, 65, 78, 65, 77, 69, 94, 13, 0, 0, 42,110,101,120,116, 0, 42,112,114,101,118, 0, 42,100, 97,116, 97, 0, 42,102, +105,114,115,116, 0, 42,108, 97,115,116, 0,120, 0,121, 0,122, 0,120,109,105,110, 0,120,109, 97,120, 0,121,109,105,110, 0, +121,109, 97,120, 0, 42,112,111,105,110,116,101,114, 0,103,114,111,117,112, 0,118, 97,108, 0,118, 97,108, 50, 0,116,121,112, +101, 0,115,117, 98,116,121,112,101, 0,102,108, 97,103, 0,110, 97,109,101, 91, 54, 52, 93, 0,115, 97,118,101,100, 0,100, 97, +116, 97, 0,108,101,110, 0,116,111,116, 97,108,108,101,110, 0, 42,110,101,119,105,100, 0, 42,108,105, 98, 0,110, 97,109,101, + 91, 54, 54, 93, 0,112, 97,100, 0,117,115, 0,105, 99,111,110, 95,105,100, 0,112, 97,100, 50, 0, 42,112,114,111,112,101,114, +116,105,101,115, 0,105,100, 0, 42,105,100, 98,108,111, 99,107, 0, 42,102,105,108,101,100, 97,116, 97, 0,110, 97,109,101, 91, + 49, 48, 50, 52, 93, 0,102,105,108,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0, 42,112, 97,114,101,110,116, 0,119, 91, 50, + 93, 0,104, 91, 50, 93, 0, 99,104, 97,110,103,101,100, 91, 50, 93, 0, 99,104, 97,110,103,101,100, 95,116,105,109,101,115,116, + 97,109,112, 91, 50, 93, 0, 42,114,101, 99,116, 91, 50, 93, 0, 42,111, 98, 0, 98,108,111, 99,107,116,121,112,101, 0, 97,100, +114, 99,111,100,101, 0,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 98,112, 0, 42, 98,101,122,116, 0,109, 97,120,114, 99,116, + 0,116,111,116,114, 99,116, 0,118, 97,114,116,121,112,101, 0,116,111,116,118,101,114,116, 0,105,112,111, 0,101,120,116,114, + 97,112, 0,114,116, 0, 98,105,116,109, 97,115,107, 0,115,108,105,100,101, 95,109,105,110, 0,115,108,105,100,101, 95,109, 97, +120, 0, 99,117,114,118, 97,108, 0, 42,100,114,105,118,101,114, 0, 99,117,114,118,101, 0, 99,117,114, 0,115,104,111,119,107, +101,121, 0,109,117,116,101,105,112,111, 0,112,111,115, 0,112, 97,100, 49, 0,114,101,108, 97,116,105,118,101, 0,116,111,116, +101,108,101,109, 0,117,105,100, 0, 42,119,101,105,103,104,116,115, 0,118,103,114,111,117,112, 91, 54, 52, 93, 0,115,108,105, +100,101,114,109,105,110, 0,115,108,105,100,101,114,109, 97,120, 0, 42, 97,100,116, 0, 42,114,101,102,107,101,121, 0,101,108, +101,109,115,116,114, 91, 51, 50, 93, 0,101,108,101,109,115,105,122,101, 0, 98,108,111, 99,107, 0, 42,105,112,111, 0, 42,102, +114,111,109, 0,116,111,116,107,101,121, 0,115,108,117,114,112,104, 0, 99,116,105,109,101, 0,117,105,100,103,101,110, 0, 42, +108,105,110,101, 0, 42,102,111,114,109, 97,116, 0, 98,108,101,110, 0,108,105,110,101,110,111, 0,115,116, 97,114,116, 0,101, +110,100, 0,102,108, 97,103,115, 0, 99,111,108,111,114, 91, 52, 93, 0,112, 97,100, 91, 52, 93, 0, 42,110, 97,109,101, 0,110, +108,105,110,101,115, 0,108,105,110,101,115, 0, 42, 99,117,114,108, 0, 42,115,101,108,108, 0, 99,117,114, 99, 0,115,101,108, + 99, 0,109, 97,114,107,101,114,115, 0, 42,117,110,100,111, 95, 98,117,102, 0,117,110,100,111, 95,112,111,115, 0,117,110,100, +111, 95,108,101,110, 0, 42, 99,111,109,112,105,108,101,100, 0,109,116,105,109,101, 0,115,105,122,101, 0,115,101,101,107, 0, +100,116,120, 0,112, 97,115,115,101,112, 97,114,116, 97,108,112,104, 97, 0, 99,108,105,112,115,116, 97, 0, 99,108,105,112,101, +110,100, 0,108,101,110,115, 0,111,114,116,104,111, 95,115, 99, 97,108,101, 0,100,114, 97,119,115,105,122,101, 0,115,101,110, +115,111,114, 95,120, 0,115,101,110,115,111,114, 95,121, 0,115,104,105,102,116,120, 0,115,104,105,102,116,121, 0, 89, 70, 95, +100,111,102,100,105,115,116, 0, 42,100,111,102, 95,111, 98, 0,115,101,110,115,111,114, 95,102,105,116, 0,112, 97,100, 91, 55, + 93, 0, 42,115, 99,101,110,101, 0,102,114, 97,109,101,110,114, 0,102,114, 97,109,101,115, 0,111,102,102,115,101,116, 0,115, +102,114, 97, 0,102,105,101, 95,105,109, 97, 0, 99,121, 99,108, 0,111,107, 0,109,117,108,116,105, 95,105,110,100,101,120, 0, +108, 97,121,101,114, 0,112, 97,115,115, 0,105, 98,117,102,115, 0, 42,103,112,117,116,101,120,116,117,114,101, 0, 42, 97,110, +105,109, 0, 42,114,114, 0, 42,114,101,110,100,101,114,115, 91, 56, 93, 0,114,101,110,100,101,114, 95,115,108,111,116, 0,108, + 97,115,116, 95,114,101,110,100,101,114, 95,115,108,111,116, 0,115,111,117,114, 99,101, 0,108, 97,115,116,102,114, 97,109,101, + 0,116,112, 97,103,101,102,108, 97,103, 0,116,111,116, 98,105,110,100, 0,120,114,101,112, 0,121,114,101,112, 0,116,119,115, +116, 97, 0,116,119,101,110,100, 0, 98,105,110,100, 99,111,100,101, 0, 42,114,101,112, 98,105,110,100, 0, 42,112, 97, 99,107, +101,100,102,105,108,101, 0, 42,112,114,101,118,105,101,119, 0,108, 97,115,116,117,112,100, 97,116,101, 0,108, 97,115,116,117, +115,101,100, 0, 97,110,105,109,115,112,101,101,100, 0,103,101,110, 95,120, 0,103,101,110, 95,121, 0,103,101,110, 95,116,121, +112,101, 0,103,101,110, 95,102,108, 97,103, 0, 97,115,112,120, 0, 97,115,112,121, 0,116,101,120, 99,111, 0,109, 97,112,116, +111, 0,109, 97,112,116,111,110,101,103, 0, 98,108,101,110,100,116,121,112,101, 0, 42,111, 98,106,101, 99,116, 0, 42,116,101, +120, 0,117,118,110, 97,109,101, 91, 54, 52, 93, 0,112,114,111,106,120, 0,112,114,111,106,121, 0,112,114,111,106,122, 0,109, + 97,112,112,105,110,103, 0,111,102,115, 91, 51, 93, 0,115,105,122,101, 91, 51, 93, 0,114,111,116, 0,116,101,120,102,108, 97, +103, 0, 99,111,108,111,114,109,111,100,101,108, 0,112,109, 97,112,116,111, 0,112,109, 97,112,116,111,110,101,103, 0,110,111, +114,109, 97,112,115,112, 97, 99,101, 0,119,104,105, 99,104, 95,111,117,116,112,117,116, 0, 98,114,117,115,104, 95,109, 97,112, + 95,109,111,100,101, 0,114, 0,103, 0, 98, 0,107, 0,100,101,102, 95,118, 97,114, 0, 99,111,108,102, 97, 99, 0,118, 97,114, +102, 97, 99, 0,110,111,114,102, 97, 99, 0,100,105,115,112,102, 97, 99, 0,119, 97,114,112,102, 97, 99, 0, 99,111,108,115,112, +101, 99,102, 97, 99, 0,109,105,114,114,102, 97, 99, 0, 97,108,112,104, 97,102, 97, 99, 0,100,105,102,102,102, 97, 99, 0,115, +112,101, 99,102, 97, 99, 0,101,109,105,116,102, 97, 99, 0,104, 97,114,100,102, 97, 99, 0,114, 97,121,109,105,114,114,102, 97, + 99, 0,116,114, 97,110,115,108,102, 97, 99, 0, 97,109, 98,102, 97, 99, 0, 99,111,108,101,109,105,116,102, 97, 99, 0, 99,111, +108,114,101,102,108,102, 97, 99, 0, 99,111,108,116,114, 97,110,115,102, 97, 99, 0,100,101,110,115,102, 97, 99, 0,115, 99, 97, +116,116,101,114,102, 97, 99, 0,114,101,102,108,102, 97, 99, 0,116,105,109,101,102, 97, 99, 0,108,101,110,103,116,104,102, 97, + 99, 0, 99,108,117,109,112,102, 97, 99, 0,100, 97,109,112,102, 97, 99, 0,107,105,110,107,102, 97, 99, 0,114,111,117,103,104, +102, 97, 99, 0,112, 97,100,101,110,115,102, 97, 99, 0,103,114, 97,118,105,116,121,102, 97, 99, 0,108,105,102,101,102, 97, 99, + 0,115,105,122,101,102, 97, 99, 0,105,118,101,108,102, 97, 99, 0,102,105,101,108,100,102, 97, 99, 0,115,104, 97,100,111,119, +102, 97, 99, 0,122,101,110,117,112,102, 97, 99, 0,122,101,110,100,111,119,110,102, 97, 99, 0, 98,108,101,110,100,102, 97, 99, + 0, 97, 0,116,111,116, 0,105,112,111,116,121,112,101, 0,100, 97,116, 97, 91, 51, 50, 93, 0, 42,105,109, 97, 0, 42, 99,117, + 98,101, 91, 54, 93, 0,105,109, 97,116, 91, 52, 93, 91, 52, 93, 0,111, 98,105,109, 97,116, 91, 51, 93, 91, 51, 93, 0,115,116, +121,112,101, 0,118,105,101,119,115, 99, 97,108,101, 0,110,111,116,108, 97,121, 0, 99,117, 98,101,114,101,115, 0,100,101,112, +116,104, 0,114,101, 99, 97,108, 99, 0,108, 97,115,116,115,105,122,101, 0,102, 97,108,108,111,102,102, 95,116,121,112,101, 0, +102, 97,108,108,111,102,102, 95,115,111,102,116,110,101,115,115, 0,114, 97,100,105,117,115, 0, 99,111,108,111,114, 95,115,111, +117,114, 99,101, 0,116,111,116,112,111,105,110,116,115, 0,112,100,112, 97,100, 0,112,115,121,115, 0,112,115,121,115, 95, 99, + 97, 99,104,101, 95,115,112, 97, 99,101, 0,111, 98, 95, 99, 97, 99,104,101, 95,115,112, 97, 99,101, 0, 42,112,111,105,110,116, + 95,116,114,101,101, 0, 42,112,111,105,110,116, 95,100, 97,116, 97, 0,110,111,105,115,101, 95,115,105,122,101, 0,110,111,105, +115,101, 95,100,101,112,116,104, 0,110,111,105,115,101, 95,105,110,102,108,117,101,110, 99,101, 0,110,111,105,115,101, 95, 98, + 97,115,105,115, 0,112,100,112, 97,100, 51, 91, 51, 93, 0,110,111,105,115,101, 95,102, 97, 99, 0,115,112,101,101,100, 95,115, + 99, 97,108,101, 0,102, 97,108,108,111,102,102, 95,115,112,101,101,100, 95,115, 99, 97,108,101, 0,112,100,112, 97,100, 50, 0, + 42, 99,111, 98, 97, 0, 42,102, 97,108,108,111,102,102, 95, 99,117,114,118,101, 0,114,101,115,111,108, 91, 51, 93, 0,105,110, +116,101,114,112, 95,116,121,112,101, 0,102,105,108,101, 95,102,111,114,109, 97,116, 0,101,120,116,101,110,100, 0,115,109,111, +107,101,100, 95,116,121,112,101, 0,105,110,116, 95,109,117,108,116,105,112,108,105,101,114, 0,115,116,105,108,108, 95,102,114, + 97,109,101, 0,115,111,117,114, 99,101, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0, 42,100, 97,116, 97,115,101,116, 0, 99, + 97, 99,104,101,100,102,114, 97,109,101, 0,111, 99,101, 97,110,109,111,100, 91, 54, 52, 93, 0,111,117,116,112,117,116, 0,110, +111,105,115,101,115,105,122,101, 0,116,117,114, 98,117,108, 0, 98,114,105,103,104,116, 0, 99,111,110,116,114, 97,115,116, 0, +115, 97,116,117,114, 97,116,105,111,110, 0,114,102, 97, 99, 0,103,102, 97, 99, 0, 98,102, 97, 99, 0,102,105,108,116,101,114, +115,105,122,101, 0,109,103, 95, 72, 0,109,103, 95,108, 97, 99,117,110, 97,114,105,116,121, 0,109,103, 95,111, 99,116, 97,118, +101,115, 0,109,103, 95,111,102,102,115,101,116, 0,109,103, 95,103, 97,105,110, 0,100,105,115,116, 95, 97,109,111,117,110,116, + 0,110,115, 95,111,117,116,115, 99, 97,108,101, 0,118,110, 95,119, 49, 0,118,110, 95,119, 50, 0,118,110, 95,119, 51, 0,118, +110, 95,119, 52, 0,118,110, 95,109,101,120,112, 0,118,110, 95,100,105,115,116,109, 0,118,110, 95, 99,111,108,116,121,112,101, + 0,110,111,105,115,101,100,101,112,116,104, 0,110,111,105,115,101,116,121,112,101, 0,110,111,105,115,101, 98, 97,115,105,115, + 0,110,111,105,115,101, 98, 97,115,105,115, 50, 0,105,109, 97,102,108, 97,103, 0, 99,114,111,112,120,109,105,110, 0, 99,114, +111,112,121,109,105,110, 0, 99,114,111,112,120,109, 97,120, 0, 99,114,111,112,121,109, 97,120, 0,116,101,120,102,105,108,116, +101,114, 0, 97,102,109, 97,120, 0,120,114,101,112,101, 97,116, 0,121,114,101,112,101, 97,116, 0, 99,104,101, 99,107,101,114, +100,105,115,116, 0,110, 97, 98,108, 97, 0,105,117,115,101,114, 0, 42,110,111,100,101,116,114,101,101, 0, 42,101,110,118, 0, + 42,112,100, 0, 42,118,100, 0, 42,111,116, 0,117,115,101, 95,110,111,100,101,115, 0,108,111, 99, 91, 51, 93, 0,114,111,116, + 91, 51, 93, 0,109, 97,116, 91, 52, 93, 91, 52, 93, 0,109,105,110, 91, 51, 93, 0,109, 97,120, 91, 51, 93, 0, 99,111, 98, 97, + 0, 98,108,101,110,100, 95, 99,111,108,111,114, 91, 51, 93, 0, 98,108,101,110,100, 95,102, 97, 99,116,111,114, 0, 98,108,101, +110,100, 95,116,121,112,101, 0,112, 97,100, 91, 51, 93, 0,109,111,100,101, 0,116,111,116,101,120, 0,115,104,100,119,114, 0, +115,104,100,119,103, 0,115,104,100,119, 98, 0,115,104,100,119,112, 97,100, 0,101,110,101,114,103,121, 0,100,105,115,116, 0, +115,112,111,116,115,105,122,101, 0,115,112,111,116, 98,108,101,110,100, 0,104, 97,105,110,116, 0, 97,116,116, 49, 0, 97,116, +116, 50, 0, 42, 99,117,114,102, 97,108,108,111,102,102, 0,115,104, 97,100,115,112,111,116,115,105,122,101, 0, 98,105, 97,115, + 0,115,111,102,116, 0, 99,111,109,112,114,101,115,115,116,104,114,101,115,104, 0, 98,108,101,101,100, 98,105, 97,115, 0,112, + 97,100, 53, 91, 50, 93, 0, 98,117,102,115,105,122,101, 0,115, 97,109,112, 0, 98,117,102,102,101,114,115, 0,102,105,108,116, +101,114,116,121,112,101, 0, 98,117,102,102,108, 97,103, 0, 98,117,102,116,121,112,101, 0,114, 97,121, 95,115, 97,109,112, 0, +114, 97,121, 95,115, 97,109,112,121, 0,114, 97,121, 95,115, 97,109,112,122, 0,114, 97,121, 95,115, 97,109,112, 95,116,121,112, +101, 0, 97,114,101, 97, 95,115,104, 97,112,101, 0, 97,114,101, 97, 95,115,105,122,101, 0, 97,114,101, 97, 95,115,105,122,101, +121, 0, 97,114,101, 97, 95,115,105,122,101,122, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0,114, 97,121, 95,115, 97, +109,112, 95,109,101,116,104,111,100, 0,115,104, 97,100,111,119,109, 97,112, 95,116,121,112,101, 0,116,101,120, 97, 99,116, 0, +115,104, 97,100,104, 97,108,111,115,116,101,112, 0,115,117,110, 95,101,102,102,101, 99,116, 95,116,121,112,101, 0,115,107,121, + 98,108,101,110,100,116,121,112,101, 0,104,111,114,105,122,111,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,112,114, +101, 97,100, 0,115,117,110, 95, 98,114,105,103,104,116,110,101,115,115, 0,115,117,110, 95,115,105,122,101, 0, 98, 97, 99,107, +115, 99, 97,116,116,101,114,101,100, 95,108,105,103,104,116, 0,115,117,110, 95,105,110,116,101,110,115,105,116,121, 0, 97,116, +109, 95,116,117,114, 98,105,100,105,116,121, 0, 97,116,109, 95,105,110,115, 99, 97,116,116,101,114,105,110,103, 95,102, 97, 99, +116,111,114, 0, 97,116,109, 95,101,120,116,105,110, 99,116,105,111,110, 95,102, 97, 99,116,111,114, 0, 97,116,109, 95,100,105, +115,116, 97,110, 99,101, 95,102, 97, 99,116,111,114, 0,115,107,121, 98,108,101,110,100,102, 97, 99, 0,115,107,121, 95,101,120, +112,111,115,117,114,101, 0,115,104, 97,100,111,119, 95,102,114,117,115,116,117,109, 95,115,105,122,101, 0,115,107,121, 95, 99, +111,108,111,114,115,112, 97, 99,101, 0,112, 97,100, 52, 91, 50, 93, 0, 42,109,116,101,120, 91, 49, 56, 93, 0,112,114, 95,116, +101,120,116,117,114,101, 0,112, 97,100, 54, 91, 52, 93, 0,100,101,110,115,105,116,121, 0,101,109,105,115,115,105,111,110, 0, +115, 99, 97,116,116,101,114,105,110,103, 0,114,101,102,108,101, 99,116,105,111,110, 0,101,109,105,115,115,105,111,110, 95, 99, +111,108, 91, 51, 93, 0,116,114, 97,110,115,109,105,115,115,105,111,110, 95, 99,111,108, 91, 51, 93, 0,114,101,102,108,101, 99, +116,105,111,110, 95, 99,111,108, 91, 51, 93, 0,100,101,110,115,105,116,121, 95,115, 99, 97,108,101, 0,100,101,112,116,104, 95, + 99,117,116,111,102,102, 0, 97,115,121,109,109,101,116,114,121, 0,115,116,101,112,115,105,122,101, 95,116,121,112,101, 0,115, +104, 97,100,101,102,108, 97,103, 0,115,104, 97,100,101, 95,116,121,112,101, 0,112,114,101, 99, 97, 99,104,101, 95,114,101,115, +111,108,117,116,105,111,110, 0,115,116,101,112,115,105,122,101, 0,109,115, 95,100,105,102,102, 0,109,115, 95,105,110,116,101, +110,115,105,116,121, 0,109,115, 95,115,112,114,101, 97,100, 0, 97,108,112,104, 97, 95, 98,108,101,110,100, 0,102, 97, 99,101, + 95,111,114,105,101,110,116, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 95,116,121,112,101, 0,115,112,101, 99,114, + 0,115,112,101, 99,103, 0,115,112,101, 99, 98, 0,109,105,114,114, 0,109,105,114,103, 0,109,105,114, 98, 0, 97,109, 98,114, + 0, 97,109, 98, 98, 0, 97,109, 98,103, 0, 97,109, 98, 0,101,109,105,116, 0, 97,110,103, 0,115,112,101, 99,116,114, 97, 0, +114, 97,121, 95,109,105,114,114,111,114, 0, 97,108,112,104, 97, 0,114,101,102, 0,115,112,101, 99, 0,122,111,102,102,115, 0, + 97,100,100, 0,116,114, 97,110,115,108,117, 99,101,110, 99,121, 0,118,111,108, 0,103, 97,109,101, 0,102,114,101,115,110,101, +108, 95,109,105,114, 0,102,114,101,115,110,101,108, 95,109,105,114, 95,105, 0,102,114,101,115,110,101,108, 95,116,114, 97, 0, +102,114,101,115,110,101,108, 95,116,114, 97, 95,105, 0,102,105,108,116,101,114, 0,116,120, 95,108,105,109,105,116, 0,116,120, + 95,102, 97,108,108,111,102,102, 0,114, 97,121, 95,100,101,112,116,104, 0,114, 97,121, 95,100,101,112,116,104, 95,116,114, 97, + 0,104, 97,114, 0,115,101,101,100, 49, 0,115,101,101,100, 50, 0,103,108,111,115,115, 95,109,105,114, 0,103,108,111,115,115, + 95,116,114, 97, 0,115, 97,109,112, 95,103,108,111,115,115, 95,109,105,114, 0,115, 97,109,112, 95,103,108,111,115,115, 95,116, +114, 97, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, 95,109,105,114, 0, 97,100, 97,112,116, 95,116,104,114,101,115,104, + 95,116,114, 97, 0, 97,110,105,115,111, 95,103,108,111,115,115, 95,109,105,114, 0,100,105,115,116, 95,109,105,114, 0,102, 97, +100,101,116,111, 95,109,105,114, 0,115,104, 97,100,101, 95,102,108, 97,103, 0,109,111,100,101, 95,108, 0,102,108, 97,114,101, + 99, 0,115,116, 97,114, 99, 0,108,105,110,101, 99, 0,114,105,110,103, 99, 0,104, 97,115,105,122,101, 0,102,108, 97,114,101, +115,105,122,101, 0,115,117, 98,115,105,122,101, 0,102,108, 97,114,101, 98,111,111,115,116, 0,115,116,114, 97,110,100, 95,115, +116, 97, 0,115,116,114, 97,110,100, 95,101,110,100, 0,115,116,114, 97,110,100, 95,101, 97,115,101, 0,115,116,114, 97,110,100, + 95,115,117,114,102,110,111,114, 0,115,116,114, 97,110,100, 95,109,105,110, 0,115,116,114, 97,110,100, 95,119,105,100,116,104, +102, 97,100,101, 0,115,116,114, 97,110,100, 95,117,118,110, 97,109,101, 91, 54, 52, 93, 0,115, 98,105, 97,115, 0,108, 98,105, + 97,115, 0,115,104, 97,100, 95, 97,108,112,104, 97, 0,115,101,112,116,101,120, 0,114,103, 98,115,101,108, 0,112,114, 95,116, +121,112,101, 0,112,114, 95, 98, 97, 99,107, 0,112,114, 95,108, 97,109,112, 0,109,108, 95,102,108, 97,103, 0,100,105,102,102, + 95,115,104, 97,100,101,114, 0,115,112,101, 99, 95,115,104, 97,100,101,114, 0,114,111,117,103,104,110,101,115,115, 0,114,101, +102,114, 97, 99, 0,112, 97,114, 97,109, 91, 52, 93, 0,114,109,115, 0,100, 97,114,107,110,101,115,115, 0, 42,114, 97,109,112, + 95, 99,111,108, 0, 42,114, 97,109,112, 95,115,112,101, 99, 0,114, 97,109,112,105,110, 95, 99,111,108, 0,114, 97,109,112,105, +110, 95,115,112,101, 99, 0,114, 97,109,112, 98,108,101,110,100, 95, 99,111,108, 0,114, 97,109,112, 98,108,101,110,100, 95,115, +112,101, 99, 0,114, 97,109,112, 95,115,104,111,119, 0,112, 97,100, 51, 0,114, 97,109,112,102, 97, 99, 95, 99,111,108, 0,114, + 97,109,112,102, 97, 99, 95,115,112,101, 99, 0, 42,103,114,111,117,112, 0,102,114,105, 99,116,105,111,110, 0,102,104, 0,114, +101,102,108,101, 99,116, 0,102,104,100,105,115,116, 0,120,121,102,114,105, 99,116, 0,100,121,110, 97,109,111,100,101, 0,115, +115,115, 95,114, 97,100,105,117,115, 91, 51, 93, 0,115,115,115, 95, 99,111,108, 91, 51, 93, 0,115,115,115, 95,101,114,114,111, +114, 0,115,115,115, 95,115, 99, 97,108,101, 0,115,115,115, 95,105,111,114, 0,115,115,115, 95, 99,111,108,102, 97, 99, 0,115, +115,115, 95,116,101,120,102, 97, 99, 0,115,115,115, 95,102,114,111,110,116, 0,115,115,115, 95, 98, 97, 99,107, 0,115,115,115, + 95,102,108, 97,103, 0,115,115,115, 95,112,114,101,115,101,116, 0,109, 97,112,116,111, 95,116,101,120,116,117,114,101,100, 0, +115,104, 97,100,111,119,111,110,108,121, 95,102,108, 97,103, 0,105,110,100,101,120, 0,103,112,117,109, 97,116,101,114,105, 97, +108, 0, 42, 98, 98, 0,115,101,108, 99,111,108, 49, 0,115,101,108, 99,111,108, 50, 0,113,117, 97,116, 91, 52, 93, 0,101,120, +112,120, 0,101,120,112,121, 0,101,120,112,122, 0,114, 97,100, 0,114, 97,100, 50, 0,115, 0, 42,109, 97,116, 0, 42,105,109, + 97,116, 0,101,108,101,109,115, 0,100,105,115,112, 0, 42,101,100,105,116,101,108,101,109,115, 0, 42, 42,109, 97,116, 0,102, +108, 97,103, 50, 0,116,111,116, 99,111,108, 0,119,105,114,101,115,105,122,101, 0,114,101,110,100,101,114,115,105,122,101, 0, +116,104,114,101,115,104, 0, 42,108, 97,115,116,101,108,101,109, 0,118,101, 99, 91, 51, 93, 91, 51, 93, 0, 97,108,102, 97, 0, +119,101,105,103,104,116, 0,104, 49, 0,104, 50, 0,102, 49, 0,102, 50, 0,102, 51, 0,104,105,100,101, 0,118,101, 99, 91, 52, + 93, 0,109, 97,116, 95,110,114, 0,112,110,116,115,117, 0,112,110,116,115,118, 0,114,101,115,111,108,117, 0,114,101,115,111, +108,118, 0,111,114,100,101,114,117, 0,111,114,100,101,114,118, 0,102,108, 97,103,117, 0,102,108, 97,103,118, 0, 42,107,110, +111,116,115,117, 0, 42,107,110,111,116,115,118, 0,116,105,108,116, 95,105,110,116,101,114,112, 0,114, 97,100,105,117,115, 95, +105,110,116,101,114,112, 0, 99,104, 97,114,105,100,120, 0,107,101,114,110, 0,119, 0,104, 0,110,117,114, 98,115, 0, 42,107, +101,121,105,110,100,101,120, 0,115,104, 97,112,101,110,114, 0,110,117,114, 98, 0, 42,101,100,105,116,110,117,114, 98, 0, 42, + 98,101,118,111, 98,106, 0, 42,116, 97,112,101,114,111, 98,106, 0, 42,116,101,120,116,111,110, 99,117,114,118,101, 0, 42,112, + 97,116,104, 0, 42,107,101,121, 0, 98,101,118, 0,100,114, 97,119,102,108, 97,103, 0,116,119,105,115,116, 95,109,111,100,101, + 0,116,119,105,115,116, 95,115,109,111,111,116,104, 0,115,109, 97,108,108, 99, 97,112,115, 95,115, 99, 97,108,101, 0,112, 97, +116,104,108,101,110, 0, 98,101,118,114,101,115,111,108, 0,119,105,100,116,104, 0,101,120,116, 49, 0,101,120,116, 50, 0,114, +101,115,111,108,117, 95,114,101,110, 0,114,101,115,111,108,118, 95,114,101,110, 0, 97, 99,116,110,117, 0, 42,108, 97,115,116, +115,101,108, 0,115,112, 97, 99,101,109,111,100,101, 0,115,112, 97, 99,105,110,103, 0,108,105,110,101,100,105,115,116, 0,115, +104,101, 97,114, 0,102,115,105,122,101, 0,119,111,114,100,115,112, 97, 99,101, 0,117,108,112,111,115, 0,117,108,104,101,105, +103,104,116, 0,120,111,102, 0,121,111,102, 0,108,105,110,101,119,105,100,116,104, 0, 42,115,116,114, 0, 42,115,101,108, 98, +111,120,101,115, 0, 42,101,100,105,116,102,111,110,116, 0,102, 97,109,105,108,121, 91, 50, 52, 93, 0, 42,118,102,111,110,116, + 0, 42,118,102,111,110,116, 98, 0, 42,118,102,111,110,116,105, 0, 42,118,102,111,110,116, 98,105, 0,115,101,112, 99,104, 97, +114, 0,116,111,116, 98,111,120, 0, 97, 99,116, 98,111,120, 0, 42,116, 98, 0,115,101,108,115,116, 97,114,116, 0,115,101,108, +101,110,100, 0, 42,115,116,114,105,110,102,111, 0, 99,117,114,105,110,102,111, 0, 98,101,118,102, 97, 99, 49, 0, 98,101,118, +102, 97, 99, 50, 0, 42,109,115,101,108,101, 99,116, 0, 42,109,112,111,108,121, 0, 42,109,116,112,111,108,121, 0, 42,109,108, +111,111,112, 0, 42,109,108,111,111,112,117,118, 0, 42,109,108,111,111,112, 99,111,108, 0, 42,109,102, 97, 99,101, 0, 42,109, +116,102, 97, 99,101, 0, 42,116,102, 97, 99,101, 0, 42,109,118,101,114,116, 0, 42,109,101,100,103,101, 0, 42,100,118,101,114, +116, 0, 42,109, 99,111,108, 0, 42,109,115,116,105, 99,107,121, 0, 42,116,101,120, 99,111,109,101,115,104, 0, 42,101,100,105, +116, 95, 98,116,109,101,115,104, 0,118,100, 97,116, 97, 0,101,100, 97,116, 97, 0,102,100, 97,116, 97, 0,112,100, 97,116, 97, + 0,108,100, 97,116, 97, 0,116,111,116,101,100,103,101, 0,116,111,116,102, 97, 99,101, 0,116,111,116,115,101,108,101, 99,116, + 0,116,111,116,112,111,108,121, 0,116,111,116,108,111,111,112, 0, 97, 99,116, 95,102, 97, 99,101, 0,115,109,111,111,116,104, +114,101,115,104, 0,115,117, 98,100,105,118, 0,115,117, 98,100,105,118,114, 0,115,117, 98,115,117,114,102,116,121,112,101, 0, +101,100,105,116,102,108, 97,103, 0, 42,109,114, 0, 42,116,112, 97,103,101, 0,117,118, 91, 52, 93, 91, 50, 93, 0, 99,111,108, + 91, 52, 93, 0,116,114, 97,110,115,112, 0,116,105,108,101, 0,117,110,119,114, 97,112, 0,118, 49, 0,118, 50, 0,118, 51, 0, +118, 52, 0,101,100, 99,111,100,101, 0, 99,114,101, 97,115,101, 0, 98,119,101,105,103,104,116, 0,100,101,102, 95,110,114, 0, + 42,100,119, 0,116,111,116,119,101,105,103,104,116, 0, 99,111, 91, 51, 93, 0,110,111, 91, 51, 93, 0,108,111,111,112,115,116, + 97,114,116, 0,118, 0,101, 0,117,118, 91, 50, 93, 0, 99,111, 91, 50, 93, 0,102, 0,105, 0,115, 91, 50, 53, 54, 93, 0,116, +111,116,100,105,115,112, 0,108,101,118,101,108, 0, 40, 42,100,105,115,112,115, 41, 40, 41, 0, 42,104,105,100,100,101,110, 0, +118, 91, 52, 93, 0,109,105,100, 0,112, 97,100, 91, 50, 93, 0,118, 91, 50, 93, 0, 42,102, 97, 99,101,115, 0, 42, 99,111,108, +102, 97, 99,101,115, 0, 42,101,100,103,101,115, 0, 42,118,101,114,116,115, 0,108,101,118,101,108,115, 0,108,101,118,101,108, + 95, 99,111,117,110,116, 0, 99,117,114,114,101,110,116, 0,110,101,119,108,118,108, 0,101,100,103,101,108,118,108, 0,112,105, +110,108,118,108, 0,114,101,110,100,101,114,108,118,108, 0,117,115,101, 95, 99,111,108, 0, 42,101,100,103,101, 95,102,108, 97, +103,115, 0, 42,101,100,103,101, 95, 99,114,101, 97,115,101,115, 0,114, 97,100,105,117,115, 91, 51, 93, 0,115,116, 97, 99,107, +105,110,100,101,120, 0, 42,101,114,114,111,114, 0,109,111,100,105,102,105,101,114, 0, 42,116,101,120,116,117,114,101, 0, 42, +109, 97,112, 95,111, 98,106,101, 99,116, 0,117,118,108, 97,121,101,114, 95,110, 97,109,101, 91, 54, 52, 93, 0,117,118,108, 97, +121,101,114, 95,116,109,112, 0,116,101,120,109, 97,112,112,105,110,103, 0,115,117, 98,100,105,118, 84,121,112,101, 0,114,101, +110,100,101,114, 76,101,118,101,108,115, 0, 42,101,109, 67, 97, 99,104,101, 0, 42,109, 67, 97, 99,104,101, 0,115,116,114,101, +110,103,116,104, 0,100,101,102, 97,120,105,115, 0,112, 97,100, 91, 54, 93, 0,108,101,110,103,116,104, 0,114, 97,110,100,111, +109,105,122,101, 0,115,101,101,100, 0, 42,111, 98, 95, 97,114,109, 0, 42,115,116, 97,114,116, 95, 99, 97,112, 0, 42,101,110, +100, 95, 99, 97,112, 0, 42, 99,117,114,118,101, 95,111, 98, 0, 42,111,102,102,115,101,116, 95,111, 98, 0,111,102,102,115,101, +116, 91, 51, 93, 0,115, 99, 97,108,101, 91, 51, 93, 0,109,101,114,103,101, 95,100,105,115,116, 0,102,105,116, 95,116,121,112, +101, 0,111,102,102,115,101,116, 95,116,121,112,101, 0, 99,111,117,110,116, 0, 97,120,105,115, 0,116,111,108,101,114, 97,110, + 99,101, 0, 42,109,105,114,114,111,114, 95,111, 98, 0,115,112,108,105,116, 95, 97,110,103,108,101, 0,118, 97,108,117,101, 0, +114,101,115, 0,118, 97,108, 95,102,108, 97,103,115, 0,108,105,109, 95,102,108, 97,103,115, 0,101, 95,102,108, 97,103,115, 0, + 98,101,118,101,108, 95, 97,110,103,108,101, 0,100,101,102,103,114,112, 95,110, 97,109,101, 91, 54, 52, 93, 0, 42,100,111,109, + 97,105,110, 0, 42,102,108,111,119, 0, 42, 99,111,108,108, 0,116,105,109,101, 0,100,105,114,101, 99,116,105,111,110, 0,109, +105,100,108,101,118,101,108, 0, 42,112,114,111,106,101, 99,116,111,114,115, 91, 49, 48, 93, 0, 42,105,109, 97,103,101, 0,110, +117,109, 95,112,114,111,106,101, 99,116,111,114,115, 0, 97,115,112,101, 99,116,120, 0, 97,115,112,101, 99,116,121, 0,115, 99, + 97,108,101,120, 0,115, 99, 97,108,101,121, 0,112,101,114, 99,101,110,116, 0,102, 97, 99,101, 67,111,117,110,116, 0,102, 97, + 99, 0,114,101,112,101, 97,116, 0, 42,111, 98,106,101, 99,116, 99,101,110,116,101,114, 0,115,116, 97,114,116,120, 0,115,116, + 97,114,116,121, 0,104,101,105,103,104,116, 0,110, 97,114,114,111,119, 0,115,112,101,101,100, 0,100, 97,109,112, 0,102, 97, +108,108,111,102,102, 0,116,105,109,101,111,102,102,115, 0,108,105,102,101,116,105,109,101, 0,100,101,102,111,114,109,102,108, + 97,103, 0,109,117,108,116,105, 0, 42,112,114,101,118, 67,111,115, 0,115,117, 98,116, 97,114,103,101,116, 91, 54, 52, 93, 0, +112, 97,114,101,110,116,105,110,118, 91, 52, 93, 91, 52, 93, 0, 99,101,110,116, 91, 51, 93, 0, 42,105,110,100,101,120, 97,114, + 0,116,111,116,105,110,100,101,120, 0,102,111,114, 99,101, 0, 42, 99,108,111,116,104, 79, 98,106,101, 99,116, 0, 42,115,105, +109, 95,112, 97,114,109,115, 0, 42, 99,111,108,108, 95,112, 97,114,109,115, 0, 42,112,111,105,110,116, 95, 99, 97, 99,104,101, + 0,112,116, 99, 97, 99,104,101,115, 0, 42,120, 0, 42,120,110,101,119, 0, 42,120,111,108,100, 0, 42, 99,117,114,114,101,110, +116, 95,120,110,101,119, 0, 42, 99,117,114,114,101,110,116, 95,120, 0, 42, 99,117,114,114,101,110,116, 95,118, 0, 42,109,102, + 97, 99,101,115, 0,110,117,109,118,101,114,116,115, 0,110,117,109,102, 97, 99,101,115, 0,116,105,109,101, 95,120, 0,116,105, +109,101, 95,120,110,101,119, 0, 42, 98,118,104,116,114,101,101, 0, 42,118, 0, 42,100,109, 0, 99,102,114, 97, 0,111,112,101, +114, 97,116,105,111,110, 0,118,101,114,116,101,120, 0,116,111,116,105,110,102,108,117,101,110, 99,101, 0,103,114,105,100,115, +105,122,101, 0, 42, 98,105,110,100,105,110,102,108,117,101,110, 99,101,115, 0, 42, 98,105,110,100,111,102,102,115,101,116,115, + 0, 42, 98,105,110,100, 99, 97,103,101, 99,111,115, 0,116,111,116, 99, 97,103,101,118,101,114,116, 0, 42,100,121,110,103,114, +105,100, 0, 42,100,121,110,105,110,102,108,117,101,110, 99,101,115, 0, 42,100,121,110,118,101,114,116,115, 0, 42,112, 97,100, + 50, 0,100,121,110,103,114,105,100,115,105,122,101, 0,100,121,110, 99,101,108,108,109,105,110, 91, 51, 93, 0,100,121,110, 99, +101,108,108,119,105,100,116,104, 0, 98,105,110,100,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42, 98,105,110,100,119,101,105,103, +104,116,115, 0, 42, 98,105,110,100, 99,111,115, 0, 40, 42, 98,105,110,100,102,117,110, 99, 41, 40, 41, 0, 42,112,115,121,115, + 0,116,111,116,100,109,118,101,114,116, 0,116,111,116,100,109,101,100,103,101, 0,116,111,116,100,109,102, 97, 99,101, 0,112, +111,115,105,116,105,111,110, 0,114, 97,110,100,111,109, 95,112,111,115,105,116,105,111,110, 0, 42,102, 97, 99,101,112, 97, 0, +118,103,114,111,117,112, 0,112,114,111,116,101, 99,116, 0,108,118,108, 0,115, 99,117,108,112,116,108,118,108, 0,116,111,116, +108,118,108, 0,115,105,109,112,108,101, 0, 42,102,115,115, 0, 42,116, 97,114,103,101,116, 0, 42, 97,117,120, 84, 97,114,103, +101,116, 0,118,103,114,111,117,112, 95,110, 97,109,101, 91, 54, 52, 93, 0,107,101,101,112, 68,105,115,116, 0,115,104,114,105, +110,107, 84,121,112,101, 0,115,104,114,105,110,107, 79,112,116,115, 0,112,114,111,106, 65,120,105,115, 0,115,117, 98,115,117, +114,102, 76,101,118,101,108,115, 0, 42,111,114,105,103,105,110, 0,102, 97, 99,116,111,114, 0,108,105,109,105,116, 91, 50, 93, + 0,111,114,105,103,105,110, 79,112,116,115, 0,111,102,102,115,101,116, 95,102, 97, 99, 0,111,102,102,115,101,116, 95,102, 97, + 99, 95,118,103, 0, 99,114,101, 97,115,101, 95,105,110,110,101,114, 0, 99,114,101, 97,115,101, 95,111,117,116,101,114, 0, 99, +114,101, 97,115,101, 95,114,105,109, 0,109, 97,116, 95,111,102,115, 0,109, 97,116, 95,111,102,115, 95,114,105,109, 0, 42,111, + 98, 95, 97,120,105,115, 0,115,116,101,112,115, 0,114,101,110,100,101,114, 95,115,116,101,112,115, 0,105,116,101,114, 0,115, + 99,114,101,119, 95,111,102,115, 0, 97,110,103,108,101, 0, 42,111, 99,101, 97,110, 0, 42,111, 99,101, 97,110, 99, 97, 99,104, +101, 0,114,101,115,111,108,117,116,105,111,110, 0,115,112, 97,116,105, 97,108, 95,115,105,122,101, 0,119,105,110,100, 95,118, +101,108,111, 99,105,116,121, 0,115,109, 97,108,108,101,115,116, 95,119, 97,118,101, 0,119, 97,118,101, 95, 97,108,105,103,110, +109,101,110,116, 0,119, 97,118,101, 95,100,105,114,101, 99,116,105,111,110, 0,119, 97,118,101, 95,115, 99, 97,108,101, 0, 99, +104,111,112, 95, 97,109,111,117,110,116, 0,102,111, 97,109, 95, 99,111,118,101,114, 97,103,101, 0, 98, 97,107,101,115,116, 97, +114,116, 0, 98, 97,107,101,101,110,100, 0, 99, 97, 99,104,101,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,102,111, 97,109,108, + 97,121,101,114,110, 97,109,101, 91, 54, 52, 93, 0, 99, 97, 99,104,101,100, 0,103,101,111,109,101,116,114,121, 95,109,111,100, +101, 0,114,101,102,114,101,115,104, 0,114,101,112,101, 97,116, 95,120, 0,114,101,112,101, 97,116, 95,121, 0,102,111, 97,109, + 95,102, 97,100,101, 0, 42,111, 98,106,101, 99,116, 95,102,114,111,109, 0, 42,111, 98,106,101, 99,116, 95,116,111, 0,102, 97, +108,108,111,102,102, 95,114, 97,100,105,117,115, 0,101,100,105,116, 95,102,108, 97,103,115, 0,100,101,102, 97,117,108,116, 95, +119,101,105,103,104,116, 0, 42, 99,109, 97,112, 95, 99,117,114,118,101, 0, 97,100,100, 95,116,104,114,101,115,104,111,108,100, + 0,114,101,109, 95,116,104,114,101,115,104,111,108,100, 0,109, 97,115,107, 95, 99,111,110,115,116, 97,110,116, 0,109, 97,115, +107, 95,100,101,102,103,114,112, 95,110, 97,109,101, 91, 54, 52, 93, 0,109, 97,115,107, 95,116,101,120, 95,117,115,101, 95, 99, +104, 97,110,110,101,108, 0, 42,109, 97,115,107, 95,116,101,120,116,117,114,101, 0, 42,109, 97,115,107, 95,116,101,120, 95,109, + 97,112, 95,111, 98,106, 0,109, 97,115,107, 95,116,101,120, 95,109, 97,112,112,105,110,103, 0,109, 97,115,107, 95,116,101,120, + 95,117,118,108, 97,121,101,114, 95,110, 97,109,101, 91, 54, 52, 93, 0,112, 97,100, 95,105, 49, 0,100,101,102,103,114,112, 95, +110, 97,109,101, 95, 97, 91, 54, 52, 93, 0,100,101,102,103,114,112, 95,110, 97,109,101, 95, 98, 91, 54, 52, 93, 0,100,101,102, + 97,117,108,116, 95,119,101,105,103,104,116, 95, 97, 0,100,101,102, 97,117,108,116, 95,119,101,105,103,104,116, 95, 98, 0,109, +105,120, 95,109,111,100,101, 0,109,105,120, 95,115,101,116, 0,112, 97,100, 95, 99, 49, 91, 54, 93, 0,112,114,111,120,105,109, +105,116,121, 95,109,111,100,101, 0,112,114,111,120,105,109,105,116,121, 95,102,108, 97,103,115, 0, 42,112,114,111,120,105,109, +105,116,121, 95,111, 98, 95,116, 97,114,103,101,116, 0,109,105,110, 95,100,105,115,116, 0,109, 97,120, 95,100,105,115,116, 0, +112, 97,100, 95,115, 49, 0, 42, 99, 97,110,118, 97,115, 0, 42, 98,114,117,115,104, 0,116,104,114,101,115,104,111,108,100, 0, +115, 99, 97,108,101, 0,104,101,114,109,105,116,101, 95,110,117,109, 0, 98,114, 97,110, 99,104, 95,115,109,111,111,116,104,105, +110,103, 0,115,121,109,109,101,116,114,121, 95, 97,120,101,115, 0, 42,108, 97,116,116, 0,112,110,116,115,119, 0,111,112,110, +116,115,117, 0,111,112,110,116,115,118, 0,111,112,110,116,115,119, 0,116,121,112,101,117, 0,116,121,112,101,118, 0,116,121, +112,101,119, 0,102,117, 0,102,118, 0,102,119, 0,100,117, 0,100,118, 0,100,119, 0, 42,100,101,102, 0, 42,108, 97,116,116, +105, 99,101,100, 97,116, 97, 0,108, 97,116,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 42,101,100,105,116,108, 97,116,116, 0,118, +101, 99, 91, 56, 93, 91, 51, 93, 0, 42,115, 99,117,108,112,116, 0,112, 97,114,116,121,112,101, 0,112, 97,114, 49, 0,112, 97, +114, 50, 0,112, 97,114, 51, 0,112, 97,114,115,117, 98,115,116,114, 91, 54, 52, 93, 0, 42,116,114, 97, 99,107, 0, 42,112,114, +111,120,121, 0, 42,112,114,111,120,121, 95,103,114,111,117,112, 0, 42,112,114,111,120,121, 95,102,114,111,109, 0, 42, 97, 99, +116,105,111,110, 0, 42,112,111,115,101,108,105, 98, 0, 42,112,111,115,101, 0, 42,103,112,100, 0, 97,118,115, 0, 42,109,112, + 97,116,104, 0, 99,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108,115, 0,101,102,102,101, 99,116, 0,100,101, +102, 98, 97,115,101, 0,109,111,100,105,102,105,101,114,115, 0,114,101,115,116,111,114,101, 95,109,111,100,101, 0, 42,109, 97, +116, 98,105,116,115, 0, 97, 99,116, 99,111,108, 0,100,108,111, 99, 91, 51, 93, 0,111,114,105,103, 91, 51, 93, 0,100,115,105, +122,101, 91, 51, 93, 0,100,115, 99, 97,108,101, 91, 51, 93, 0,100,114,111,116, 91, 51, 93, 0,100,113,117, 97,116, 91, 52, 93, + 0,114,111,116, 65,120,105,115, 91, 51, 93, 0,100,114,111,116, 65,120,105,115, 91, 51, 93, 0,114,111,116, 65,110,103,108,101, + 0,100,114,111,116, 65,110,103,108,101, 0,111, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, 99,111,110,115,116,105,110,118, 91, + 52, 93, 91, 52, 93, 0,105,109, 97,116, 95,114,101,110, 91, 52, 93, 91, 52, 93, 0,108, 97,121, 0,112, 97,100, 54, 0, 99,111, +108, 98,105,116,115, 0,116,114, 97,110,115,102,108, 97,103, 0,112,114,111,116,101, 99,116,102,108, 97,103, 0,116,114, 97, 99, +107,102,108, 97,103, 0,117,112,102,108, 97,103, 0,110,108, 97,102,108, 97,103, 0,105,112,111,102,108, 97,103, 0,115, 99, 97, +102,108, 97,103, 0,115, 99, 97,118,105,115,102,108, 97,103, 0,112, 97,100, 53, 0,100,117,112,111,110, 0,100,117,112,111,102, +102, 0,100,117,112,115,116, 97, 0,100,117,112,101,110,100, 0,115,102, 0,109, 97,115,115, 0,100, 97,109,112,105,110,103, 0, +105,110,101,114,116,105, 97, 0,102,111,114,109,102, 97, 99,116,111,114, 0,114,100, 97,109,112,105,110,103, 0,109, 97,114,103, +105,110, 0,109, 97,120, 95,118,101,108, 0,109,105,110, 95,118,101,108, 0,109, 95, 99,111,110,116, 97, 99,116, 80,114,111, 99, +101,115,115,105,110,103, 84,104,114,101,115,104,111,108,100, 0,111, 98,115,116, 97, 99,108,101, 82, 97,100, 0,115,116,101,112, + 95,104,101,105,103,104,116, 0,106,117,109,112, 95,115,112,101,101,100, 0,102, 97,108,108, 95,115,112,101,101,100, 0,112, 97, +100, 49, 91, 52, 93, 0,114,111,116,109,111,100,101, 0, 98,111,117,110,100,116,121,112,101, 0, 99,111,108,108,105,115,105,111, +110, 95, 98,111,117,110,100,116,121,112,101, 0,114,101,115,116,114,105, 99,116,102,108, 97,103, 0,100,116, 0,101,109,112,116, +121, 95,100,114, 97,119,116,121,112,101, 0,101,109,112,116,121, 95,100,114, 97,119,115,105,122,101, 0,100,117,112,102, 97, 99, +101,115, 99, 97, 0,112,114,111,112, 0,115,101,110,115,111,114,115, 0, 99,111,110,116,114,111,108,108,101,114,115, 0, 97, 99, +116,117, 97,116,111,114,115, 0, 98, 98,115,105,122,101, 91, 51, 93, 0, 97, 99,116,100,101,102, 0,103, 97,109,101,102,108, 97, +103, 0,103, 97,109,101,102,108, 97,103, 50, 0, 42, 98,115,111,102,116, 0,115,111,102,116,102,108, 97,103, 0, 97,110,105,115, +111,116,114,111,112,105, 99, 70,114,105, 99,116,105,111,110, 91, 51, 93, 0, 99,111,110,115,116,114, 97,105,110,116,115, 0,110, +108, 97,115,116,114,105,112,115, 0,104,111,111,107,115, 0,112, 97,114,116,105, 99,108,101,115,121,115,116,101,109, 0, 42,115, +111,102,116, 0, 42,100,117,112, 95,103,114,111,117,112, 0, 98,111,100,121, 95,116,121,112,101, 0,115,104, 97,112,101,102,108, + 97,103, 0, 42,102,108,117,105,100,115,105,109, 83,101,116,116,105,110,103,115, 0, 42,100,101,114,105,118,101,100, 68,101,102, +111,114,109, 0, 42,100,101,114,105,118,101,100, 70,105,110, 97,108, 0,108, 97,115,116, 68, 97,116, 97, 77, 97,115,107, 0, 99, +117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 0,115,116, 97,116,101, 0,105,110,105,116, 95,115,116, 97,116,101, 0, +103,112,117,108, 97,109,112, 0,112, 99, 95,105,100,115, 0, 42,100,117,112,108,105,108,105,115,116, 0,105,109, 97, 95,111,102, +115, 91, 50, 93, 0, 99,117,114,105,110,100,101,120, 0, 97, 99,116,105,118,101, 0,111,114,105,103,108, 97,121, 0,111,109, 97, +116, 91, 52, 93, 91, 52, 93, 0,111,114, 99,111, 91, 51, 93, 0,110,111, 95,100,114, 97,119, 0, 97,110,105,109, 97,116,101,100, + 0,100,101,102,108,101, 99,116, 0,102,111,114, 99,101,102,105,101,108,100, 0,115,104, 97,112,101, 0,116,101,120, 95,109,111, +100,101, 0,107,105,110,107, 0,107,105,110,107, 95, 97,120,105,115, 0,122,100,105,114, 0,102, 95,115,116,114,101,110,103,116, +104, 0,102, 95,100, 97,109,112, 0,102, 95,102,108,111,119, 0,102, 95,115,105,122,101, 0,102, 95,112,111,119,101,114, 0,109, + 97,120,100,105,115,116, 0,109,105,110,100,105,115,116, 0,102, 95,112,111,119,101,114, 95,114, 0,109, 97,120,114, 97,100, 0, +109,105,110,114, 97,100, 0,112,100,101,102, 95,100, 97,109,112, 0,112,100,101,102, 95,114,100, 97,109,112, 0,112,100,101,102, + 95,112,101,114,109, 0,112,100,101,102, 95,102,114,105, 99,116, 0,112,100,101,102, 95,114,102,114,105, 99,116, 0,112,100,101, +102, 95,115,116,105, 99,107,110,101,115,115, 0, 97, 98,115,111,114,112,116,105,111,110, 0,112,100,101,102, 95,115, 98,100, 97, +109,112, 0,112,100,101,102, 95,115, 98,105,102,116, 0,112,100,101,102, 95,115, 98,111,102,116, 0, 99,108,117,109,112, 95,102, + 97, 99, 0, 99,108,117,109,112, 95,112,111,119, 0,107,105,110,107, 95,102,114,101,113, 0,107,105,110,107, 95,115,104, 97,112, +101, 0,107,105,110,107, 95, 97,109,112, 0,102,114,101,101, 95,101,110,100, 0,116,101,120, 95,110, 97, 98,108, 97, 0, 42,114, +110,103, 0,102, 95,110,111,105,115,101, 0,119,101,105,103,104,116, 91, 49, 51, 93, 0,103,108,111, 98, 97,108, 95,103,114, 97, +118,105,116,121, 0,114,116, 91, 51, 93, 0,116,111,116,100, 97,116, 97, 0,102,114, 97,109,101, 0,116,111,116,112,111,105,110, +116, 0,100, 97,116, 97, 95,116,121,112,101,115, 0, 42,100, 97,116, 97, 91, 56, 93, 0, 42, 99,117,114, 91, 56, 93, 0,101,120, +116,114, 97,100, 97,116, 97, 0,115,116,101,112, 0,115,105,109,102,114, 97,109,101, 0,115,116, 97,114,116,102,114, 97,109,101, + 0,101,110,100,102,114, 97,109,101, 0,101,100,105,116,102,114, 97,109,101, 0,108, 97,115,116, 95,101,120, 97, 99,116, 0,108, + 97,115,116, 95,118, 97,108,105,100, 0, 99,111,109,112,114,101,115,115,105,111,110, 0,112,114,101,118, 95,110, 97,109,101, 91, + 54, 52, 93, 0,105,110,102,111, 91, 54, 52, 93, 0,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0, 42, 99, 97, 99,104,101,100, 95, +102,114, 97,109,101,115, 0,109,101,109, 95, 99, 97, 99,104,101, 0, 42,101,100,105,116, 0, 40, 42,102,114,101,101, 95,101,100, +105,116, 41, 40, 41, 0,108,105,110, 83,116,105,102,102, 0, 97,110,103, 83,116,105,102,102, 0,118,111,108,117,109,101, 0,118, +105,116,101,114, 97,116,105,111,110,115, 0,112,105,116,101,114, 97,116,105,111,110,115, 0,100,105,116,101,114, 97,116,105,111, +110,115, 0, 99,105,116,101,114, 97,116,105,111,110,115, 0,107, 83, 82, 72, 82, 95, 67, 76, 0,107, 83, 75, 72, 82, 95, 67, 76, + 0,107, 83, 83, 72, 82, 95, 67, 76, 0,107, 83, 82, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 83, 75, 95, 83, 80, 76, 84, 95, 67, + 76, 0,107, 83, 83, 95, 83, 80, 76, 84, 95, 67, 76, 0,107, 86, 67, 70, 0,107, 68, 80, 0,107, 68, 71, 0,107, 76, 70, 0,107, + 80, 82, 0,107, 86, 67, 0,107, 68, 70, 0,107, 77, 84, 0,107, 67, 72, 82, 0,107, 75, 72, 82, 0,107, 83, 72, 82, 0,107, 65, + 72, 82, 0, 99,111,108,108,105,115,105,111,110,102,108, 97,103,115, 0,110,117,109, 99,108,117,115,116,101,114,105,116,101,114, + 97,116,105,111,110,115, 0,119,101,108,100,105,110,103, 0,116,111,116,115,112,114,105,110,103, 0, 42, 98,112,111,105,110,116, + 0, 42, 98,115,112,114,105,110,103, 0,109,115,103, 95,108,111, 99,107, 0,109,115,103, 95,118, 97,108,117,101, 0,110,111,100, +101,109, 97,115,115, 0,110, 97,109,101,100, 86, 71, 95, 77, 97,115,115, 91, 54, 52, 93, 0,103,114, 97,118, 0,109,101,100,105, + 97,102,114,105, 99,116, 0,114,107,108,105,109,105,116, 0,112,104,121,115,105, 99,115, 95,115,112,101,101,100, 0,103,111, 97, +108,115,112,114,105,110,103, 0,103,111, 97,108,102,114,105, 99,116, 0,109,105,110,103,111, 97,108, 0,109, 97,120,103,111, 97, +108, 0,100,101,102,103,111, 97,108, 0,118,101,114,116,103,114,111,117,112, 0,110, 97,109,101,100, 86, 71, 95, 83,111,102,116, +103,111, 97,108, 91, 54, 52, 93, 0,102,117,122,122,121,110,101,115,115, 0,105,110,115,112,114,105,110,103, 0,105,110,102,114, +105, 99,116, 0,110, 97,109,101,100, 86, 71, 95, 83,112,114,105,110,103, 95, 75, 91, 54, 52, 93, 0,101,102,114, 97, 0,105,110, +116,101,114,118, 97,108, 0,108,111, 99, 97,108, 0,115,111,108,118,101,114,102,108, 97,103,115, 0, 42, 42,107,101,121,115, 0, +116,111,116,112,111,105,110,116,107,101,121, 0,115,101, 99,111,110,100,115,112,114,105,110,103, 0, 99,111,108, 98, 97,108,108, + 0, 98, 97,108,108,100, 97,109,112, 0, 98, 97,108,108,115,116,105,102,102, 0,115, 98, 99, 95,109,111,100,101, 0, 97,101,114, +111,101,100,103,101, 0,109,105,110,108,111,111,112,115, 0,109, 97,120,108,111,111,112,115, 0, 99,104,111,107,101, 0,115,111, +108,118,101,114, 95, 73, 68, 0,112,108, 97,115,116,105, 99, 0,115,112,114,105,110,103,112,114,101,108,111, 97,100, 0, 42,115, + 99,114, 97,116, 99,104, 0,115,104,101, 97,114,115,116,105,102,102, 0,105,110,112,117,115,104, 0, 42,112,111,105,110,116, 99, + 97, 99,104,101, 0, 42,101,102,102,101, 99,116,111,114, 95,119,101,105,103,104,116,115, 0,108, 99,111,109, 91, 51, 93, 0,108, +114,111,116, 91, 51, 93, 91, 51, 93, 0,108,115, 99, 97,108,101, 91, 51, 93, 91, 51, 93, 0,108, 97,115,116, 95,102,114, 97,109, +101, 0,118,101,108, 91, 51, 93, 0, 42,102,109,100, 0,115,104,111,119, 95, 97,100,118, 97,110, 99,101,100,111,112,116,105,111, +110,115, 0,114,101,115,111,108,117,116,105,111,110,120,121,122, 0,112,114,101,118,105,101,119,114,101,115,120,121,122, 0,114, +101, 97,108,115,105,122,101, 0,103,117,105, 68,105,115,112,108, 97,121, 77,111,100,101, 0,114,101,110,100,101,114, 68,105,115, +112,108, 97,121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 86, 97,108,117,101, 0,118,105,115, 99,111,115,105,116, +121, 77,111,100,101, 0,118,105,115, 99,111,115,105,116,121, 69,120,112,111,110,101,110,116, 0,103,114, 97,118, 91, 51, 93, 0, + 97,110,105,109, 83,116, 97,114,116, 0, 97,110,105,109, 69,110,100, 0, 98, 97,107,101, 83,116, 97,114,116, 0, 98, 97,107,101, + 69,110,100, 0,102,114, 97,109,101, 79,102,102,115,101,116, 0,103,115,116, 97,114, 0,109, 97,120, 82,101,102,105,110,101, 0, +105,110,105, 86,101,108,120, 0,105,110,105, 86,101,108,121, 0,105,110,105, 86,101,108,122, 0, 42,111,114,103, 77,101,115,104, + 0, 42,109,101,115,104, 66, 66, 0,115,117,114,102,100, 97,116, 97, 80, 97,116,104, 91, 49, 48, 50, 52, 93, 0, 98, 98, 83,116, + 97,114,116, 91, 51, 93, 0, 98, 98, 83,105,122,101, 91, 51, 93, 0,116,121,112,101, 70,108, 97,103,115, 0,100,111,109, 97,105, +110, 78,111,118,101, 99,103,101,110, 0,118,111,108,117,109,101, 73,110,105,116, 84,121,112,101, 0,112, 97,114,116, 83,108,105, +112, 86, 97,108,117,101, 0,103,101,110,101,114, 97,116,101, 84,114, 97, 99,101,114,115, 0,103,101,110,101,114, 97,116,101, 80, + 97,114,116,105, 99,108,101,115, 0,115,117,114,102, 97, 99,101, 83,109,111,111,116,104,105,110,103, 0,115,117,114,102, 97, 99, +101, 83,117, 98,100,105,118,115, 0,112, 97,114,116,105, 99,108,101, 73,110,102, 83,105,122,101, 0,112, 97,114,116,105, 99,108, +101, 73,110,102, 65,108,112,104, 97, 0,102, 97,114, 70,105,101,108,100, 83,105,122,101, 0, 42,109,101,115,104, 86,101,108,111, + 99,105,116,105,101,115, 0, 99,112,115, 84,105,109,101, 83,116, 97,114,116, 0, 99,112,115, 84,105,109,101, 69,110,100, 0, 99, +112,115, 81,117, 97,108,105,116,121, 0, 97,116,116,114, 97, 99,116,102,111,114, 99,101, 83,116,114,101,110,103,116,104, 0, 97, +116,116,114, 97, 99,116,102,111,114, 99,101, 82, 97,100,105,117,115, 0,118,101,108,111, 99,105,116,121,102,111,114, 99,101, 83, +116,114,101,110,103,116,104, 0,118,101,108,111, 99,105,116,121,102,111,114, 99,101, 82, 97,100,105,117,115, 0,108, 97,115,116, +103,111,111,100,102,114, 97,109,101, 0, 97,110,105,109, 82, 97,116,101, 0,109,105,115,116,121,112,101, 0,104,111,114,114, 0, +104,111,114,103, 0,104,111,114, 98, 0,122,101,110,114, 0,122,101,110,103, 0,122,101,110, 98, 0,102, 97,115,116, 99,111,108, + 0,101,120,112,111,115,117,114,101, 0,101,120,112, 0,114, 97,110,103,101, 0,108,105,110,102, 97, 99, 0,108,111,103,102, 97, + 99, 0,103,114, 97,118,105,116,121, 0, 97, 99,116,105,118,105,116,121, 66,111,120, 82, 97,100,105,117,115, 0,115,107,121,116, +121,112,101, 0,111, 99, 99,108,117,115,105,111,110, 82,101,115, 0,112,104,121,115,105, 99,115, 69,110,103,105,110,101, 0,116, +105, 99,114, 97,116,101, 0,109, 97,120,108,111,103,105, 99,115,116,101,112, 0,112,104,121,115,117, 98,115,116,101,112, 0,109, + 97,120,112,104,121,115,116,101,112, 0,109,105,115,105, 0,109,105,115,116,115,116, 97, 0,109,105,115,116,100,105,115,116, 0, +109,105,115,116,104,105, 0,115,116, 97,114,114, 0,115,116, 97,114,103, 0,115,116, 97,114, 98, 0,115,116, 97,114,107, 0,115, +116, 97,114,115,105,122,101, 0,115,116, 97,114,109,105,110,100,105,115,116, 0,115,116, 97,114,100,105,115,116, 0,115,116, 97, +114, 99,111,108,110,111,105,115,101, 0,100,111,102,115,116, 97, 0,100,111,102,101,110,100, 0,100,111,102,109,105,110, 0,100, +111,102,109, 97,120, 0, 97,111,100,105,115,116, 0, 97,111,100,105,115,116,102, 97, 99, 0, 97,111,101,110,101,114,103,121, 0, + 97,111, 98,105, 97,115, 0, 97,111,109,111,100,101, 0, 97,111,115, 97,109,112, 0, 97,111,109,105,120, 0, 97,111, 99,111,108, +111,114, 0, 97,111, 95, 97,100, 97,112,116, 95,116,104,114,101,115,104, 0, 97,111, 95, 97,100, 97,112,116, 95,115,112,101,101, +100, 95,102, 97, 99, 0, 97,111, 95, 97,112,112,114,111,120, 95,101,114,114,111,114, 0, 97,111, 95, 97,112,112,114,111,120, 95, + 99,111,114,114,101, 99,116,105,111,110, 0, 97,111, 95,105,110,100,105,114,101, 99,116, 95,101,110,101,114,103,121, 0, 97,111, + 95,101,110,118, 95,101,110,101,114,103,121, 0, 97,111, 95,112, 97,100, 50, 0, 97,111, 95,105,110,100,105,114,101, 99,116, 95, + 98,111,117,110, 99,101,115, 0, 97,111, 95,112, 97,100, 0, 97,111, 95,115, 97,109,112, 95,109,101,116,104,111,100, 0, 97,111, + 95,103, 97,116,104,101,114, 95,109,101,116,104,111,100, 0, 97,111, 95, 97,112,112,114,111,120, 95,112, 97,115,115,101,115, 0, + 42, 97,111,115,112,104,101,114,101, 0, 42, 97,111,116, 97, 98,108,101,115, 0,115,101,108, 99,111,108, 0,115,120, 0,115,121, + 0, 42,108,112, 70,111,114,109, 97,116, 0, 42,108,112, 80, 97,114,109,115, 0, 99, 98, 70,111,114,109, 97,116, 0, 99, 98, 80, + 97,114,109,115, 0,102, 99, 99, 84,121,112,101, 0,102, 99, 99, 72, 97,110,100,108,101,114, 0,100,119, 75,101,121, 70,114, 97, +109,101, 69,118,101,114,121, 0,100,119, 81,117, 97,108,105,116,121, 0,100,119, 66,121,116,101,115, 80,101,114, 83,101, 99,111, +110,100, 0,100,119, 70,108, 97,103,115, 0,100,119, 73,110,116,101,114,108,101, 97,118,101, 69,118,101,114,121, 0, 97,118,105, + 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 42, 99,100, 80, 97,114,109,115, 0, 42,112, 97,100, 0, 99,100, 83, +105,122,101, 0,113,116, 99,111,100,101, 99,110, 97,109,101, 91, 49, 50, 56, 93, 0, 99,111,100,101, 99, 84,121,112,101, 0, 99, +111,100,101, 99, 83,112, 97,116,105, 97,108, 81,117, 97,108,105,116,121, 0, 99,111,100,101, 99, 0, 99,111,100,101, 99, 70,108, + 97,103,115, 0, 99,111,108,111,114, 68,101,112,116,104, 0, 99,111,100,101, 99, 84,101,109,112,111,114, 97,108, 81,117, 97,108, +105,116,121, 0,109,105,110, 83,112, 97,116,105, 97,108, 81,117, 97,108,105,116,121, 0,109,105,110, 84,101,109,112,111,114, 97, +108, 81,117, 97,108,105,116,121, 0,107,101,121, 70,114, 97,109,101, 82, 97,116,101, 0, 98,105,116, 82, 97,116,101, 0, 97,117, +100,105,111, 99,111,100,101, 99, 84,121,112,101, 0, 97,117,100,105,111, 83, 97,109,112,108,101, 82, 97,116,101, 0, 97,117,100, +105,111, 66,105,116, 68,101,112,116,104, 0, 97,117,100,105,111, 67,104, 97,110,110,101,108,115, 0, 97,117,100,105,111, 67,111, +100,101, 99, 70,108, 97,103,115, 0, 97,117,100,105,111, 66,105,116, 82, 97,116,101, 0, 97,117,100,105,111, 95, 99,111,100,101, + 99, 0,118,105,100,101,111, 95, 98,105,116,114, 97,116,101, 0, 97,117,100,105,111, 95, 98,105,116,114, 97,116,101, 0, 97,117, +100,105,111, 95,109,105,120,114, 97,116,101, 0, 97,117,100,105,111, 95, 99,104, 97,110,110,101,108,115, 0, 97,117,100,105,111, + 95,112, 97,100, 0, 97,117,100,105,111, 95,118,111,108,117,109,101, 0,103,111,112, 95,115,105,122,101, 0,114, 99, 95,109,105, +110, 95,114, 97,116,101, 0,114, 99, 95,109, 97,120, 95,114, 97,116,101, 0,114, 99, 95, 98,117,102,102,101,114, 95,115,105,122, +101, 0,109,117,120, 95,112, 97, 99,107,101,116, 95,115,105,122,101, 0,109,117,120, 95,114, 97,116,101, 0,109,105,120,114, 97, +116,101, 0,109, 97,105,110, 0,115,112,101,101,100, 95,111,102, 95,115,111,117,110,100, 0,100,111,112,112,108,101,114, 95,102, + 97, 99,116,111,114, 0,100,105,115,116, 97,110, 99,101, 95,109,111,100,101,108, 0, 42,109, 97,116, 95,111,118,101,114,114,105, +100,101, 0, 42,108,105,103,104,116, 95,111,118,101,114,114,105,100,101, 0,108, 97,121, 95,122,109, 97,115,107, 0,108, 97,121, + 95,101,120, 99,108,117,100,101, 0,108, 97,121,102,108, 97,103, 0,112, 97,115,115,102,108, 97,103, 0,112, 97,115,115, 95,120, +111,114, 0,115, 97,109,112,108,101,115, 0,105,109,116,121,112,101, 0,112,108, 97,110,101,115, 0,113,117, 97,108,105,116,121, + 0, 99,111,109,112,114,101,115,115, 0,101,120,114, 95, 99,111,100,101, 99, 0, 99,105,110,101,111,110, 95,102,108, 97,103, 0, + 99,105,110,101,111,110, 95,119,104,105,116,101, 0, 99,105,110,101,111,110, 95, 98,108, 97, 99,107, 0, 99,105,110,101,111,110, + 95,103, 97,109,109, 97, 0,106,112, 50, 95,102,108, 97,103, 0,105,109, 95,102,111,114,109, 97,116, 0, 42, 97,118,105, 99,111, +100,101, 99,100, 97,116, 97, 0, 42,113,116, 99,111,100,101, 99,100, 97,116, 97, 0,113,116, 99,111,100,101, 99,115,101,116,116, +105,110,103,115, 0,102,102, 99,111,100,101, 99,100, 97,116, 97, 0,115,117, 98,102,114, 97,109,101, 0,112,115,102,114, 97, 0, +112,101,102,114, 97, 0,105,109, 97,103,101,115, 0,102,114, 97,109, 97,112,116,111, 0,116,104,114,101, 97,100,115, 0,102,114, + 97,109,101,108,101,110, 0, 98,108,117,114,102, 97, 99, 0,101,100,103,101, 82, 0,101,100,103,101, 71, 0,101,100,103,101, 66, + 0,102,117,108,108,115, 99,114,101,101,110, 0,120,112,108, 97,121, 0,121,112,108, 97,121, 0,102,114,101,113,112,108, 97,121, + 0, 97,116,116,114,105, 98, 0,102,114, 97,109,101, 95,115,116,101,112, 0,115,116,101,114,101,111,109,111,100,101, 0,100,105, +109,101,110,115,105,111,110,115,112,114,101,115,101,116, 0,109, 97,120,105,109,115,105,122,101, 0,120,115, 99,104, 0,121,115, + 99,104, 0,120,112, 97,114,116,115, 0,121,112, 97,114,116,115, 0,115,117, 98,105,109,116,121,112,101, 0,100,105,115,112,108, + 97,121,109,111,100,101, 0,115, 99,101,109,111,100,101, 0,114, 97,121,116,114, 97, 99,101, 95,111,112,116,105,111,110,115, 0, +114, 97,121,116,114, 97, 99,101, 95,115,116,114,117, 99,116,117,114,101, 0,111, 99,114,101,115, 0,112, 97,100, 52, 0, 97,108, +112,104, 97,109,111,100,101, 0,111,115, 97, 0,102,114,115, 95,115,101, 99, 0,101,100,103,101,105,110,116, 0,115, 97,102,101, +116,121, 0, 98,111,114,100,101,114, 0,100,105,115,112,114,101, 99,116, 0,108, 97,121,101,114,115, 0, 97, 99,116,108, 97,121, + 0,109, 98,108,117,114, 95,115, 97,109,112,108,101,115, 0,120, 97,115,112, 0,121, 97,115,112, 0,102,114,115, 95,115,101, 99, + 95, 98, 97,115,101, 0,103, 97,117,115,115, 0, 99,111,108,111,114, 95,109,103,116, 95,102,108, 97,103, 0,112,111,115,116,103, + 97,109,109, 97, 0,112,111,115,116,104,117,101, 0,112,111,115,116,115, 97,116, 0,100,105,116,104,101,114, 95,105,110,116,101, +110,115,105,116,121, 0, 98, 97,107,101, 95,111,115, 97, 0, 98, 97,107,101, 95,102,105,108,116,101,114, 0, 98, 97,107,101, 95, +109,111,100,101, 0, 98, 97,107,101, 95,102,108, 97,103, 0, 98, 97,107,101, 95,110,111,114,109, 97,108, 95,115,112, 97, 99,101, + 0, 98, 97,107,101, 95,113,117, 97,100, 95,115,112,108,105,116, 0, 98, 97,107,101, 95,109, 97,120,100,105,115,116, 0, 98, 97, +107,101, 95, 98,105, 97,115,100,105,115,116, 0, 98, 97,107,101, 95,112, 97,100, 0,112,105, 99, 91, 49, 48, 50, 52, 93, 0,115, +116, 97,109,112, 0,115,116, 97,109,112, 95,102,111,110,116, 95,105,100, 0,115,116, 97,109,112, 95,117,100, 97,116, 97, 91, 55, + 54, 56, 93, 0,102,103, 95,115,116, 97,109,112, 91, 52, 93, 0, 98,103, 95,115,116, 97,109,112, 91, 52, 93, 0,115,101,113, 95, +112,114,101,118, 95,116,121,112,101, 0,115,101,113, 95,114,101,110,100, 95,116,121,112,101, 0,115,101,113, 95,102,108, 97,103, + 0,112, 97,100, 53, 91, 53, 93, 0,115,105,109,112,108,105,102,121, 95,102,108, 97,103, 0,115,105,109,112,108,105,102,121, 95, +115,117, 98,115,117,114,102, 0,115,105,109,112,108,105,102,121, 95,115,104, 97,100,111,119,115, 97,109,112,108,101,115, 0,115, +105,109,112,108,105,102,121, 95,112, 97,114,116,105, 99,108,101,115, 0,115,105,109,112,108,105,102,121, 95, 97,111,115,115,115, + 0, 99,105,110,101,111,110,119,104,105,116,101, 0, 99,105,110,101,111,110, 98,108, 97, 99,107, 0, 99,105,110,101,111,110,103, + 97,109,109, 97, 0,106,112, 50, 95,112,114,101,115,101,116, 0,106,112, 50, 95,100,101,112,116,104, 0,114,112, 97,100, 51, 0, +100,111,109,101,114,101,115, 0,100,111,109,101,109,111,100,101, 0,100,111,109,101, 97,110,103,108,101, 0,100,111,109,101,116, +105,108,116, 0,100,111,109,101,114,101,115, 98,117,102, 0, 42,100,111,109,101,116,101,120,116, 0,101,110,103,105,110,101, 91, + 51, 50, 93, 0,110, 97,109,101, 91, 51, 50, 93, 0,112, 97,114,116,105, 99,108,101, 95,112,101,114, 99, 0,115,117, 98,115,117, +114,102, 95,109, 97,120, 0,115,104, 97,100, 98,117,102,115, 97,109,112,108,101, 95,109, 97,120, 0, 97,111, 95,101,114,114,111, +114, 0,116,105,108,116, 0,114,101,115, 98,117,102, 0, 42,119, 97,114,112,116,101,120,116, 0, 99,111,108, 91, 51, 93, 0, 99, +101,108,108,115,105,122,101, 0, 99,101,108,108,104,101,105,103,104,116, 0, 97,103,101,110,116,109, 97,120,115,108,111,112,101, + 0, 97,103,101,110,116,109, 97,120, 99,108,105,109, 98, 0, 97,103,101,110,116,104,101,105,103,104,116, 0, 97,103,101,110,116, +114, 97,100,105,117,115, 0,101,100,103,101,109, 97,120,108,101,110, 0,101,100,103,101,109, 97,120,101,114,114,111,114, 0,114, +101,103,105,111,110,109,105,110,115,105,122,101, 0,114,101,103,105,111,110,109,101,114,103,101,115,105,122,101, 0,118,101,114, +116,115,112,101,114,112,111,108,121, 0,100,101,116, 97,105,108,115, 97,109,112,108,101,100,105,115,116, 0,100,101,116, 97,105, +108,115, 97,109,112,108,101,109, 97,120,101,114,114,111,114, 0,102,114, 97,109,105,110,103, 0,112,108, 97,121,101,114,102,108, + 97,103, 0,114,116, 49, 0,114,116, 50, 0, 97, 97,115, 97,109,112,108,101,115, 0,112, 97,100, 52, 91, 51, 93, 0,100,111,109, +101, 0,115,116,101,114,101,111,102,108, 97,103, 0,101,121,101,115,101,112, 97,114, 97,116,105,111,110, 0,114,101, 99, 97,115, +116, 68, 97,116, 97, 0,109, 97,116,109,111,100,101, 0,101,120,105,116,107,101,121, 0,111, 98,115,116, 97, 99,108,101, 83,105, +109,117,108, 97,116,105,111,110, 0,108,101,118,101,108, 72,101,105,103,104,116, 0,100,101, 97, 99,116,105,118, 97,116,105,111, +110,116,105,109,101, 0,108,105,110,101, 97,114,100,101, 97, 99,116,116,104,114,101,115,104,111,108,100, 0, 97,110,103,117,108, + 97,114,100,101, 97, 99,116,116,104,114,101,115,104,111,108,100, 0, 42, 99, 97,109,101,114, 97, 0, 42,112, 97,105,110,116, 95, + 99,117,114,115,111,114, 0,112, 97,105,110,116, 95, 99,117,114,115,111,114, 95, 99,111,108, 91, 52, 93, 0,110,117,109, 95,105, +110,112,117,116, 95,115, 97,109,112,108,101,115, 0,112, 97,105,110,116, 0,115,101, 97,109, 95, 98,108,101,101,100, 0,110,111, +114,109, 97,108, 95, 97,110,103,108,101, 0,115, 99,114,101,101,110, 95,103,114, 97, 98, 95,115,105,122,101, 91, 50, 93, 0, 42, +112, 97,105,110,116, 99,117,114,115,111,114, 0,105,110,118,101,114,116, 0,116,111,116,114,101,107,101,121, 0,116,111,116, 97, +100,100,107,101,121, 0, 98,114,117,115,104,116,121,112,101, 0, 98,114,117,115,104, 91, 55, 93, 0,101,109,105,116,116,101,114, +100,105,115,116, 0,115,101,108,101, 99,116,109,111,100,101, 0,101,100,105,116,116,121,112,101, 0,100,114, 97,119, 95,115,116, +101,112, 0,102, 97,100,101, 95,102,114, 97,109,101,115, 0,114, 97,100,105, 97,108, 95,115,121,109,109, 91, 51, 93, 0,108, 97, +115,116, 95,120, 0,108, 97,115,116, 95,121, 0,108, 97,115,116, 95, 97,110,103,108,101, 0,100,114, 97,119, 95, 97,110, 99,104, +111,114,101,100, 0, 97,110, 99,104,111,114,101,100, 95,115,105,122,101, 0, 97,110, 99,104,111,114,101,100, 95,108,111, 99, 97, +116,105,111,110, 91, 51, 93, 0, 97,110, 99,104,111,114,101,100, 95,105,110,105,116,105, 97,108, 95,109,111,117,115,101, 91, 50, + 93, 0,100,114, 97,119, 95,112,114,101,115,115,117,114,101, 0,112,114,101,115,115,117,114,101, 95,118, 97,108,117,101, 0,115, +112,101, 99,105, 97,108, 95,114,111,116, 97,116,105,111,110, 0, 42,118,112, 97,105,110,116, 95,112,114,101,118, 0, 42,119,112, + 97,105,110,116, 95,112,114,101,118, 0,109, 97,116, 91, 51, 93, 91, 51, 93, 0,117,110,112,114,111,106,101, 99,116,101,100, 95, +114, 97,100,105,117,115, 0, 42,118,112, 97,105,110,116, 0, 42,119,112, 97,105,110,116, 0, 42,117,118,115, 99,117,108,112,116, + 0,118,103,114,111,117,112, 95,119,101,105,103,104,116, 0, 99,111,114,110,101,114,116,121,112,101, 0,106,111,105,110,116,114, +105,108,105,109,105,116, 0,100,101,103,114, 0,116,117,114,110, 0,101,120,116,114, 95,111,102,102,115, 0,100,111,117, 98,108, +105,109,105,116, 0,110,111,114,109, 97,108,115,105,122,101, 0, 97,117,116,111,109,101,114,103,101, 0,115,101,103,109,101,110, +116,115, 0,114,105,110,103,115, 0,118,101,114,116,105, 99,101,115, 0,117,110,119,114, 97,112,112,101,114, 0,117,118, 99, 97, +108, 99, 95,114, 97,100,105,117,115, 0,117,118, 99, 97,108, 99, 95, 99,117, 98,101,115,105,122,101, 0,117,118, 99, 97,108, 99, + 95,109, 97,114,103,105,110, 0,117,118, 99, 97,108, 99, 95,109, 97,112,100,105,114, 0,117,118, 99, 97,108, 99, 95,109, 97,112, + 97,108,105,103,110, 0,117,118, 99, 97,108, 99, 95,102,108, 97,103, 0,117,118, 95,102,108, 97,103, 0,117,118, 95,115,101,108, +101, 99,116,109,111,100,101, 0,117,118, 95,115,117, 98,115,117,114,102, 95,108,101,118,101,108, 0,103,112,101,110, 99,105,108, + 95,102,108, 97,103,115, 0, 97,117,116,111,105,107, 95, 99,104, 97,105,110,108,101,110, 0,105,109, 97,112, 97,105,110,116, 0, +112, 97,114,116,105, 99,108,101, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 95,115,105,122,101, 0,115,101,108,101, 99, +116, 95,116,104,114,101,115,104, 0, 99,108,101, 97,110, 95,116,104,114,101,115,104, 0, 97,117,116,111,107,101,121, 95,109,111, +100,101, 0, 97,117,116,111,107,101,121, 95,102,108, 97,103, 0,109,117,108,116,105,114,101,115, 95,115,117, 98,100,105,118, 95, +116,121,112,101, 0,112, 97,100, 50, 91, 53, 93, 0,115,107,103,101,110, 95,114,101,115,111,108,117,116,105,111,110, 0,115,107, +103,101,110, 95,116,104,114,101,115,104,111,108,100, 95,105,110,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,116,104,114, +101,115,104,111,108,100, 95,101,120,116,101,114,110, 97,108, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,114, 97,116, +105,111, 0,115,107,103,101,110, 95,108,101,110,103,116,104, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 97,110,103,108, +101, 95,108,105,109,105,116, 0,115,107,103,101,110, 95, 99,111,114,114,101,108, 97,116,105,111,110, 95,108,105,109,105,116, 0, +115,107,103,101,110, 95,115,121,109,109,101,116,114,121, 95,108,105,109,105,116, 0,115,107,103,101,110, 95,114,101,116, 97,114, +103,101,116, 95, 97,110,103,108,101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95, +108,101,110,103,116,104, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,100,105,115, +116, 97,110, 99,101, 95,119,101,105,103,104,116, 0,115,107,103,101,110, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, + 95,112,111,115,116,112,114,111, 0,115,107,103,101,110, 95,112,111,115,116,112,114,111, 95,112, 97,115,115,101,115, 0,115,107, +103,101,110, 95,115,117, 98,100,105,118,105,115,105,111,110,115, 91, 51, 93, 0,115,107,103,101,110, 95,109,117,108,116,105, 95, +108,101,118,101,108, 0, 42,115,107,103,101,110, 95,116,101,109,112,108, 97,116,101, 0, 98,111,110,101, 95,115,107,101,116, 99, +104,105,110,103, 0, 98,111,110,101, 95,115,107,101,116, 99,104,105,110,103, 95, 99,111,110,118,101,114,116, 0,115,107,103,101, +110, 95,115,117, 98,100,105,118,105,115,105,111,110, 95,110,117,109, 98,101,114, 0,115,107,103,101,110, 95,114,101,116, 97,114, +103,101,116, 95,111,112,116,105,111,110,115, 0,115,107,103,101,110, 95,114,101,116, 97,114,103,101,116, 95,114,111,108,108, 0, +115,107,103,101,110, 95,115,105,100,101, 95,115,116,114,105,110,103, 91, 56, 93, 0,115,107,103,101,110, 95,110,117,109, 95,115, +116,114,105,110,103, 91, 56, 93, 0,101,100,103,101, 95,109,111,100,101, 0,101,100,103,101, 95,109,111,100,101, 95,108,105,118, +101, 95,117,110,119,114, 97,112, 0,115,110, 97,112, 95,109,111,100,101, 0,115,110, 97,112, 95,102,108, 97,103, 0,115,110, 97, +112, 95,116, 97,114,103,101,116, 0,112,114,111,112,111,114,116,105,111,110, 97,108, 0,112,114,111,112, 95,109,111,100,101, 0, +112,114,111,112,111,114,116,105,111,110, 97,108, 95,111, 98,106,101, 99,116,115, 0,112, 97,100, 91, 53, 93, 0, 97,117,116,111, + 95,110,111,114,109, 97,108,105,122,101, 0,109,117,108,116,105,112, 97,105,110,116, 0,117,115,101, 95,117,118, 95,115, 99,117, +108,112,116, 0,117,118, 95,115, 99,117,108,112,116, 95,115,101,116,116,105,110,103,115, 0,117,118, 95,115, 99,117,108,112,116, + 95,116,111,111,108, 0,117,118, 95,114,101,108, 97,120, 95,109,101,116,104,111,100, 0,115, 99,117,108,112,116, 95,112, 97,105, +110,116, 95,115,101,116,116,105,110,103,115, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, + 95,115,105,122,101, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105,101,100, 95,117,110,112,114,111, +106,101, 99,116,101,100, 95,114, 97,100,105,117,115, 0,115, 99,117,108,112,116, 95,112, 97,105,110,116, 95,117,110,105,102,105, +101,100, 95, 97,108,112,104, 97, 0,117,110,105,102,105,101,100, 95,112, 97,105,110,116, 95,115,101,116,116,105,110,103,115, 0, +116,111,116,111, 98,106, 0,116,111,116,108, 97,109,112, 0,116,111,116,111, 98,106,115,101,108, 0,116,111,116, 99,117,114,118, +101, 0,116,111,116,109,101,115,104, 0,116,111,116, 97,114,109, 97,116,117,114,101, 0,115, 99, 97,108,101, 95,108,101,110,103, +116,104, 0,115,121,115,116,101,109, 0,115,121,115,116,101,109, 95,114,111,116, 97,116,105,111,110, 0,103,114, 97,118,105,116, +121, 91, 51, 93, 0,113,117,105, 99,107, 95, 99, 97, 99,104,101, 95,115,116,101,112, 0, 42,119,111,114,108,100, 0, 42,115,101, +116, 0, 98, 97,115,101, 0, 42, 98, 97,115, 97, 99,116, 0, 42,111, 98,101,100,105,116, 0, 99,117,114,115,111,114, 91, 51, 93, + 0,116,119, 99,101,110,116, 91, 51, 93, 0,116,119,109,105,110, 91, 51, 93, 0,116,119,109, 97,120, 91, 51, 93, 0,108, 97,121, + 97, 99,116, 0,108, 97,121, 95,117,112,100, 97,116,101,100, 0, 42,101,100, 0, 42,116,111,111,108,115,101,116,116,105,110,103, +115, 0, 42,115,116, 97,116,115, 0, 97,117,100,105,111, 0,116,114, 97,110,115,102,111,114,109, 95,115,112, 97, 99,101,115, 0, + 42,115,111,117,110,100, 95,115, 99,101,110,101, 0, 42,115,111,117,110,100, 95,115, 99,101,110,101, 95,104, 97,110,100,108,101, + 0, 42,115,111,117,110,100, 95,115, 99,114,117, 98, 95,104, 97,110,100,108,101, 0, 42,115,112,101, 97,107,101,114, 95,104, 97, +110,100,108,101,115, 0, 42,102,112,115, 95,105,110,102,111, 0, 42,116,104,101, 68, 97,103, 0,100, 97,103,105,115,118, 97,108, +105,100, 0,100, 97,103,102,108, 97,103,115, 0, 97, 99,116,105,118,101, 95,107,101,121,105,110,103,115,101,116, 0,107,101,121, +105,110,103,115,101,116,115, 0,103,109, 0,117,110,105,116, 0,112,104,121,115,105, 99,115, 95,115,101,116,116,105,110,103,115, + 0, 42, 99,108,105,112, 0, 99,117,115,116,111,109,100, 97,116, 97, 95,109, 97,115,107, 95,109,111,100, 97,108, 0, 99,117,115, +101,114, 0, 98,108,101,110,100, 0,118,105,101,119, 0,119,105,110,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, + 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,105,110,118, 91, 52, 93, 91, 52, 93, 0,112,101,114,115,109, 97,116, 91, 52, + 93, 91, 52, 93, 0,112,101,114,115,105,110,118, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,109, 97,116,111, 98, 91, 52, 93, 91, + 52, 93, 0,112,101,114,115,109, 97,116,111, 98, 91, 52, 93, 91, 52, 93, 0, 99,108,105,112, 91, 54, 93, 91, 52, 93, 0, 99,108, +105,112, 95,108,111, 99, 97,108, 91, 54, 93, 91, 52, 93, 0, 42, 99,108,105,112, 98, 98, 0, 42,108,111, 99, 97,108,118,100, 0, + 42,114,105, 0, 42,114,101,110,100,101,114, 95,101,110,103,105,110,101, 0, 42,100,101,112,116,104,115, 0, 42,115,109,115, 0, + 42,115,109,111,111,116,104, 95,116,105,109,101,114, 0,116,119,109, 97,116, 91, 52, 93, 91, 52, 93, 0,118,105,101,119,113,117, + 97,116, 91, 52, 93, 0,122,102, 97, 99, 0, 99, 97,109,100,120, 0, 99, 97,109,100,121, 0,112,105,120,115,105,122,101, 0, 99, + 97,109,122,111,111,109, 0,105,115, 95,112,101,114,115,112, 0,112,101,114,115,112, 0,118,105,101,119,108,111, 99,107, 0,116, +119,100,114, 97,119,102,108, 97,103, 0,114,102,108, 97,103, 0,108,118,105,101,119,113,117, 97,116, 91, 52, 93, 0,108,112,101, +114,115,112, 0,108,118,105,101,119, 0,103,114,105,100,118,105,101,119, 0,116,119, 97,110,103,108,101, 91, 51, 93, 0,114,111, +116, 95, 97,110,103,108,101, 0,114,111,116, 95, 97,120,105,115, 91, 51, 93, 0,114,101,103,105,111,110, 98, 97,115,101, 0,115, +112, 97, 99,101,116,121,112,101, 0, 98,108,111, 99,107,115, 99, 97,108,101, 0, 98,108,111, 99,107,104, 97,110,100,108,101,114, + 91, 56, 93, 0, 98,117,110,100,108,101, 95,115,105,122,101, 0, 98,117,110,100,108,101, 95,100,114, 97,119,116,121,112,101, 0, +108, 97,121, 95,117,115,101,100, 0, 42,111, 98, 95, 99,101,110,116,114,101, 0, 98,103,112,105, 99, 98, 97,115,101, 0, 42, 98, +103,112,105, 99, 0,111, 98, 95, 99,101,110,116,114,101, 95, 98,111,110,101, 91, 54, 52, 93, 0,100,114, 97,119,116,121,112,101, + 0,111, 98, 95, 99,101,110,116,114,101, 95, 99,117,114,115,111,114, 0,115, 99,101,110,101,108,111, 99,107, 0, 97,114,111,117, +110,100, 0,103,114,105,100, 0,110,101, 97,114, 0,102, 97,114, 0,109,111,100,101,115,101,108,101, 99,116, 0,103,114,105,100, +108,105,110,101,115, 0,103,114,105,100,115,117, 98,100,105,118, 0,103,114,105,100,102,108, 97,103, 0,116,119,116,121,112,101, + 0,116,119,109,111,100,101, 0,116,119,102,108, 97,103, 0,112, 97,100, 50, 91, 50, 93, 0, 97,102,116,101,114,100,114, 97,119, + 95,116,114, 97,110,115,112, 0, 97,102,116,101,114,100,114, 97,119, 95,120,114, 97,121, 0, 97,102,116,101,114,100,114, 97,119, + 95,120,114, 97,121,116,114, 97,110,115,112, 0,122, 98,117,102, 0,120,114, 97,121, 0,112, 97,100, 51, 91, 50, 93, 0, 42,112, +114,111,112,101,114,116,105,101,115, 95,115,116,111,114, 97,103,101, 0,118,101,114,116, 0,104,111,114, 0,109, 97,115,107, 0, +109,105,110, 91, 50, 93, 0,109, 97,120, 91, 50, 93, 0,109,105,110,122,111,111,109, 0,109, 97,120,122,111,111,109, 0,115, 99, +114,111,108,108, 0,115, 99,114,111,108,108, 95,117,105, 0,107,101,101,112,116,111,116, 0,107,101,101,112,122,111,111,109, 0, +107,101,101,112,111,102,115, 0, 97,108,105,103,110, 0,119,105,110,120, 0,119,105,110,121, 0,111,108,100,119,105,110,120, 0, +111,108,100,119,105,110,121, 0, 42,116, 97, 98, 95,111,102,102,115,101,116, 0,116, 97, 98, 95,110,117,109, 0,116, 97, 98, 95, + 99,117,114, 0,114,112,116, 95,109, 97,115,107, 0,118, 50,100, 0,109, 97,105,110, 98, 0,109, 97,105,110, 98,111, 0,109, 97, +105,110, 98,117,115,101,114, 0,114,101, 95, 97,108,105,103,110, 0,112,114,101,118,105,101,119, 0,116,101,120,116,117,114,101, + 95, 99,111,110,116,101,120,116, 0,112, 97,116,104,102,108, 97,103, 0,100, 97,116, 97,105, 99,111,110, 0, 42,112,105,110,105, +100, 0, 42,116,101,120,117,115,101,114, 0,116,114,101,101, 0, 42,116,114,101,101,115,116,111,114,101, 0,115,101, 97,114, 99, +104, 95,115,116,114,105,110,103, 91, 51, 50, 93, 0,115,101, 97,114, 99,104, 95,116,115,101, 0,111,117,116,108,105,110,101,118, +105,115, 0,115,116,111,114,101,102,108, 97,103, 0,115,101, 97,114, 99,104, 95,102,108, 97,103,115, 0, 42, 97,100,115, 0,103, +104,111,115,116, 67,117,114,118,101,115, 0, 97,117,116,111,115,110, 97,112, 0, 99,117,114,115,111,114, 86, 97,108, 0, 42, 97, +114,114, 97,121, 0, 99, 97, 99,104,101,115, 0, 99, 97, 99,104,101, 95,100,105,115,112,108, 97,121, 0,114,101,110,100,101,114, + 95,115,105,122,101, 0, 99,104, 97,110,115,104,111,119,110, 0,122,101, 98,114, 97, 0,122,111,111,109, 0,116,105,116,108,101, + 91, 51, 50, 93, 0,100,105,114, 91, 49, 48, 53, 54, 93, 0,102,105,108,101, 91, 50, 53, 54, 93, 0,114,101,110, 97,109,101,102, +105,108,101, 91, 50, 53, 54, 93, 0,114,101,110, 97,109,101,101,100,105,116, 91, 50, 53, 54, 93, 0,102,105,108,116,101,114, 95, +103,108,111, 98, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,102,105,108,101, 0,115,101,108, 95,102,105,114,115,116, 0,115, +101,108, 95,108, 97,115,116, 0,115,111,114,116, 0,100,105,115,112,108, 97,121, 0,102, 95,102,112, 0,102,112, 95,115,116,114, + 91, 56, 93, 0,115, 99,114,111,108,108, 95,111,102,102,115,101,116, 0, 42,112, 97,114, 97,109,115, 0, 42,102,105,108,101,115, + 0, 42,102,111,108,100,101,114,115, 95,112,114,101,118, 0, 42,102,111,108,100,101,114,115, 95,110,101,120,116, 0, 42,111,112, + 0, 42,115,109,111,111,116,104,115, 99,114,111,108,108, 95,116,105,109,101,114, 0, 42,108, 97,121,111,117,116, 0,114,101, 99, +101,110,116,110,114, 0, 98,111,111,107,109, 97,114,107,110,114, 0,115,121,115,116,101,109,110,114, 0, 42, 99,117,109, 97,112, + 0,115, 99,111,112,101,115, 0,115, 97,109,112,108,101, 95,108,105,110,101, 95,104,105,115,116, 0, 99,117,114,115,111,114, 91, + 50, 93, 0, 99,101,110,116,120, 0, 99,101,110,116,121, 0, 99,117,114,116,105,108,101, 0,108,111, 99,107, 0,112,105,110, 0, +100,116, 95,117,118, 0,115,116,105, 99,107,121, 0,100,116, 95,117,118,115,116,114,101,116, 99,104, 0, 42,116,101,120,116, 0, +116,111,112, 0,118,105,101,119,108,105,110,101,115, 0,109,101,110,117,110,114, 0,108,104,101,105,103,104,116, 0, 99,119,105, +100,116,104, 0,108,105,110,101,110,114,115, 95,116,111,116, 0,108,101,102,116, 0,115,104,111,119,108,105,110,101,110,114,115, + 0,116, 97, 98,110,117,109, 98,101,114, 0,115,104,111,119,115,121,110,116, 97,120, 0,108,105,110,101, 95,104,108,105,103,104, +116, 0,111,118,101,114,119,114,105,116,101, 0,108,105,118,101, 95,101,100,105,116, 0,112,105,120, 95,112,101,114, 95,108,105, +110,101, 0,116,120,116,115, 99,114,111,108,108, 0,116,120,116, 98, 97,114, 0,119,111,114,100,119,114, 97,112, 0,100,111,112, +108,117,103,105,110,115, 0,102,105,110,100,115,116,114, 91, 50, 53, 54, 93, 0,114,101,112,108, 97, 99,101,115,116,114, 91, 50, + 53, 54, 93, 0,109, 97,114,103,105,110, 95, 99,111,108,117,109,110, 0, 42,100,114, 97,119, 99, 97, 99,104,101, 0, 42,112,121, + 95,100,114, 97,119, 0, 42,112,121, 95,101,118,101,110,116, 0, 42,112,121, 95, 98,117,116,116,111,110, 0, 42,112,121, 95, 98, +114,111,119,115,101,114, 99, 97,108,108, 98, 97, 99,107, 0, 42,112,121, 95,103,108,111, 98, 97,108,100,105, 99,116, 0,108, 97, +115,116,115,112, 97, 99,101, 0,115, 99,114,105,112,116,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0,115, 99,114,105,112,116, 97, +114,103, 91, 50, 53, 54, 93, 0, 42,115, 99,114,105,112,116, 0, 42, 98,117,116, 95,114,101,102,115, 0, 42,105,100, 0, 97,115, +112,101, 99,116, 0,112, 97,100,102, 0,109,120, 0,109,121, 0, 42,101,100,105,116,116,114,101,101, 0,116,114,101,101,116,121, +112,101, 0,116,101,120,102,114,111,109, 0,115,104, 97,100,101,114,102,114,111,109, 0,108,105,110,107,100,114, 97,103, 0,108, +101,110, 95, 97,108,108,111, 99, 0, 99,117,114,115,111,114, 0,115, 99,114,111,108,108, 98, 97, 99,107, 0,104,105,115,116,111, +114,121, 0,112,114,111,109,112,116, 91, 50, 53, 54, 93, 0,108, 97,110,103,117, 97,103,101, 91, 51, 50, 93, 0,115,101,108, 95, +115,116, 97,114,116, 0,115,101,108, 95,101,110,100, 0,102,105,108,116,101,114, 91, 54, 52, 93, 0,120,108,111, 99,107,111,102, + 0,121,108,111, 99,107,111,102, 0,117,115,101,114, 0,112, 97,116,104, 95,108,101,110,103,116,104, 0,108,111, 99, 91, 50, 93, + 0,115,116, 97, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0,117,110,105,115,116, 97, 98,109, 97,116, 91, 52, 93, 91, 52, 93, 0, +112,111,115,116,112,114,111, 99, 95,102,108, 97,103, 0, 42,100,114, 97,119, 95, 99,111,110,116,101,120,116, 0,100,111,112,101, + 95,115,111,114,116, 0,100,111,112,101, 95,102,108, 97,103, 0,102,105,108,101,110, 97,109,101, 91, 49, 48, 50, 52, 93, 0, 98, +108,102, 95,105,100, 0,117,105,102,111,110,116, 95,105,100, 0,114, 95,116,111, 95,108, 0,112,111,105,110,116,115, 0,107,101, +114,110,105,110,103, 0,105,116, 97,108,105, 99, 0, 98,111,108,100, 0,115,104, 97,100,111,119, 0,115,104, 97,100,120, 0,115, +104, 97,100,121, 0,115,104, 97,100,111,119, 97,108,112,104, 97, 0,115,104, 97,100,111,119, 99,111,108,111,114, 0,112, 97,110, +101,108,116,105,116,108,101, 0,103,114,111,117,112,108, 97, 98,101,108, 0,119,105,100,103,101,116,108, 97, 98,101,108, 0,119, +105,100,103,101,116, 0,112, 97,110,101,108,122,111,111,109, 0,109,105,110,108, 97, 98,101,108, 99,104, 97,114,115, 0,109,105, +110,119,105,100,103,101,116, 99,104, 97,114,115, 0, 99,111,108,117,109,110,115,112, 97, 99,101, 0,116,101,109,112,108, 97,116, +101,115,112, 97, 99,101, 0, 98,111,120,115,112, 97, 99,101, 0, 98,117,116,116,111,110,115,112, 97, 99,101,120, 0, 98,117,116, +116,111,110,115,112, 97, 99,101,121, 0,112, 97,110,101,108,115,112, 97, 99,101, 0,112, 97,110,101,108,111,117,116,101,114, 0, +111,117,116,108,105,110,101, 91, 52, 93, 0,105,110,110,101,114, 91, 52, 93, 0,105,110,110,101,114, 95,115,101,108, 91, 52, 93, + 0,105,116,101,109, 91, 52, 93, 0,116,101,120,116, 91, 52, 93, 0,116,101,120,116, 95,115,101,108, 91, 52, 93, 0,115,104, 97, +100,101,100, 0,115,104, 97,100,101,116,111,112, 0,115,104, 97,100,101,100,111,119,110, 0, 97,108,112,104, 97, 95, 99,104,101, + 99,107, 0,105,110,110,101,114, 95, 97,110,105,109, 91, 52, 93, 0,105,110,110,101,114, 95, 97,110,105,109, 95,115,101,108, 91, + 52, 93, 0,105,110,110,101,114, 95,107,101,121, 91, 52, 93, 0,105,110,110,101,114, 95,107,101,121, 95,115,101,108, 91, 52, 93, + 0,105,110,110,101,114, 95,100,114,105,118,101,110, 91, 52, 93, 0,105,110,110,101,114, 95,100,114,105,118,101,110, 95,115,101, +108, 91, 52, 93, 0,104,101, 97,100,101,114, 91, 52, 93, 0,115,104,111,119, 95,104,101, 97,100,101,114, 0,119, 99,111,108, 95, +114,101,103,117,108, 97,114, 0,119, 99,111,108, 95,116,111,111,108, 0,119, 99,111,108, 95,116,101,120,116, 0,119, 99,111,108, + 95,114, 97,100,105,111, 0,119, 99,111,108, 95,111,112,116,105,111,110, 0,119, 99,111,108, 95,116,111,103,103,108,101, 0,119, + 99,111,108, 95,110,117,109, 0,119, 99,111,108, 95,110,117,109,115,108,105,100,101,114, 0,119, 99,111,108, 95,109,101,110,117, + 0,119, 99,111,108, 95,112,117,108,108,100,111,119,110, 0,119, 99,111,108, 95,109,101,110,117, 95, 98, 97, 99,107, 0,119, 99, +111,108, 95,109,101,110,117, 95,105,116,101,109, 0,119, 99,111,108, 95,116,111,111,108,116,105,112, 0,119, 99,111,108, 95, 98, +111,120, 0,119, 99,111,108, 95,115, 99,114,111,108,108, 0,119, 99,111,108, 95,112,114,111,103,114,101,115,115, 0,119, 99,111, +108, 95,108,105,115,116, 95,105,116,101,109, 0,119, 99,111,108, 95,115,116, 97,116,101, 0,112, 97,110,101,108, 0,105, 99,111, +110,102,105,108,101, 91, 50, 53, 54, 93, 0,105, 99,111,110, 95, 97,108,112,104, 97, 0, 98, 97, 99,107, 91, 52, 93, 0,116,105, +116,108,101, 91, 52, 93, 0,116,101,120,116, 95,104,105, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,105,116,108,101, 91, 52, + 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 91, 52, 93, 0,104,101, 97,100,101,114, 95,116,101,120,116, 95,104,105, 91, + 52, 93, 0, 98,117,116,116,111,110, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,105,116,108,101, 91, 52, 93, 0, 98,117,116, +116,111,110, 95,116,101,120,116, 91, 52, 93, 0, 98,117,116,116,111,110, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,108,105, +115,116, 91, 52, 93, 0,108,105,115,116, 95,116,105,116,108,101, 91, 52, 93, 0,108,105,115,116, 95,116,101,120,116, 91, 52, 93, + 0,108,105,115,116, 95,116,101,120,116, 95,104,105, 91, 52, 93, 0,112, 97,110,101,108, 91, 52, 93, 0,112, 97,110,101,108, 95, +116,105,116,108,101, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120,116, 91, 52, 93, 0,112, 97,110,101,108, 95,116,101,120, +116, 95,104,105, 91, 52, 93, 0,115,104, 97,100,101, 49, 91, 52, 93, 0,115,104, 97,100,101, 50, 91, 52, 93, 0,104,105,108,105, +116,101, 91, 52, 93, 0,103,114,105,100, 91, 52, 93, 0,119,105,114,101, 91, 52, 93, 0,115,101,108,101, 99,116, 91, 52, 93, 0, +108, 97,109,112, 91, 52, 93, 0,115,112,101, 97,107,101,114, 91, 52, 93, 0,101,109,112,116,121, 91, 52, 93, 0, 99, 97,109,101, +114, 97, 91, 52, 93, 0,112, 97,100, 91, 56, 93, 0, 97, 99,116,105,118,101, 91, 52, 93, 0,103,114,111,117,112, 91, 52, 93, 0, +103,114,111,117,112, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,116,114, 97,110,115,102,111,114,109, 91, 52, 93, 0,118,101,114, +116,101,120, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 91, 52, 93, 0, +101,100,103,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0,101,100,103,101, 95,115,101, 97,109, 91, 52, 93, 0,101,100,103,101, + 95,115,104, 97,114,112, 91, 52, 93, 0,101,100,103,101, 95,102, 97, 99,101,115,101,108, 91, 52, 93, 0,101,100,103,101, 95, 99, +114,101, 97,115,101, 91, 52, 93, 0,102, 97, 99,101, 91, 52, 93, 0,102, 97, 99,101, 95,115,101,108,101, 99,116, 91, 52, 93, 0, +102, 97, 99,101, 95,100,111,116, 91, 52, 93, 0,101,120,116,114, 97, 95,101,100,103,101, 95,108,101,110, 91, 52, 93, 0,101,120, +116,114, 97, 95,102, 97, 99,101, 95, 97,110,103,108,101, 91, 52, 93, 0,101,120,116,114, 97, 95,102, 97, 99,101, 95, 97,114,101, + 97, 91, 52, 93, 0,112, 97,100, 51, 91, 52, 93, 0,110,111,114,109, 97,108, 91, 52, 93, 0,118,101,114,116,101,120, 95,110,111, +114,109, 97,108, 91, 52, 93, 0, 98,111,110,101, 95,115,111,108,105,100, 91, 52, 93, 0, 98,111,110,101, 95,112,111,115,101, 91, + 52, 93, 0,115,116,114,105,112, 91, 52, 93, 0,115,116,114,105,112, 95,115,101,108,101, 99,116, 91, 52, 93, 0, 99,102,114, 97, +109,101, 91, 52, 93, 0,110,117,114, 98, 95,117,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,118,108,105,110,101, 91, 52, + 93, 0, 97, 99,116, 95,115,112,108,105,110,101, 91, 52, 93, 0,110,117,114, 98, 95,115,101,108, 95,117,108,105,110,101, 91, 52, + 93, 0,110,117,114, 98, 95,115,101,108, 95,118,108,105,110,101, 91, 52, 93, 0,108, 97,115,116,115,101,108, 95,112,111,105,110, +116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,102,114,101,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,117,116,111, 91, + 52, 93, 0,104, 97,110,100,108,101, 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95, 97,108,105,103,110, 91, 52, + 93, 0,104, 97,110,100,108,101, 95, 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, 52, 93, 0,104, 97,110,100,108,101, 95, +115,101,108, 95,102,114,101,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,117,116,111, 91, 52, 93, 0,104, + 97,110,100,108,101, 95,115,101,108, 95,118,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,108,105, +103,110, 91, 52, 93, 0,104, 97,110,100,108,101, 95,115,101,108, 95, 97,117,116,111, 95, 99,108, 97,109,112,101,100, 91, 52, 93, + 0,100,115, 95, 99,104, 97,110,110,101,108, 91, 52, 93, 0,100,115, 95,115,117, 98, 99,104, 97,110,110,101,108, 91, 52, 93, 0, + 99,111,110,115,111,108,101, 95,111,117,116,112,117,116, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,112,117,116, 91, + 52, 93, 0, 99,111,110,115,111,108,101, 95,105,110,102,111, 91, 52, 93, 0, 99,111,110,115,111,108,101, 95,101,114,114,111,114, + 91, 52, 93, 0, 99,111,110,115,111,108,101, 95, 99,117,114,115,111,114, 91, 52, 93, 0,118,101,114,116,101,120, 95,115,105,122, +101, 0,111,117,116,108,105,110,101, 95,119,105,100,116,104, 0,102, 97, 99,101,100,111,116, 95,115,105,122,101, 0,110,111,111, +100,108,101, 95, 99,117,114,118,105,110,103, 0,115,121,110,116, 97,120,108, 91, 52, 93, 0,115,121,110,116, 97,120,110, 91, 52, + 93, 0,115,121,110,116, 97,120, 98, 91, 52, 93, 0,115,121,110,116, 97,120,118, 91, 52, 93, 0,115,121,110,116, 97,120, 99, 91, + 52, 93, 0,109,111,118,105,101, 91, 52, 93, 0,109,111,118,105,101, 99,108,105,112, 91, 52, 93, 0,105,109, 97,103,101, 91, 52, + 93, 0,115, 99,101,110,101, 91, 52, 93, 0, 97,117,100,105,111, 91, 52, 93, 0,101,102,102,101, 99,116, 91, 52, 93, 0,104,112, + 97,100, 48, 91, 52, 93, 0,116,114, 97,110,115,105,116,105,111,110, 91, 52, 93, 0,109,101,116, 97, 91, 52, 93, 0,101,100,105, +116,109,101,115,104, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 91, 52, 93, + 0,104, 97,110,100,108,101, 95,118,101,114,116,101,120, 95,115,101,108,101, 99,116, 91, 52, 93, 0,104, 97,110,100,108,101, 95, +118,101,114,116,101,120, 95,115,105,122,101, 0,109, 97,114,107,101,114, 95,111,117,116,108,105,110,101, 91, 52, 93, 0,109, 97, +114,107,101,114, 91, 52, 93, 0, 97, 99,116, 95,109, 97,114,107,101,114, 91, 52, 93, 0,115,101,108, 95,109, 97,114,107,101,114, + 91, 52, 93, 0,100,105,115, 95,109, 97,114,107,101,114, 91, 52, 93, 0,108,111, 99,107, 95,109, 97,114,107,101,114, 91, 52, 93, + 0, 98,117,110,100,108,101, 95,115,111,108,105,100, 91, 52, 93, 0,112, 97,116,104, 95, 98,101,102,111,114,101, 91, 52, 93, 0, +112, 97,116,104, 95, 97,102,116,101,114, 91, 52, 93, 0, 99, 97,109,101,114, 97, 95,112, 97,116,104, 91, 52, 93, 0,104,112, 97, +100, 91, 55, 93, 0,112,114,101,118,105,101,119, 95, 98, 97, 99,107, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105, +116, 99,104, 95,102, 97, 99,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,101,100,103,101, 91, + 52, 93, 0,112,114,101,118,105,101,119, 95,115,116,105,116, 99,104, 95,118,101,114,116, 91, 52, 93, 0,112,114,101,118,105,101, +119, 95,115,116,105,116, 99,104, 95,115,116,105,116, 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115, +116,105,116, 99,104, 95,117,110,115,116,105,116, 99,104, 97, 98,108,101, 91, 52, 93, 0,112,114,101,118,105,101,119, 95,115,116, +105,116, 99,104, 95, 97, 99,116,105,118,101, 91, 52, 93, 0,109, 97,116, 99,104, 91, 52, 93, 0,115,101,108,101, 99,116,101,100, + 95,104,105,103,104,108,105,103,104,116, 91, 52, 93, 0,115,107,105,110, 95,114,111,111,116, 91, 52, 93, 0,115,111,108,105,100, + 91, 52, 93, 0,116,117,105, 0,116, 98,117,116,115, 0,116,118, 51,100, 0,116,102,105,108,101, 0,116,105,112,111, 0,116,105, +110,102,111, 0,116, 97, 99,116, 0,116,110,108, 97, 0,116,115,101,113, 0,116,105,109, 97, 0,116,101,120,116, 0,116,111,111, +112,115, 0,116,116,105,109,101, 0,116,110,111,100,101, 0,116,108,111,103,105, 99, 0,116,117,115,101,114,112,114,101,102, 0, +116, 99,111,110,115,111,108,101, 0,116, 99,108,105,112, 0,116, 97,114,109, 91, 50, 48, 93, 0, 97, 99,116,105,118,101, 95,116, +104,101,109,101, 95, 97,114,101, 97, 0,109,111,100,117,108,101, 91, 54, 52, 93, 0,115,112,101, 99, 91, 52, 93, 0,100,117,112, +102,108, 97,103, 0,115, 97,118,101,116,105,109,101, 0,116,101,109,112,100,105,114, 91, 55, 54, 56, 93, 0,102,111,110,116,100, +105,114, 91, 55, 54, 56, 93, 0,114,101,110,100,101,114,100,105,114, 91, 49, 48, 50, 52, 93, 0,116,101,120,116,117,100,105,114, + 91, 55, 54, 56, 93, 0,112,121,116,104,111,110,100,105,114, 91, 55, 54, 56, 93, 0,115,111,117,110,100,100,105,114, 91, 55, 54, + 56, 93, 0,105,109, 97,103,101, 95,101,100,105,116,111,114, 91, 49, 48, 50, 52, 93, 0, 97,110,105,109, 95,112,108, 97,121,101, +114, 91, 49, 48, 50, 52, 93, 0, 97,110,105,109, 95,112,108, 97,121,101,114, 95,112,114,101,115,101,116, 0,118, 50,100, 95,109, +105,110, 95,103,114,105,100,115,105,122,101, 0,116,105,109,101, 99,111,100,101, 95,115,116,121,108,101, 0,118,101,114,115,105, +111,110,115, 0,100, 98,108, 95, 99,108,105, 99,107, 95,116,105,109,101, 0,103, 97,109,101,102,108, 97,103,115, 0,119,104,101, +101,108,108,105,110,101,115, 99,114,111,108,108, 0,117,105,102,108, 97,103, 0,108, 97,110,103,117, 97,103,101, 0,117,115,101, +114,112,114,101,102, 0,118,105,101,119,122,111,111,109, 0,109,105,120, 98,117,102,115,105,122,101, 0, 97,117,100,105,111,100, +101,118,105, 99,101, 0, 97,117,100,105,111,114, 97,116,101, 0, 97,117,100,105,111,102,111,114,109, 97,116, 0, 97,117,100,105, +111, 99,104, 97,110,110,101,108,115, 0,100,112,105, 0,101,110, 99,111,100,105,110,103, 0,116,114, 97,110,115,111,112,116,115, + 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 49, 0,109,101,110,117,116,104,114,101,115,104,111,108,100, 50, 0,116, +104,101,109,101,115, 0,117,105,102,111,110,116,115, 0,117,105,115,116,121,108,101,115, 0,107,101,121,109, 97,112,115, 0,117, +115,101,114, 95,107,101,121,109, 97,112,115, 0, 97,100,100,111,110,115, 0,107,101,121, 99,111,110,102,105,103,115,116,114, 91, + 54, 52, 93, 0,117,110,100,111,115,116,101,112,115, 0,117,110,100,111,109,101,109,111,114,121, 0,103,112, 95,109, 97,110,104, + 97,116,116,101,110,100,105,115,116, 0,103,112, 95,101,117, 99,108,105,100,101, 97,110,100,105,115,116, 0,103,112, 95,101,114, + 97,115,101,114, 0,103,112, 95,115,101,116,116,105,110,103,115, 0,116, 98, 95,108,101,102,116,109,111,117,115,101, 0,116, 98, + 95,114,105,103,104,116,109,111,117,115,101, 0,108,105,103,104,116, 91, 51, 93, 0,116,119, 95,104,111,116,115,112,111,116, 0, +116,119, 95,102,108, 97,103, 0,116,119, 95,104, 97,110,100,108,101,115,105,122,101, 0,116,119, 95,115,105,122,101, 0,116,101, +120,116,105,109,101,111,117,116, 0,116,101,120, 99,111,108,108,101, 99,116,114, 97,116,101, 0,119,109,100,114, 97,119,109,101, +116,104,111,100, 0,100,114, 97,103,116,104,114,101,115,104,111,108,100, 0,109,101,109, 99, 97, 99,104,101,108,105,109,105,116, + 0,112,114,101,102,101,116, 99,104,102,114, 97,109,101,115, 0,102,114, 97,109,101,115,101,114,118,101,114,112,111,114,116, 0, +112, 97,100, 95,114,111,116, 95, 97,110,103,108,101, 0,111, 98, 99,101,110,116,101,114, 95,100,105, 97, 0,114,118,105,115,105, +122,101, 0,114,118,105, 98,114,105,103,104,116, 0,114,101, 99,101,110,116, 95,102,105,108,101,115, 0,115,109,111,111,116,104, + 95,118,105,101,119,116,120, 0,103,108,114,101,115,108,105,109,105,116, 0, 99,117,114,115,115,105,122,101, 0, 99,111,108,111, +114, 95,112,105, 99,107,101,114, 95,116,121,112,101, 0,105,112,111, 95,110,101,119, 0,107,101,121,104, 97,110,100,108,101,115, + 95,110,101,119, 0,115, 99,114, 99, 97,115,116,102,112,115, 0,115, 99,114, 99, 97,115,116,119, 97,105,116, 0,119,105,100,103, +101,116, 95,117,110,105,116, 0, 97,110,105,115,111,116,114,111,112,105, 99, 95,102,105,108,116,101,114, 0,117,115,101, 95, 49, + 54, 98,105,116, 95,116,101,120,116,117,114,101,115, 0,112, 97,100, 56, 0,110,100,111,102, 95,115,101,110,115,105,116,105,118, +105,116,121, 0,110,100,111,102, 95,102,108, 97,103, 0,103,108, 97,108,112,104, 97, 99,108,105,112, 0,116,101,120,116, 95,114, +101,110,100,101,114, 0,112, 97,100, 57, 0, 99,111, 98, 97, 95,119,101,105,103,104,116, 0,115, 99,117,108,112,116, 95,112, 97, +105,110,116, 95,111,118,101,114,108, 97,121, 95, 99,111,108, 91, 51, 93, 0,116,119,101, 97,107, 95,116,104,114,101,115,104,111, +108,100, 0, 97,117,116,104,111,114, 91, 56, 48, 93, 0, 99,111,109,112,117,116,101, 95,100,101,118,105, 99,101, 95,116,121,112, +101, 0, 99,111,109,112,117,116,101, 95,100,101,118,105, 99,101, 95,105,100, 0,102, 99,117, 95,105,110, 97, 99,116,105,118,101, + 95, 97,108,112,104, 97, 0,118,101,114,116, 98, 97,115,101, 0,101,100,103,101, 98, 97,115,101, 0, 97,114,101, 97, 98, 97,115, +101, 0, 42,110,101,119,115, 99,101,110,101, 0,114,101,100,114, 97,119,115, 95,102,108, 97,103, 0,102,117,108,108, 0,116,101, +109,112, 0,119,105,110,105,100, 0,100,111, 95,100,114, 97,119, 0,100,111, 95,114,101,102,114,101,115,104, 0,100,111, 95,100, +114, 97,119, 95,103,101,115,116,117,114,101, 0,100,111, 95,100,114, 97,119, 95,112, 97,105,110,116, 99,117,114,115,111,114, 0, +100,111, 95,100,114, 97,119, 95,100,114, 97,103, 0,115,119, 97,112, 0,109, 97,105,110,119,105,110, 0,115,117, 98,119,105,110, + 97, 99,116,105,118,101, 0, 42, 97,110,105,109,116,105,109,101,114, 0, 42, 99,111,110,116,101,120,116, 0,104, 97,110,100,108, +101,114, 91, 56, 93, 0, 42,110,101,119,118, 0,118,101, 99, 0, 42,118, 49, 0, 42,118, 50, 0, 42,116,121,112,101, 0,112, 97, +110,101,108,110, 97,109,101, 91, 54, 52, 93, 0,116, 97, 98,110, 97,109,101, 91, 54, 52, 93, 0,100,114, 97,119,110, 97,109,101, + 91, 54, 52, 93, 0,111,102,115,120, 0,111,102,115,121, 0,115,105,122,101,120, 0,115,105,122,101,121, 0,108, 97, 98,101,108, +111,102,115, 0,114,117,110,116,105,109,101, 95,102,108, 97,103, 0, 99,111,110,116,114,111,108, 0,115,110, 97,112, 0,115,111, +114,116,111,114,100,101,114, 0, 42,112, 97,110,101,108,116, 97, 98, 0, 42, 97, 99,116,105,118,101,100, 97,116, 97, 0,108,105, +115,116, 95,115, 99,114,111,108,108, 0,108,105,115,116, 95,115,105,122,101, 0,108,105,115,116, 95,108, 97,115,116, 95,108,101, +110, 0,108,105,115,116, 95,103,114,105,112, 95,115,105,122,101, 0,108,105,115,116, 95,115,101, 97,114, 99,104, 91, 54, 52, 93, + 0, 42,118, 51, 0, 42,118, 52, 0, 42,102,117,108,108, 0, 98,117,116,115,112, 97, 99,101,116,121,112,101, 0,104,101, 97,100, +101,114,116,121,112,101, 0,115,112, 97, 99,101,100, 97,116, 97, 0,104, 97,110,100,108,101,114,115, 0, 97, 99,116,105,111,110, +122,111,110,101,115, 0,119,105,110,114, 99,116, 0,100,114, 97,119,114, 99,116, 0,115,119,105,110,105,100, 0,114,101,103,105, +111,110,116,121,112,101, 0, 97,108,105,103,110,109,101,110,116, 0,100,111, 95,100,114, 97,119, 95,111,118,101,114,108, 97,121, + 0,117,105, 98,108,111, 99,107,115, 0,112, 97,110,101,108,115, 0, 42,104,101, 97,100,101,114,115,116,114, 0, 42,114,101,103, +105,111,110,100, 97,116, 97, 0,115,117, 98,118,115,116,114, 91, 52, 93, 0,115,117, 98,118,101,114,115,105,111,110, 0,112, 97, +100,115, 0,109,105,110,118,101,114,115,105,111,110, 0,109,105,110,115,117, 98,118,101,114,115,105,111,110, 0,119,105,110,112, +111,115, 0, 42, 99,117,114,115, 99,114,101,101,110, 0, 42, 99,117,114,115, 99,101,110,101, 0,102,105,108,101,102,108, 97,103, +115, 0,103,108,111, 98, 97,108,102, 0,114,101,118,105,115,105,111,110, 0,110, 97,109,101, 91, 50, 53, 54, 93, 0,111,114,105, +103, 95,119,105,100,116,104, 0,111,114,105,103, 95,104,101,105,103,104,116, 0, 98,111,116,116,111,109, 0,114,105,103,104,116, + 0,120,111,102,115, 0,121,111,102,115, 0,108,105,102,116, 91, 51, 93, 0,103, 97,109,109, 97, 91, 51, 93, 0,103, 97,105,110, + 91, 51, 93, 0,100,105,114, 91, 55, 54, 56, 93, 0,116, 99, 0, 98,117,105,108,100, 95,115,105,122,101, 95,102,108, 97,103,115, + 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103,115, 0,100,111,110,101, 0,115,116, 97,114,116,115,116,105,108,108, 0, +101,110,100,115,116,105,108,108, 0, 42,115,116,114,105,112,100, 97,116, 97, 0, 42, 99,114,111,112, 0, 42,116,114, 97,110,115, +102,111,114,109, 0, 42, 99,111,108,111,114, 95, 98, 97,108, 97,110, 99,101, 0, 42,116,109,112, 0,115,116, 97,114,116,111,102, +115, 0,101,110,100,111,102,115, 0,109, 97, 99,104,105,110,101, 0,115,116, 97,114,116,100,105,115,112, 0,101,110,100,100,105, +115,112, 0,115, 97,116, 0,109,117,108, 0,104, 97,110,100,115,105,122,101, 0, 97,110,105,109, 95,112,114,101,115,101,101,107, + 0,115,116,114,101, 97,109,105,110,100,101,120, 0,109,117,108,116,105, 99, 97,109, 95,115,111,117,114, 99,101, 0, 99,108,105, +112, 95,102,108, 97,103, 0, 42,115,116,114,105,112, 0, 42,115, 99,101,110,101, 95, 99, 97,109,101,114, 97, 0,101,102,102,101, + 99,116, 95,102, 97,100,101,114, 0,115,112,101,101,100, 95,102, 97,100,101,114, 0, 42,115,101,113, 49, 0, 42,115,101,113, 50, + 0, 42,115,101,113, 51, 0,115,101,113, 98, 97,115,101, 0, 42,115,111,117,110,100, 0, 42,115, 99,101,110,101, 95,115,111,117, +110,100, 0,112,105,116, 99,104, 0,112, 97,110, 0,115,116,114,111, 98,101, 0, 42,101,102,102,101, 99,116,100, 97,116, 97, 0, + 97,110,105,109, 95,115,116, 97,114,116,111,102,115, 0, 97,110,105,109, 95,101,110,100,111,102,115, 0, 98,108,101,110,100, 95, +109,111,100,101, 0, 98,108,101,110,100, 95,111,112, 97, 99,105,116,121, 0, 42,111,108,100, 98, 97,115,101,112, 0, 42,112, 97, +114,115,101,113, 0, 42,115,101,113, 98, 97,115,101,112, 0,109,101,116, 97,115,116, 97, 99,107, 0, 42, 97, 99,116, 95,115,101, +113, 0, 97, 99,116, 95,105,109, 97,103,101,100,105,114, 91, 49, 48, 50, 52, 93, 0, 97, 99,116, 95,115,111,117,110,100,100,105, +114, 91, 49, 48, 50, 52, 93, 0,111,118,101,114, 95,111,102,115, 0,111,118,101,114, 95, 99,102,114, 97, 0,111,118,101,114, 95, +102,108, 97,103, 0,111,118,101,114, 95, 98,111,114,100,101,114, 0,101,100,103,101, 87,105,100,116,104, 0,102,111,114,119, 97, +114,100, 0,119,105,112,101,116,121,112,101, 0,102, 77,105,110,105, 0,102, 67,108, 97,109,112, 0,102, 66,111,111,115,116, 0, +100, 68,105,115,116, 0,100, 81,117, 97,108,105,116,121, 0, 98, 78,111, 67,111,109,112, 0, 83, 99, 97,108,101,120, 73,110,105, + 0, 83, 99, 97,108,101,121, 73,110,105, 0,120, 73,110,105, 0,121, 73,110,105, 0,114,111,116, 73,110,105, 0,105,110,116,101, +114,112,111,108, 97,116,105,111,110, 0,117,110,105,102,111,114,109, 95,115, 99, 97,108,101, 0, 42,102,114, 97,109,101, 77, 97, +112, 0,103,108,111, 98, 97,108, 83,112,101,101,100, 0,108, 97,115,116, 86, 97,108,105,100, 70,114, 97,109,101, 0, 98,117,116, +116,121,112,101, 0,117,115,101,114,106,105,116, 0,115,116, 97, 0,116,111,116,112, 97,114,116, 0,110,111,114,109,102, 97, 99, + 0,111, 98,102, 97, 99, 0,114, 97,110,100,102, 97, 99, 0,116,101,120,102, 97, 99, 0,114, 97,110,100,108,105,102,101, 0,102, +111,114, 99,101, 91, 51, 93, 0,118,101, 99,116,115,105,122,101, 0,109, 97,120,108,101,110, 0,100,101,102,118,101, 99, 91, 51, + 93, 0,109,117,108,116, 91, 52, 93, 0,108,105,102,101, 91, 52, 93, 0, 99,104,105,108,100, 91, 52, 93, 0,109, 97,116, 91, 52, + 93, 0,116,101,120,109, 97,112, 0, 99,117,114,109,117,108,116, 0,115,116, 97,116,105, 99,115,116,101,112, 0,111,109, 97,116, + 0,116,105,109,101,116,101,120, 0,115,112,101,101,100,116,101,120, 0,102,108, 97,103, 50,110,101,103, 0,118,101,114,116,103, +114,111,117,112, 95,118, 0,118,103,114,111,117,112,110, 97,109,101, 91, 54, 52, 93, 0,118,103,114,111,117,112,110, 97,109,101, + 95,118, 91, 54, 52, 93, 0, 42,107,101,121,115, 0,109,105,110,102, 97, 99, 0,110,114, 0,117,115,101,100, 0,117,115,101,100, +101,108,101,109, 0, 42,112,111,105,110, 0,114,101,115,101,116,100,105,115,116, 0,108, 97,115,116,118, 97,108, 0, 42,109, 97, + 0,107,101,121, 0,113,117, 97,108, 0,113,117, 97,108, 50, 0,116, 97,114,103,101,116, 78, 97,109,101, 91, 54, 52, 93, 0,116, +111,103,103,108,101, 78, 97,109,101, 91, 54, 52, 93, 0,118, 97,108,117,101, 91, 54, 52, 93, 0,109, 97,120,118, 97,108,117,101, + 91, 54, 52, 93, 0,100,101,108, 97,121, 0,100,117,114, 97,116,105,111,110, 0,109, 97,116,101,114,105, 97,108, 78, 97,109,101, + 91, 54, 52, 93, 0,100, 97,109,112,116,105,109,101,114, 0,112,114,111,112,110, 97,109,101, 91, 54, 52, 93, 0,109, 97,116,110, + 97,109,101, 91, 54, 52, 93, 0, 97,120,105,115,102,108, 97,103, 0,112,111,115,101, 99,104, 97,110,110,101,108, 91, 54, 52, 93, + 0, 99,111,110,115,116,114, 97,105,110,116, 91, 54, 52, 93, 0, 42,102,114,111,109, 79, 98,106,101, 99,116, 0,115,117, 98,106, +101, 99,116, 91, 54, 52, 93, 0, 98,111,100,121, 91, 54, 52, 93, 0,111,116,121,112,101, 0,112,117,108,115,101, 0,102,114,101, +113, 0,116,111,116,108,105,110,107,115, 0, 42, 42,108,105,110,107,115, 0,116, 97,112, 0,106,111,121,105,110,100,101,120, 0, + 97,120,105,115, 95,115,105,110,103,108,101, 0, 97,120,105,115,102, 0, 98,117,116,116,111,110, 0,104, 97,116, 0,104, 97,116, +102, 0,112,114,101, 99,105,115,105,111,110, 0,115,116,114, 91, 49, 50, 56, 93, 0, 42,109,121,110,101,119, 0,105,110,112,117, +116,115, 0,116,111,116,115,108,105,110,107,115, 0, 42, 42,115,108,105,110,107,115, 0,118, 97,108,111, 0,115,116, 97,116,101, + 95,109, 97,115,107, 0, 42, 97, 99,116, 0,102,114, 97,109,101, 80,114,111,112, 91, 54, 52, 93, 0, 98,108,101,110,100,105,110, + 0,112,114,105,111,114,105,116,121, 0,101,110,100, 95,114,101,115,101,116, 0,115,116,114,105,100,101, 97,120,105,115, 0,115, +116,114,105,100,101,108,101,110,103,116,104, 0,108, 97,121,101,114, 95,119,101,105,103,104,116, 0,109,105,110, 95,103, 97,105, +110, 0,109, 97,120, 95,103, 97,105,110, 0,114,101,102,101,114,101,110, 99,101, 95,100,105,115,116, 97,110, 99,101, 0,109, 97, +120, 95,100,105,115,116, 97,110, 99,101, 0,114,111,108,108,111,102,102, 95,102, 97, 99,116,111,114, 0, 99,111,110,101, 95,105, +110,110,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, 95,111,117,116,101,114, 95, 97,110,103,108,101, 0, 99,111,110,101, + 95,111,117,116,101,114, 95,103, 97,105,110, 0,115,110,100,110,114, 0,115,111,117,110,100, 51, 68, 0,112, 97,100, 54, 91, 49, + 93, 0, 42,109,101, 0,108,105,110, 86,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103, 86,101,108,111, 99,105,116,121, + 91, 51, 93, 0,108,111, 99, 97,108,102,108, 97,103, 0,100,121,110, 95,111,112,101,114, 97,116,105,111,110, 0,102,111,114, 99, +101,108,111, 99, 91, 51, 93, 0,102,111,114, 99,101,114,111,116, 91, 51, 93, 0,112, 97,100, 49, 91, 51, 93, 0,108,105,110,101, + 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, 0, 97,110,103,117,108, 97,114,118,101,108,111, 99,105,116,121, 91, 51, 93, + 0, 42,114,101,102,101,114,101,110, 99,101, 0,109,105,110, 0,109, 97,120, 0,114,111,116,100, 97,109,112, 0,109,105,110,108, +111, 99, 91, 51, 93, 0,109, 97,120,108,111, 99, 91, 51, 93, 0,109,105,110,114,111,116, 91, 51, 93, 0,109, 97,120,114,111,116, + 91, 51, 93, 0,109, 97,116,112,114,111,112, 91, 54, 52, 93, 0, 98,117,116,115,116, 97, 0, 98,117,116,101,110,100, 0,100,105, +115,116,114,105, 98,117,116,105,111,110, 0,105,110,116, 95, 97,114,103, 95, 49, 0,105,110,116, 95, 97,114,103, 95, 50, 0,102, +108,111, 97,116, 95, 97,114,103, 95, 49, 0,102,108,111, 97,116, 95, 97,114,103, 95, 50, 0,116,111, 80,114,111,112, 78, 97,109, +101, 91, 54, 52, 93, 0, 42,116,111, 79, 98,106,101, 99,116, 0, 98,111,100,121, 84,121,112,101, 0,102,105,108,101,110, 97,109, +101, 91, 54, 52, 93, 0,108,111, 97,100, 97,110,105,110, 97,109,101, 91, 54, 52, 93, 0,105,110,116, 95, 97,114,103, 0,102,108, +111, 97,116, 95, 97,114,103, 0,105,110,102,108,117,101,110, 99,101, 0, 42,115,117, 98,116, 97,114,103,101,116, 0,102, 97, 99, +105,110,103, 97,120,105,115, 0,118,101,108,111, 99,105,116,121, 0, 97, 99, 99,101,108,101,114, 97,116,105,111,110, 0,116,117, +114,110,115,112,101,101,100, 0,117,112,100, 97,116,101, 84,105,109,101, 0, 42,110, 97,118,109,101,115,104, 0,103,111, 0, 42, +104, 97,110,100,108,101, 0, 42,110,101,119,112, 97, 99,107,101,100,102,105,108,101, 0, 97,116,116,101,110,117, 97,116,105,111, +110, 0,100,105,115,116, 97,110, 99,101, 0, 42, 99, 97, 99,104,101, 0, 42,119, 97,118,101,102,111,114,109, 0, 42,112,108, 97, +121, 98, 97, 99,107, 95,104, 97,110,100,108,101, 0, 42,108, 97,109,112,114,101,110, 0,103,111, 98,106,101, 99,116, 0,100,117, +112,108,105, 95,111,102,115, 91, 51, 93, 0, 42,112,114,111,112, 0, 99,104,105,108,100, 98, 97,115,101, 0,114,111,108,108, 0, +104,101, 97,100, 91, 51, 93, 0,116, 97,105,108, 91, 51, 93, 0, 98,111,110,101, 95,109, 97,116, 91, 51, 93, 91, 51, 93, 0, 97, +114,109, 95,104,101, 97,100, 91, 51, 93, 0, 97,114,109, 95,116, 97,105,108, 91, 51, 93, 0, 97,114,109, 95,109, 97,116, 91, 52, + 93, 91, 52, 93, 0, 97,114,109, 95,114,111,108,108, 0,120,119,105,100,116,104, 0,122,119,105,100,116,104, 0,101, 97,115,101, + 49, 0,101, 97,115,101, 50, 0,114, 97,100, 95,104,101, 97,100, 0,114, 97,100, 95,116, 97,105,108, 0,112, 97,100, 91, 49, 93, + 0, 98,111,110,101, 98, 97,115,101, 0, 99,104, 97,105,110, 98, 97,115,101, 0, 42,101,100, 98,111, 0, 42, 97, 99,116, 95, 98, +111,110,101, 0, 42, 97, 99,116, 95,101,100, 98,111,110,101, 0, 42,115,107,101,116, 99,104, 0,103,101,118,101,114,116,100,101, +102,111,114,109,101,114, 0,108, 97,121,101,114, 95,117,115,101,100, 0,108, 97,121,101,114, 95,112,114,111,116,101, 99,116,101, +100, 0,103,104,111,115,116,101,112, 0,103,104,111,115,116,115,105,122,101, 0,103,104,111,115,116,116,121,112,101, 0,112, 97, +116,104,115,105,122,101, 0,103,104,111,115,116,115,102, 0,103,104,111,115,116,101,102, 0,112, 97,116,104,115,102, 0,112, 97, +116,104,101,102, 0,112, 97,116,104, 98, 99, 0,112, 97,116,104, 97, 99, 0, 42,112,111,105,110,116,115, 0,115,116, 97,114,116, + 95,102,114, 97,109,101, 0,101,110,100, 95,102,114, 97,109,101, 0,103,104,111,115,116, 95,115,102, 0,103,104,111,115,116, 95, +101,102, 0,103,104,111,115,116, 95, 98, 99, 0,103,104,111,115,116, 95, 97, 99, 0,103,104,111,115,116, 95,116,121,112,101, 0, +103,104,111,115,116, 95,115,116,101,112, 0,103,104,111,115,116, 95,102,108, 97,103, 0,112, 97,116,104, 95,116,121,112,101, 0, +112, 97,116,104, 95,115,116,101,112, 0,112, 97,116,104, 95,118,105,101,119,102,108, 97,103, 0,112, 97,116,104, 95, 98, 97,107, +101,102,108, 97,103, 0,112, 97,116,104, 95,115,102, 0,112, 97,116,104, 95,101,102, 0,112, 97,116,104, 95, 98, 99, 0,112, 97, +116,104, 95, 97, 99, 0,105,107,102,108, 97,103, 0, 97,103,114,112, 95,105,110,100,101,120, 0, 99,111,110,115,116,102,108, 97, +103, 0,115,101,108,101, 99,116,102,108, 97,103, 0,112, 97,100, 48, 91, 54, 93, 0, 42, 98,111,110,101, 0, 42, 99,104,105,108, +100, 0,105,107,116,114,101,101, 0,115,105,107,116,114,101,101, 0, 42, 99,117,115,116,111,109, 0, 42, 99,117,115,116,111,109, + 95,116,120, 0,101,117,108, 91, 51, 93, 0, 99,104, 97,110, 95,109, 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,109, + 97,116, 91, 52, 93, 91, 52, 93, 0,112,111,115,101, 95,104,101, 97,100, 91, 51, 93, 0,112,111,115,101, 95,116, 97,105,108, 91, + 51, 93, 0,108,105,109,105,116,109,105,110, 91, 51, 93, 0,108,105,109,105,116,109, 97,120, 91, 51, 93, 0,115,116,105,102,102, +110,101,115,115, 91, 51, 93, 0,105,107,115,116,114,101,116, 99,104, 0,105,107,114,111,116,119,101,105,103,104,116, 0,105,107, +108,105,110,119,101,105,103,104,116, 0, 42,116,101,109,112, 0, 99,104, 97,110, 98, 97,115,101, 0, 42, 99,104, 97,110,104, 97, +115,104, 0,112,114,111,120,121, 95,108, 97,121,101,114, 0,115,116,114,105,100,101, 95,111,102,102,115,101,116, 91, 51, 93, 0, + 99,121, 99,108,105, 99, 95,111,102,102,115,101,116, 91, 51, 93, 0, 97,103,114,111,117,112,115, 0, 97, 99,116,105,118,101, 95, +103,114,111,117,112, 0,105,107,115,111,108,118,101,114, 0, 42,105,107,100, 97,116, 97, 0, 42,105,107,112, 97,114, 97,109, 0, +112,114,111,120,121, 95, 97, 99,116, 95, 98,111,110,101, 91, 54, 52, 93, 0,110,117,109,105,116,101,114, 0,110,117,109,115,116, +101,112, 0,109,105,110,115,116,101,112, 0,109, 97,120,115,116,101,112, 0,115,111,108,118,101,114, 0,102,101,101,100, 98, 97, + 99,107, 0,109, 97,120,118,101,108, 0,100, 97,109,112,109, 97,120, 0,100, 97,109,112,101,112,115, 0, 99,104, 97,110,110,101, +108,115, 0, 99,117,115,116,111,109, 67,111,108, 0, 99,115, 0, 99,117,114,118,101,115, 0,103,114,111,117,112,115, 0, 97, 99, +116,105,118,101, 95,109, 97,114,107,101,114, 0,105,100,114,111,111,116, 0, 42,115,111,117,114, 99,101, 0, 42,102,105,108,116, +101,114, 95,103,114,112, 0,115,101, 97,114, 99,104,115,116,114, 91, 54, 52, 93, 0,102,105,108,116,101,114,102,108, 97,103, 0, +114,101,110, 97,109,101, 73,110,100,101,120, 0, 97,100,115, 0,116,105,109,101,115,108,105,100,101, 0, 42,103,114,112, 0,110, + 97,109,101, 91, 51, 48, 93, 0,111,119,110,115,112, 97, 99,101, 0,116, 97,114,115,112, 97, 99,101, 0,101,110,102,111,114, 99, +101, 0,104,101, 97,100,116, 97,105,108, 0,108,105,110, 95,101,114,114,111,114, 0,114,111,116, 95,101,114,114,111,114, 0, 42, +116, 97,114, 0,109, 97,116,114,105,120, 91, 52, 93, 91, 52, 93, 0,115,112, 97, 99,101, 0,114,111,116, 79,114,100,101,114, 0, +116, 97,114,110,117,109, 0,116, 97,114,103,101,116,115, 0,105,116,101,114, 97,116,105,111,110,115, 0,114,111,111,116, 98,111, +110,101, 0,109, 97,120, 95,114,111,111,116, 98,111,110,101, 0, 42,112,111,108,101,116, 97,114, 0,112,111,108,101,115,117, 98, +116, 97,114,103,101,116, 91, 54, 52, 93, 0,112,111,108,101, 97,110,103,108,101, 0,111,114,105,101,110,116,119,101,105,103,104, +116, 0,103,114, 97, 98,116, 97,114,103,101,116, 91, 51, 93, 0,110,117,109,112,111,105,110,116,115, 0, 99,104, 97,105,110,108, +101,110, 0,120,122, 83, 99, 97,108,101, 77,111,100,101, 0,114,101,115,101,114,118,101,100, 49, 0,114,101,115,101,114,118,101, +100, 50, 0,109,105,110,109, 97,120,102,108, 97,103, 0,115,116,117, 99,107, 0, 99, 97, 99,104,101, 91, 51, 93, 0,108,111, 99, +107,102,108, 97,103, 0,102,111,108,108,111,119,102,108, 97,103, 0,118,111,108,109,111,100,101, 0,112,108, 97,110,101, 0,111, +114,103,108,101,110,103,116,104, 0, 98,117,108,103,101, 0,112,105,118, 88, 0,112,105,118, 89, 0,112,105,118, 90, 0, 97,120, + 88, 0, 97,120, 89, 0, 97,120, 90, 0,109,105,110, 76,105,109,105,116, 91, 54, 93, 0,109, 97,120, 76,105,109,105,116, 91, 54, + 93, 0,101,120,116,114, 97, 70,122, 0,105,110,118,109, 97,116, 91, 52, 93, 91, 52, 93, 0,102,114,111,109, 0,116,111, 0,109, + 97,112, 91, 51, 93, 0,101,120,112,111, 0,102,114,111,109, 95,109,105,110, 91, 51, 93, 0,102,114,111,109, 95,109, 97,120, 91, + 51, 93, 0,116,111, 95,109,105,110, 91, 51, 93, 0,116,111, 95,109, 97,120, 91, 51, 93, 0,114,111,116, 65,120,105,115, 0,122, +109,105,110, 0,122,109, 97,120, 0,112, 97,100, 91, 57, 93, 0,116,114, 97, 99,107, 91, 54, 52, 93, 0,111, 98,106,101, 99,116, + 91, 54, 52, 93, 0, 42,100,101,112,116,104, 95,111, 98, 0, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,110,111, 95,114,111, +116, 95, 97,120,105,115, 0,115,116,114,105,100,101, 95, 97,120,105,115, 0, 99,117,114,109,111,100, 0, 97, 99,116,115,116, 97, +114,116, 0, 97, 99,116,101,110,100, 0, 97, 99,116,111,102,102,115, 0,115,116,114,105,100,101,108,101,110, 0, 98,108,101,110, +100,111,117,116, 0,115,116,114,105,100,101, 99,104, 97,110,110,101,108, 91, 51, 50, 93, 0,111,102,102,115, 95, 98,111,110,101, + 91, 51, 50, 93, 0,104, 97,115,105,110,112,117,116, 0,104, 97,115,111,117,116,112,117,116, 0,100, 97,116, 97,116,121,112,101, + 0,115,111, 99,107,101,116,116,121,112,101, 0,105,115, 95, 99,111,112,121, 0,101,120,116,101,114,110, 97,108, 0, 42,110,101, +119, 95,115,111, 99,107, 0, 42,115,116,111,114, 97,103,101, 0,108,105,109,105,116, 0,108,111, 99,120, 0,108,111, 99,121, 0, + 42,100,101,102, 97,117,108,116, 95,118, 97,108,117,101, 0,115,116, 97, 99,107, 95,105,110,100,101,120, 0,115,116, 97, 99,107, + 95,116,121,112,101, 0,114,101,115,105,122,101,109,111,100,101, 0,111,119,110, 95,105,110,100,101,120, 0,116,111, 95,105,110, +100,101,120, 0, 42,103,114,111,117,112,115,111, 99,107, 0, 42,108,105,110,107, 0,110,115, 0, 42,114,101, 99,116, 0,120,115, +105,122,101, 0,121,115,105,122,101, 0, 42,110,101,119, 95,110,111,100,101, 0,108, 97,115,116,121, 0, 99,111,108,111,114, 91, + 51, 93, 0,111,117,116,112,117,116,115, 0,109,105,110,105,119,105,100,116,104, 0,111,102,102,115,101,116,120, 0,111,102,102, +115,101,116,121, 0,117,112,100, 97,116,101, 0,108, 97, 98,101,108, 91, 54, 52, 93, 0, 99,117,115,116,111,109, 49, 0, 99,117, +115,116,111,109, 50, 0, 99,117,115,116,111,109, 51, 0, 99,117,115,116,111,109, 52, 0,110,101,101,100, 95,101,120,101, 99, 0, +101,120,101, 99, 0, 42,116,104,114,101, 97,100,100, 97,116, 97, 0,116,111,116,114, 0, 98,117,116,114, 0,112,114,118,114, 0, + 42, 98,108,111, 99,107, 0, 42,116,121,112,101,105,110,102,111, 0, 42,102,114,111,109,110,111,100,101, 0, 42,116,111,110,111, +100,101, 0, 42,102,114,111,109,115,111, 99,107, 0, 42,116,111,115,111, 99,107, 0,110,111,100,101,115, 0,108,105,110,107,115, + 0,105,110,105,116, 0, 99,117,114, 95,105,110,100,101,120, 0,110,111,100,101,116,121,112,101, 0,101,100,105,116, 95,113,117, + 97,108,105,116,121, 0,114,101,110,100,101,114, 95,113,117, 97,108,105,116,121, 0, 99,104,117,110,107,115,105,122,101, 0, 42, +101,120,101, 99,100, 97,116, 97, 0, 40, 42,112,114,111,103,114,101,115,115, 41, 40, 41, 0, 40, 42,115,116, 97,116,115, 95,100, +114, 97,119, 41, 40, 41, 0, 40, 42,116,101,115,116, 95, 98,114,101, 97,107, 41, 40, 41, 0, 42,116, 98,104, 0, 42,112,114,104, + 0, 42,115,100,104, 0,118, 97,108,117,101, 91, 51, 93, 0,118, 97,108,117,101, 91, 52, 93, 0,108, 97, 98,101,108, 95,115,105, +122,101, 0, 99,121, 99,108,105, 99, 0,109,111,118,105,101, 0,103, 97,109,109, 97, 0,103, 97,105,110, 0,108,105,102,116, 0, +109, 97,115,116,101,114, 0,115,104, 97,100,111,119,115, 0,109,105,100,116,111,110,101,115, 0,104,105,103,104,108,105,103,104, +116,115, 0,115,116, 97,114,116,109,105,100,116,111,110,101,115, 0,101,110,100,109,105,100,116,111,110,101,115, 0,102,108, 97, +112,115, 0,114,111,117,110,100,105,110,103, 0, 99, 97,116, 97,100,105,111,112,116,114,105, 99, 0,108,101,110,115,115,104,105, +102,116, 0,114,111,116, 97,116,105,111,110, 0,112, 97,115,115, 95,105,110,100,101,120, 0,112, 97,115,115, 95,102,108, 97,103, + 0,109, 97,120,115,112,101,101,100, 0,109,105,110,115,112,101,101,100, 0, 99,117,114,118,101,100, 0,112,101,114, 99,101,110, +116,120, 0,112,101,114, 99,101,110,116,121, 0, 98,111,107,101,104, 0,105,109, 97,103,101, 95,105,110, 95,119,105,100,116,104, + 0,105,109, 97,103,101, 95,105,110, 95,104,101,105,103,104,116, 0, 99,101,110,116,101,114, 95,120, 0, 99,101,110,116,101,114, + 95,121, 0,115,112,105,110, 0,119,114, 97,112, 0,115,105,103,109, 97, 95, 99,111,108,111,114, 0,115,105,103,109, 97, 95,115, +112, 97, 99,101, 0,104,117,101, 0, 98, 97,115,101, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,102,111,114,109, 97,116, 0, + 97, 99,116,105,118,101, 95,105,110,112,117,116, 0,117,115,101, 95,114,101,110,100,101,114, 95,102,111,114,109, 97,116, 0,117, +115,101, 95,110,111,100,101, 95,102,111,114,109, 97,116, 0,108, 97,121,101,114, 91, 51, 48, 93, 0,116, 49, 0,116, 50, 0,116, + 51, 0,102,115,116,114,101,110,103,116,104, 0,102, 97,108,112,104, 97, 0,107,101,121, 91, 52, 93, 0, 97,108,103,111,114,105, +116,104,109, 0, 99,104, 97,110,110,101,108, 0,120, 49, 0,120, 50, 0,121, 49, 0,121, 50, 0,102, 97, 99, 95,120, 49, 0,102, + 97, 99, 95,120, 50, 0,102, 97, 99, 95,121, 49, 0,102, 97, 99, 95,121, 50, 0, 99,111,108,110, 97,109,101, 91, 54, 52, 93, 0, + 98,107,116,121,112,101, 0,112, 97,100, 95, 99, 49, 0,103, 97,109, 99,111, 0,110,111, 95,122, 98,117,102, 0,102,115,116,111, +112, 0,109, 97,120, 98,108,117,114, 0, 98,116,104,114,101,115,104, 0,112, 97,100, 95,102, 49, 0, 42,100,105, 99,116, 0, 42, +110,111,100,101, 0, 99,111,108,109,111,100, 0,109,105,120, 0,102, 97,100,101, 0, 97,110,103,108,101, 95,111,102,115, 0,109, + 0, 99, 0,106,105,116, 0,112,114,111,106, 0,102,105,116, 0,115,108,111,112,101, 91, 51, 93, 0,112,111,119,101,114, 91, 51, + 93, 0,108,105,102,116, 95,108,103,103, 91, 51, 93, 0,103, 97,109,109, 97, 95,105,110,118, 91, 51, 93, 0,108,105,109, 99,104, + 97,110, 0,117,110,115,112,105,108,108, 0,108,105,109,115, 99, 97,108,101, 0,117,115,112,105,108,108,114, 0,117,115,112,105, +108,108,103, 0,117,115,112,105,108,108, 98, 0,116,101,120, 95,109, 97,112,112,105,110,103, 0, 99,111,108,111,114, 95,109, 97, +112,112,105,110,103, 0,115,117,110, 95,100,105,114,101, 99,116,105,111,110, 91, 51, 93, 0,116,117,114, 98,105,100,105,116,121, + 0, 99,111,108,111,114, 95,115,112, 97, 99,101, 0,112,114,111,106,101, 99,116,105,111,110, 0,103,114, 97,100,105,101,110,116, + 95,116,121,112,101, 0, 99,111,108,111,114,105,110,103, 0,109,117,115,103,114, 97,118,101, 95,116,121,112,101, 0,119, 97,118, +101, 95,116,121,112,101, 0,115,104,111,114,116,121, 0,109,105,110,116, 97, 98,108,101, 0,109, 97,120,116, 97, 98,108,101, 0, +101,120,116, 95,105,110, 91, 50, 93, 0,101,120,116, 95,111,117,116, 91, 50, 93, 0, 42, 99,117,114,118,101, 0, 42,116, 97, 98, +108,101, 0, 42,112,114,101,109,117,108,116, 97, 98,108,101, 0,112,114,101,115,101,116, 0, 99,104, 97,110,103,101,100, 95,116, +105,109,101,115,116, 97,109,112, 0, 99,117,114,114, 0, 99,108,105,112,114, 0, 99,109, 91, 52, 93, 0, 98,108, 97, 99,107, 91, + 51, 93, 0,119,104,105,116,101, 91, 51, 93, 0, 98,119,109,117,108, 91, 51, 93, 0,115, 97,109,112,108,101, 91, 51, 93, 0,120, + 95,114,101,115,111,108,117,116,105,111,110, 0,100, 97,116, 97, 95,114, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,103, 91, 50, + 53, 54, 93, 0,100, 97,116, 97, 95, 98, 91, 50, 53, 54, 93, 0,100, 97,116, 97, 95,108,117,109, 97, 91, 50, 53, 54, 93, 0,115, + 97,109,112,108,101, 95,102,117,108,108, 0,115, 97,109,112,108,101, 95,108,105,110,101,115, 0, 97, 99, 99,117,114, 97, 99,121, + 0,119, 97,118,101,102,114,109, 95,109,111,100,101, 0,119, 97,118,101,102,114,109, 95, 97,108,112,104, 97, 0,119, 97,118,101, +102,114,109, 95,121,102, 97, 99, 0,119, 97,118,101,102,114,109, 95,104,101,105,103,104,116, 0,118,101, 99,115, 99,111,112,101, + 95, 97,108,112,104, 97, 0,118,101, 99,115, 99,111,112,101, 95,104,101,105,103,104,116, 0,109,105,110,109, 97,120, 91, 51, 93, + 91, 50, 93, 0,104,105,115,116, 0, 42,119, 97,118,101,102,111,114,109, 95, 49, 0, 42,119, 97,118,101,102,111,114,109, 95, 50, + 0, 42,119, 97,118,101,102,111,114,109, 95, 51, 0, 42,118,101, 99,115, 99,111,112,101, 0,119, 97,118,101,102,111,114,109, 95, +116,111,116, 0,111,102,102,115,101,116, 91, 50, 93, 0, 99,108,111,110,101, 0,109,116,101,120, 0, 42,116,111,103,103,108,101, + 95, 98,114,117,115,104, 0, 42,105, 99,111,110, 95,105,109, 98,117,102, 0,105, 99,111,110, 95,102,105,108,101,112, 97,116,104, + 91, 49, 48, 50, 52, 93, 0,110,111,114,109, 97,108, 95,119,101,105,103,104,116, 0,111, 98, 95,109,111,100,101, 0,106,105,116, +116,101,114, 0,115,109,111,111,116,104, 95,115,116,114,111,107,101, 95,114, 97,100,105,117,115, 0,115,109,111,111,116,104, 95, +115,116,114,111,107,101, 95,102, 97, 99,116,111,114, 0,114, 97,116,101, 0,114,103, 98, 91, 51, 93, 0,115, 99,117,108,112,116, + 95,112,108, 97,110,101, 0,112,108, 97,110,101, 95,111,102,102,115,101,116, 0,115, 99,117,108,112,116, 95,116,111,111,108, 0, +118,101,114,116,101,120,112, 97,105,110,116, 95,116,111,111,108, 0,105,109, 97,103,101,112, 97,105,110,116, 95,116,111,111,108, + 0,109, 97,115,107, 95,116,111,111,108, 0, 97,117,116,111,115,109,111,111,116,104, 95,102, 97, 99,116,111,114, 0, 99,114,101, + 97,115,101, 95,112,105,110, 99,104, 95,102, 97, 99,116,111,114, 0,112,108, 97,110,101, 95,116,114,105,109, 0,116,101,120,116, +117,114,101, 95,115, 97,109,112,108,101, 95, 98,105, 97,115, 0,116,101,120,116,117,114,101, 95,111,118,101,114,108, 97,121, 95, + 97,108,112,104, 97, 0, 97,100,100, 95, 99,111,108, 91, 51, 93, 0,115,117, 98, 95, 99,111,108, 91, 51, 93, 0, 97, 99,116,105, +118,101, 95,114,110,100, 0, 97, 99,116,105,118,101, 95, 99,108,111,110,101, 0, 97, 99,116,105,118,101, 95,109, 97,115,107, 0, + 42,108, 97,121,101,114,115, 0,116,121,112,101,109, 97,112, 91, 51, 55, 93, 0,116,111,116,108, 97,121,101,114, 0,109, 97,120, +108, 97,121,101,114, 0,116,111,116,115,105,122,101, 0, 42,112,111,111,108, 0, 42,101,120,116,101,114,110, 97,108, 0,114,111, +116, 91, 52, 93, 0, 97,118,101, 91, 51, 93, 0, 42,103,114,111,117,110,100, 0,119, 97,110,100,101,114, 91, 51, 93, 0,114,101, +115,116, 95,108,101,110,103,116,104, 0,112, 97,114,116,105, 99,108,101, 95,105,110,100,101,120, 91, 50, 93, 0,100,101,108,101, +116,101, 95,102,108, 97,103, 0,110,117,109, 0,112, 97,114,101,110,116, 0,112, 97, 91, 52, 93, 0,119, 91, 52, 93, 0,102,117, +118, 91, 52, 93, 0,102,111,102,102,115,101,116, 0,112,114,101,118, 95,115,116, 97,116,101, 0, 42,104, 97,105,114, 0, 42, 98, +111,105,100, 0,100,105,101,116,105,109,101, 0,110,117,109, 95,100,109, 99, 97, 99,104,101, 0,104, 97,105,114, 95,105,110,100, +101,120, 0, 97,108,105,118,101, 0,115,112,114,105,110,103, 95,107, 0,112,108, 97,115,116,105, 99,105,116,121, 95, 99,111,110, +115,116, 97,110,116, 0,121,105,101,108,100, 95,114, 97,116,105,111, 0,112,108, 97,115,116,105, 99,105,116,121, 95, 98, 97,108, + 97,110, 99,101, 0,121,105,101,108,100, 95, 98, 97,108, 97,110, 99,101, 0,118,105,115, 99,111,115,105,116,121, 95,111,109,101, +103, 97, 0,118,105,115, 99,111,115,105,116,121, 95, 98,101,116, 97, 0,115,116,105,102,102,110,101,115,115, 95,107, 0,115,116, +105,102,102,110,101,115,115, 95,107,110,101, 97,114, 0,114,101,115,116, 95,100,101,110,115,105,116,121, 0, 98,117,111,121, 97, +110, 99,121, 0,115,112,114,105,110,103, 95,102,114, 97,109,101,115, 0, 42, 98,111,105,100,115, 0, 42,102,108,117,105,100, 0, +100,105,115,116,114, 0,112,104,121,115,116,121,112,101, 0, 97,118,101,109,111,100,101, 0,114,101, 97, 99,116,101,118,101,110, +116, 0,100,114, 97,119, 0,100,114, 97,119, 95, 97,115, 0,100,114, 97,119, 95,115,105,122,101, 0, 99,104,105,108,100,116,121, +112,101, 0,114,101,110, 95, 97,115, 0,115,117, 98,102,114, 97,109,101,115, 0,100,114, 97,119, 95, 99,111,108, 0,114,101,110, + 95,115,116,101,112, 0,104, 97,105,114, 95,115,116,101,112, 0,107,101,121,115, 95,115,116,101,112, 0, 97,100, 97,112,116, 95, + 97,110,103,108,101, 0, 97,100, 97,112,116, 95,112,105,120, 0,114,111,116,102,114,111,109, 0,105,110,116,101,103,114, 97,116, +111,114, 0, 98, 98, 95, 97,108,105,103,110, 0, 98, 98, 95,117,118, 95,115,112,108,105,116, 0, 98, 98, 95, 97,110,105,109, 0, + 98, 98, 95,115,112,108,105,116, 95,111,102,102,115,101,116, 0, 98, 98, 95,116,105,108,116, 0, 98, 98, 95,114, 97,110,100, 95, +116,105,108,116, 0, 98, 98, 95,111,102,102,115,101,116, 91, 50, 93, 0, 98, 98, 95,115,105,122,101, 91, 50, 93, 0, 98, 98, 95, +118,101,108, 95,104,101, 97,100, 0, 98, 98, 95,118,101,108, 95,116, 97,105,108, 0, 99,111,108,111,114, 95,118,101, 99, 95,109, + 97,120, 0,115,105,109,112,108,105,102,121, 95,114,101,102,115,105,122,101, 0,115,105,109,112,108,105,102,121, 95,114, 97,116, +101, 0,115,105,109,112,108,105,102,121, 95,116,114, 97,110,115,105,116,105,111,110, 0,115,105,109,112,108,105,102,121, 95,118, +105,101,119,112,111,114,116, 0,116,105,109,101,116,119,101, 97,107, 0, 99,111,117,114, 97,110,116, 95,116, 97,114,103,101,116, + 0,106,105,116,102, 97, 99, 0,101,102,102, 95,104, 97,105,114, 0,103,114,105,100, 95,114, 97,110,100, 0,112,115, 95,111,102, +102,115,101,116, 91, 49, 93, 0,103,114,105,100, 95,114,101,115, 0,101,102,102,101, 99,116,111,114, 95, 97,109,111,117,110,116, + 0,116,105,109,101, 95,102,108, 97,103, 0,116,105,109,101, 95,112, 97,100, 91, 51, 93, 0,112, 97,114,116,102, 97, 99, 0,116, + 97,110,102, 97, 99, 0,116, 97,110,112,104, 97,115,101, 0,114,101, 97, 99,116,102, 97, 99, 0,111, 98, 95,118,101,108, 91, 51, + 93, 0, 97,118,101,102, 97, 99, 0,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,114,111,116,102, 97, 99, 0,114, 97,110, +100,112,104, 97,115,101,102, 97, 99, 0,114, 97,110,100,115,105,122,101, 0, 97, 99, 99, 91, 51, 93, 0,100,114, 97,103,102, 97, + 99, 0, 98,114,111,119,110,102, 97, 99, 0,114, 97,110,100,108,101,110,103,116,104, 0, 99,104,105,108,100, 95,110, 98,114, 0, +114,101,110, 95, 99,104,105,108,100, 95,110, 98,114, 0,112, 97,114,101,110,116,115, 0, 99,104,105,108,100,115,105,122,101, 0, + 99,104,105,108,100,114, 97,110,100,115,105,122,101, 0, 99,104,105,108,100,114, 97,100, 0, 99,104,105,108,100,102,108, 97,116, + 0, 99,108,117,109,112,112,111,119, 0,107,105,110,107, 95,102,108, 97,116, 0,107,105,110,107, 95, 97,109,112, 95, 99,108,117, +109,112, 0,114,111,117,103,104, 49, 0,114,111,117,103,104, 49, 95,115,105,122,101, 0,114,111,117,103,104, 50, 0,114,111,117, +103,104, 50, 95,115,105,122,101, 0,114,111,117,103,104, 50, 95,116,104,114,101,115, 0,114,111,117,103,104, 95,101,110,100, 0, +114,111,117,103,104, 95,101,110,100, 95,115,104, 97,112,101, 0, 99,108,101,110,103,116,104, 0, 99,108,101,110,103,116,104, 95, +116,104,114,101,115, 0,112, 97,114,116,105,110,103, 95,102, 97, 99, 0,112, 97,114,116,105,110,103, 95,109,105,110, 0,112, 97, +114,116,105,110,103, 95,109, 97,120, 0, 98,114, 97,110, 99,104, 95,116,104,114,101,115, 0,100,114, 97,119, 95,108,105,110,101, + 91, 50, 93, 0,112, 97,116,104, 95,115,116, 97,114,116, 0,112, 97,116,104, 95,101,110,100, 0,116,114, 97,105,108, 95, 99,111, +117,110,116, 0,107,101,121,101,100, 95,108,111,111,112,115, 0,100,117,112,108,105,119,101,105,103,104,116,115, 0, 42,101,102, +102, 95,103,114,111,117,112, 0, 42,100,117,112, 95,111, 98, 0, 42, 98, 98, 95,111, 98, 0, 42,112,100, 50, 0, 42,112, 97,114, +116, 0, 42,112, 97,114,116,105, 99,108,101,115, 0, 42, 42,112, 97,116,104, 99, 97, 99,104,101, 0, 42, 42, 99,104,105,108,100, + 99, 97, 99,104,101, 0,112, 97,116,104, 99, 97, 99,104,101, 98,117,102,115, 0, 99,104,105,108,100, 99, 97, 99,104,101, 98,117, +102,115, 0, 42, 99,108,109,100, 0, 42,104, 97,105,114, 95,105,110, 95,100,109, 0, 42,104, 97,105,114, 95,111,117,116, 95,100, +109, 0, 42,116, 97,114,103,101,116, 95,111, 98, 0, 42,108, 97,116,116,105, 99,101, 0,116,114,101,101, 95,102,114, 97,109,101, + 0, 98,118,104,116,114,101,101, 95,102,114, 97,109,101, 0, 99,104,105,108,100, 95,115,101,101,100, 0,116,111,116,117,110,101, +120,105,115,116, 0,116,111,116, 99,104,105,108,100, 0,116,111,116, 99, 97, 99,104,101,100, 0,116,111,116, 99,104,105,108,100, + 99, 97, 99,104,101, 0,116, 97,114,103,101,116, 95,112,115,121,115, 0,116,111,116,107,101,121,101,100, 0, 98, 97,107,101,115, +112, 97, 99,101, 0, 98, 98, 95,117,118,110, 97,109,101, 91, 51, 93, 91, 54, 52, 93, 0,118,103,114,111,117,112, 91, 49, 50, 93, + 0,118,103, 95,110,101,103, 0,114,116, 51, 0, 42,114,101,110,100,101,114,100, 97,116, 97, 0, 42,101,102,102,101, 99,116,111, +114,115, 0, 42,102,108,117,105,100, 95,115,112,114,105,110,103,115, 0,116,111,116, 95,102,108,117,105,100,115,112,114,105,110, +103,115, 0, 97,108,108,111, 99, 95,102,108,117,105,100,115,112,114,105,110,103,115, 0, 42,116,114,101,101, 0, 42,112,100,100, + 0, 42,102,114, 97,110,100, 0,100,116, 95,102,114, 97, 99, 0, 95,112, 97,100, 0, 67,100,105,115, 0, 67,118,105, 0,115,116, +114,117, 99,116,117,114, 97,108, 0, 98,101,110,100,105,110,103, 0,109, 97,120, 95, 98,101,110,100, 0,109, 97,120, 95,115,116, +114,117, 99,116, 0,109, 97,120, 95,115,104,101, 97,114, 0, 97,118,103, 95,115,112,114,105,110,103, 95,108,101,110, 0,116,105, +109,101,115, 99, 97,108,101, 0,101,102,102, 95,102,111,114, 99,101, 95,115, 99, 97,108,101, 0,101,102,102, 95,119,105,110,100, + 95,115, 99, 97,108,101, 0,115,105,109, 95,116,105,109,101, 95,111,108,100, 0,118,101,108,111, 99,105,116,121, 95,115,109,111, +111,116,104, 0, 99,111,108,108,105,100,101,114, 95,102,114,105, 99,116,105,111,110, 0,118,101,108, 95,100, 97,109,112,105,110, +103, 0,115,116,101,112,115, 80,101,114, 70,114, 97,109,101, 0,112,114,101,114,111,108,108, 0,109, 97,120,115,112,114,105,110, +103,108,101,110, 0,115,111,108,118,101,114, 95,116,121,112,101, 0,118,103,114,111,117,112, 95, 98,101,110,100, 0,118,103,114, +111,117,112, 95,109, 97,115,115, 0,118,103,114,111,117,112, 95,115,116,114,117, 99,116, 0,115,104, 97,112,101,107,101,121, 95, +114,101,115,116, 0,112,114,101,115,101,116,115, 0,114,101,115,101,116, 0, 42, 99,111,108,108,105,115,105,111,110, 95,108,105, +115,116, 0,101,112,115,105,108,111,110, 0,115,101,108,102, 95,102,114,105, 99,116,105,111,110, 0,115,101,108,102,101,112,115, +105,108,111,110, 0,114,101,112,101,108, 95,102,111,114, 99,101, 0,100,105,115,116, 97,110, 99,101, 95,114,101,112,101,108, 0, +115,101,108,102, 95,108,111,111,112, 95, 99,111,117,110,116, 0,108,111,111,112, 95, 99,111,117,110,116, 0,112,114,101,115,115, +117,114,101, 0,116,104,105, 99,107,110,101,115,115, 0,115,116,114,111,107,101,115, 0,102,114, 97,109,101,110,117,109, 0, 42, + 97, 99,116,102,114, 97,109,101, 0,103,115,116,101,112, 0,105,110,102,111, 91, 49, 50, 56, 93, 0,115, 98,117,102,102,101,114, + 95,115,105,122,101, 0,115, 98,117,102,102,101,114, 95,115,102,108, 97,103, 0, 42,115, 98,117,102,102,101,114, 0,108,105,115, +116, 0,112,114,105,110,116,108,101,118,101,108, 0,115,116,111,114,101,108,101,118,101,108, 0, 42,114,101,112,111,114,116,116, +105,109,101,114, 0, 42,119,105,110,100,114, 97,119, 97, 98,108,101, 0, 42,119,105,110, 97, 99,116,105,118,101, 0,119,105,110, +100,111,119,115, 0,105,110,105,116,105, 97,108,105,122,101,100, 0,102,105,108,101, 95,115, 97,118,101,100, 0,111,112, 95,117, +110,100,111, 95,100,101,112,116,104, 0,111,112,101,114, 97,116,111,114,115, 0,113,117,101,117,101, 0,114,101,112,111,114,116, +115, 0,106,111, 98,115, 0,112, 97,105,110,116, 99,117,114,115,111,114,115, 0,100,114, 97,103,115, 0,107,101,121, 99,111,110, +102,105,103,115, 0, 42,100,101,102, 97,117,108,116, 99,111,110,102, 0, 42, 97,100,100,111,110, 99,111,110,102, 0, 42,117,115, +101,114, 99,111,110,102, 0,116,105,109,101,114,115, 0, 42, 97,117,116,111,115, 97,118,101,116,105,109,101,114, 0, 42,103,104, +111,115,116,119,105,110, 0,103,114, 97, 98, 99,117,114,115,111,114, 0, 42,115, 99,114,101,101,110, 0, 42,110,101,119,115, 99, +114,101,101,110, 0,115, 99,114,101,101,110,110, 97,109,101, 91, 54, 52, 93, 0,112,111,115,120, 0,112,111,115,121, 0,119,105, +110,100,111,119,115,116, 97,116,101, 0,109,111,110,105,116,111,114, 0,108, 97,115,116, 99,117,114,115,111,114, 0,109,111,100, + 97,108, 99,117,114,115,111,114, 0, 97,100,100,109,111,117,115,101,109,111,118,101, 0, 42,101,118,101,110,116,115,116, 97,116, +101, 0, 42, 99,117,114,115,119,105,110, 0, 42,116,119,101, 97,107, 0,100,114, 97,119,109,101,116,104,111,100, 0,100,114, 97, +119,102, 97,105,108, 0, 42,100,114, 97,119,100, 97,116, 97, 0,109,111,100, 97,108,104, 97,110,100,108,101,114,115, 0,115,117, + 98,119,105,110,100,111,119,115, 0,103,101,115,116,117,114,101, 0,105,100,110, 97,109,101, 91, 54, 52, 93, 0,112,114,111,112, +118, 97,108,117,101, 95,115,116,114, 91, 54, 52, 93, 0,112,114,111,112,118, 97,108,117,101, 0,115,104,105,102,116, 0, 99,116, +114,108, 0, 97,108,116, 0,111,115,107,101,121, 0,107,101,121,109,111,100,105,102,105,101,114, 0,109, 97,112,116,121,112,101, + 0, 42,112,116,114, 0, 42,114,101,109,111,118,101, 95,105,116,101,109, 0, 42, 97,100,100, 95,105,116,101,109, 0,105,116,101, +109,115, 0,100,105,102,102, 95,105,116,101,109,115, 0,115,112, 97, 99,101,105,100, 0,114,101,103,105,111,110,105,100, 0,107, +109,105, 95,105,100, 0, 40, 42,112,111,108,108, 41, 40, 41, 0, 42,109,111,100, 97,108, 95,105,116,101,109,115, 0, 98, 97,115, +101,110, 97,109,101, 91, 54, 52, 93, 0, 97, 99,116,107,101,121,109, 97,112, 0, 42, 99,117,115,116,111,109,100, 97,116, 97, 0, + 42,112,121, 95,105,110,115,116, 97,110, 99,101, 0, 42,114,101,112,111,114,116,115, 0,109, 97, 99,114,111, 0, 42,111,112,109, + 0, 42,101,100, 97,116, 97, 0, 42, 99,111,101,102,102,105, 99,105,101,110,116,115, 0, 97,114,114, 97,121,115,105,122,101, 0, +112,111,108,121, 95,111,114,100,101,114, 0, 97,109,112,108,105,116,117,100,101, 0,112,104, 97,115,101, 95,109,117,108,116,105, +112,108,105,101,114, 0,112,104, 97,115,101, 95,111,102,102,115,101,116, 0,118, 97,108,117,101, 95,111,102,102,115,101,116, 0, +109,105,100,118, 97,108, 0, 98,101,102,111,114,101, 95,109,111,100,101, 0, 97,102,116,101,114, 95,109,111,100,101, 0, 98,101, +102,111,114,101, 95, 99,121, 99,108,101,115, 0, 97,102,116,101,114, 95, 99,121, 99,108,101,115, 0,114,101, 99,116, 0,112,104, + 97,115,101, 0,109,111,100,105,102,105, 99, 97,116,105,111,110, 0,115,116,101,112, 95,115,105,122,101, 0, 42,114,110, 97, 95, +112, 97,116,104, 0,112, 99,104, 97,110, 95,110, 97,109,101, 91, 51, 50, 93, 0,116,114, 97,110,115, 67,104, 97,110, 0,105,100, +116,121,112,101, 0,116, 97,114,103,101,116,115, 91, 56, 93, 0,110,117,109, 95,116, 97,114,103,101,116,115, 0,118, 97,114,105, + 97, 98,108,101,115, 0,101,120,112,114,101,115,115,105,111,110, 91, 50, 53, 54, 93, 0, 42,101,120,112,114, 95, 99,111,109,112, + 0,118,101, 99, 91, 50, 93, 0, 42,102,112,116, 0, 97,114,114, 97,121, 95,105,110,100,101,120, 0, 99,111,108,111,114, 95,109, +111,100,101, 0,102,114,111,109, 91, 49, 50, 56, 93, 0,116,111, 91, 49, 50, 56, 93, 0,109, 97,112,112,105,110,103,115, 0,115, +116,114,105,112,115, 0, 42,114,101,109, 97,112, 0,102, 99,117,114,118,101,115, 0,115,116,114,105,112, 95,116,105,109,101, 0, + 98,108,101,110,100,109,111,100,101, 0,101,120,116,101,110,100,109,111,100,101, 0, 42,115,112,101, 97,107,101,114, 95,104, 97, +110,100,108,101, 0,103,114,111,117,112, 91, 54, 52, 93, 0,103,114,111,117,112,109,111,100,101, 0,107,101,121,105,110,103,102, +108, 97,103, 0,112, 97,116,104,115, 0,100,101,115, 99,114,105,112,116,105,111,110, 91, 50, 52, 48, 93, 0,116,121,112,101,105, +110,102,111, 91, 54, 52, 93, 0, 97, 99,116,105,118,101, 95,112, 97,116,104, 0, 42,116,109,112, 97, 99,116, 0,110,108, 97, 95, +116,114, 97, 99,107,115, 0, 42, 97, 99,116,115,116,114,105,112, 0,100,114,105,118,101,114,115, 0,111,118,101,114,114,105,100, +101,115, 0, 97, 99,116, 95, 98,108,101,110,100,109,111,100,101, 0, 97, 99,116, 95,101,120,116,101,110,100,109,111,100,101, 0, + 97, 99,116, 95,105,110,102,108,117,101,110, 99,101, 0,114,117,108,101, 0,111,112,116,105,111,110,115, 0,102,101, 97,114, 95, +102, 97, 99,116,111,114, 0,115,105,103,110, 97,108, 95,105,100, 0,108,111,111,107, 95, 97,104,101, 97,100, 0,111,108,111, 99, + 91, 51, 93, 0,113,117,101,117,101, 95,115,105,122,101, 0,119, 97,110,100,101,114, 0,102,108,101,101, 95,100,105,115,116, 97, +110, 99,101, 0,104,101, 97,108,116,104, 0,115,116, 97,116,101, 95,105,100, 0,114,117,108,101,115, 0, 99,111,110,100,105,116, +105,111,110,115, 0, 97, 99,116,105,111,110,115, 0,114,117,108,101,115,101,116, 95,116,121,112,101, 0,114,117,108,101, 95,102, +117,122,122,105,110,101,115,115, 0,108, 97,115,116, 95,115,116, 97,116,101, 95,105,100, 0,108, 97,110,100,105,110,103, 95,115, +109,111,111,116,104,110,101,115,115, 0, 98, 97,110,107,105,110,103, 0, 97,103,103,114,101,115,115,105,111,110, 0, 97,105,114, + 95,109,105,110, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, 95,115,112,101,101,100, 0, 97,105,114, 95,109, 97,120, + 95, 97, 99, 99, 0, 97,105,114, 95,109, 97,120, 95, 97,118,101, 0, 97,105,114, 95,112,101,114,115,111,110, 97,108, 95,115,112, + 97, 99,101, 0,108, 97,110,100, 95,106,117,109,112, 95,115,112,101,101,100, 0,108, 97,110,100, 95,109, 97,120, 95,115,112,101, +101,100, 0,108, 97,110,100, 95,109, 97,120, 95, 97, 99, 99, 0,108, 97,110,100, 95,109, 97,120, 95, 97,118,101, 0,108, 97,110, +100, 95,112,101,114,115,111,110, 97,108, 95,115,112, 97, 99,101, 0,108, 97,110,100, 95,115,116,105, 99,107, 95,102,111,114, 99, +101, 0,115,116, 97,116,101,115, 0, 42,115,109,100, 0, 42,102,108,117,105,100, 95,103,114,111,117,112, 0, 42, 99,111,108,108, + 95,103,114,111,117,112, 0, 42,119,116, 0, 42,116,101,120, 95,119,116, 0, 42,116,101,120, 95,115,104, 97,100,111,119, 0, 42, +115,104, 97,100,111,119, 0,112, 48, 91, 51, 93, 0,112, 49, 91, 51, 93, 0,100,120, 0,111,109,101,103, 97, 0,116,101,109,112, + 65,109, 98, 0, 98,101,116, 97, 0,114,101,115, 91, 51, 93, 0, 97,109,112,108,105,102,121, 0,109, 97,120,114,101,115, 0,118, +105,101,119,115,101,116,116,105,110,103,115, 0,110,111,105,115,101, 0,100,105,115,115, 95,112,101,114, 99,101,110,116, 0,100, +105,115,115, 95,115,112,101,101,100, 0,114,101,115, 95,119,116, 91, 51, 93, 0,100,120, 95,119,116, 0,118, 51,100,110,117,109, + 0, 99, 97, 99,104,101, 95, 99,111,109,112, 0, 99, 97, 99,104,101, 95,104,105,103,104, 95, 99,111,109,112, 0, 42,112,111,105, +110,116, 95, 99, 97, 99,104,101, 91, 50, 93, 0,112,116, 99, 97, 99,104,101,115, 91, 50, 93, 0, 98,111,114,100,101,114, 95, 99, +111,108,108,105,115,105,111,110,115, 0,116,105,109,101, 95,115, 99, 97,108,101, 0,118,111,114,116,105, 99,105,116,121, 0,118, +101,108,111, 99,105,116,121, 91, 50, 93, 0,118,101,108, 95,109,117,108,116,105, 0,118,103,114,112, 95,104,101, 97,116, 95,115, + 99, 97,108,101, 91, 50, 93, 0,118,103,114,111,117,112, 95,102,108,111,119, 0,118,103,114,111,117,112, 95,100,101,110,115,105, +116,121, 0,118,103,114,111,117,112, 95,104,101, 97,116, 0, 42,112,111,105,110,116,115, 95,111,108,100, 0, 42,118,101,108, 0, + 42,116,114,105,100,105,118,115, 0,109, 97,116, 95,111,108,100, 91, 52, 93, 91, 52, 93, 0,110,117,109,116,114,105,115, 0,118, +111,108,117,109,101, 95,109, 97,120, 0,118,111,108,117,109,101, 95,109,105,110, 0,100,105,115,116, 97,110, 99,101, 95,109, 97, +120, 0,100,105,115,116, 97,110, 99,101, 95,114,101,102,101,114,101,110, 99,101, 0, 99,111,110,101, 95, 97,110,103,108,101, 95, +111,117,116,101,114, 0, 99,111,110,101, 95, 97,110,103,108,101, 95,105,110,110,101,114, 0, 99,111,110,101, 95,118,111,108,117, +109,101, 95,111,117,116,101,114, 0,114,101,110,100,101,114, 95,102,108, 97,103, 0, 98,117,105,108,100, 95,115,105,122,101, 95, +102,108, 97,103, 0, 98,117,105,108,100, 95,116, 99, 95,102,108, 97,103, 0,108, 97,115,116,115,105,122,101, 91, 50, 93, 0,116, +114, 97, 99,107,105,110,103, 0, 42,116,114, 97, 99,107,105,110,103, 95, 99,111,110,116,101,120,116, 0,112,114,111,120,121, 0, +116,114, 97, 99,107, 95,112,114,101,118,105,101,119, 95,104,101,105,103,104,116, 0, 42,116,114, 97, 99,107, 95,112,114,101,118, +105,101,119, 0,116,114, 97, 99,107, 95,112,111,115, 91, 50, 93, 0,116,114, 97, 99,107, 95,100,105,115, 97, 98,108,101,100, 0, + 42,109, 97,114,107,101,114, 0,115,108,105,100,101, 95,115, 99, 97,108,101, 91, 50, 93, 0,101,114,114,111,114, 0, 42,105,110, +116,114,105,110,115,105, 99,115, 0,115,101,110,115,111,114, 95,119,105,100,116,104, 0,112,105,120,101,108, 95, 97,115,112,101, + 99,116, 0,102,111, 99, 97,108, 0,117,110,105,116,115, 0,112,114,105,110, 99,105,112, 97,108, 91, 50, 93, 0,107, 49, 0,107, + 50, 0,107, 51, 0,112,111,115, 91, 50, 93, 0,112, 97,116, 95,109,105,110, 91, 50, 93, 0,112, 97,116, 95,109, 97,120, 91, 50, + 93, 0,115,101, 97,114, 99,104, 95,109,105,110, 91, 50, 93, 0,115,101, 97,114, 99,104, 95,109, 97,120, 91, 50, 93, 0,109, 97, +114,107,101,114,115,110,114, 0,108, 97,115,116, 95,109, 97,114,107,101,114, 0, 42,109, 97,114,107,101,114,115, 0, 98,117,110, +100,108,101, 95,112,111,115, 91, 51, 93, 0,112, 97,116, 95,102,108, 97,103, 0,115,101, 97,114, 99,104, 95,102,108, 97,103, 0, +102,114, 97,109,101,115, 95,108,105,109,105,116, 0,112, 97,116,116,101,114,110, 95,109, 97,116, 99,104, 0,116,114, 97, 99,107, +101,114, 0,112,121,114, 97,109,105,100, 95,108,101,118,101,108,115, 0,109,105,110,105,109,117,109, 95, 99,111,114,114,101,108, + 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,116,114, 97, 99,107,101,114, 0,100,101,102, 97,117,108,116, 95,112,121, +114, 97,109,105,100, 95,108,101,118,101,108,115, 0,100,101,102, 97,117,108,116, 95,109,105,110,105,109,117,109, 95, 99,111,114, +114,101,108, 97,116,105,111,110, 0,100,101,102, 97,117,108,116, 95,112, 97,116,116,101,114,110, 95,115,105,122,101, 0,100,101, +102, 97,117,108,116, 95,115,101, 97,114, 99,104, 95,115,105,122,101, 0,100,101,102, 97,117,108,116, 95,102,114, 97,109,101,115, + 95,108,105,109,105,116, 0,100,101,102, 97,117,108,116, 95,109, 97,114,103,105,110, 0,100,101,102, 97,117,108,116, 95,112, 97, +116,116,101,114,110, 95,109, 97,116, 99,104, 0,100,101,102, 97,117,108,116, 95,102,108, 97,103, 0,109,111,116,105,111,110, 95, +102,108, 97,103, 0,107,101,121,102,114, 97,109,101, 49, 0,107,101,121,102,114, 97,109,101, 50, 0,114,101,102,105,110,101, 95, + 99, 97,109,101,114, 97, 95,105,110,116,114,105,110,115,105, 99,115, 0, 99,108,101, 97,110, 95,102,114, 97,109,101,115, 0, 99, +108,101, 97,110, 95, 97, 99,116,105,111,110, 0, 99,108,101, 97,110, 95,101,114,114,111,114, 0,111, 98,106,101, 99,116, 95,100, +105,115,116, 97,110, 99,101, 0,116,111,116, 95,116,114, 97, 99,107, 0, 97, 99,116, 95,116,114, 97, 99,107, 0,109, 97,120,115, + 99, 97,108,101, 0, 42,114,111,116, 95,116,114, 97, 99,107, 0,108,111, 99,105,110,102, 0,115, 99, 97,108,101,105,110,102, 0, +114,111,116,105,110,102, 0, 42,115, 99, 97,108,101,105, 98,117,102, 0,108, 97,115,116, 95, 99, 97,109,101,114, 97, 0, 99, 97, +109,110,114, 0, 42, 99, 97,109,101,114, 97,115, 0,116,114, 97, 99,107,115, 0,114,101, 99,111,110,115,116,114,117, 99,116,105, +111,110, 0,109,101,115,115, 97,103,101, 91, 50, 53, 54, 93, 0,116,111,116, 95,115,101,103,109,101,110,116, 0, 42,115,101,103, +109,101,110,116,115, 0,109, 97,120, 95,115,101,103,109,101,110,116, 0,116,111,116, 97,108, 95,102,114, 97,109,101,115, 0,116, +111,116, 95, 99,104, 97,110,110,101,108, 0,115,111,114,116, 95,109,101,116,104,111,100, 0,115,111,114,116, 95,105,110,118,101, +114,115,101, 0,115,101,116,116,105,110,103,115, 0, 99, 97,109,101,114, 97, 0,115,116, 97, 98,105,108,105,122, 97,116,105,111, +110, 0, 42, 97, 99,116, 95,116,114, 97, 99,107, 0,111, 98,106,101, 99,116,115, 0,111, 98,106,101, 99,116,110,114, 0,116,111, +116, 95,111, 98,106,101, 99,116, 0,100,111,112,101,115,104,101,101,116, 0, 42, 98,114,117,115,104, 95,103,114,111,117,112, 0, + 99,117,114,114,101,110,116, 95,102,114, 97,109,101, 0,100,105,115,112, 95,116,121,112,101, 0,105,109, 97,103,101, 95,102,105, +108,101,102,111,114,109, 97,116, 0,101,102,102,101, 99,116, 95,117,105, 0,112,114,101,118,105,101,119, 95,105,100, 0,105,110, +105,116, 95, 99,111,108,111,114, 95,116,121,112,101, 0,112, 97,100, 95,115, 0,105,109, 97,103,101, 95,114,101,115,111,108,117, +116,105,111,110, 0,115,117, 98,115,116,101,112,115, 0,105,110,105,116, 95, 99,111,108,111,114, 91, 52, 93, 0, 42,105,110,105, +116, 95,116,101,120,116,117,114,101, 0,105,110,105,116, 95,108, 97,121,101,114,110, 97,109,101, 91, 54, 52, 93, 0,100,114,121, + 95,115,112,101,101,100, 0, 99,111,108,111,114, 95,100,114,121, 95,116,104,114,101,115,104,111,108,100, 0,100,101,112,116,104, + 95, 99,108, 97,109,112, 0,100,105,115,112, 95,102, 97, 99,116,111,114, 0,115,112,114,101, 97,100, 95,115,112,101,101,100, 0, + 99,111,108,111,114, 95,115,112,114,101, 97,100, 95,115,112,101,101,100, 0,115,104,114,105,110,107, 95,115,112,101,101,100, 0, +100,114,105,112, 95,118,101,108, 0,100,114,105,112, 95, 97, 99, 99, 0,105,110,102,108,117,101,110, 99,101, 95,115, 99, 97,108, +101, 0,114, 97,100,105,117,115, 95,115, 99, 97,108,101, 0,119, 97,118,101, 95,100, 97,109,112,105,110,103, 0,119, 97,118,101, + 95,115,112,101,101,100, 0,119, 97,118,101, 95,116,105,109,101,115, 99, 97,108,101, 0,119, 97,118,101, 95,115,112,114,105,110, +103, 0,105,109, 97,103,101, 95,111,117,116,112,117,116, 95,112, 97,116,104, 91, 49, 48, 50, 52, 93, 0,111,117,116,112,117,116, + 95,110, 97,109,101, 91, 54, 52, 93, 0,111,117,116,112,117,116, 95,110, 97,109,101, 50, 91, 54, 52, 93, 0, 42,112,109,100, 0, +115,117,114,102, 97, 99,101,115, 0, 97, 99,116,105,118,101, 95,115,117,114, 0,101,114,114,111,114, 91, 54, 52, 93, 0, 99,111, +108,108,105,115,105,111,110, 0,119,101,116,110,101,115,115, 0,112, 97,114,116,105, 99,108,101, 95,114, 97,100,105,117,115, 0, +112, 97,114,116,105, 99,108,101, 95,115,109,111,111,116,104, 0,112, 97,105,110,116, 95,100,105,115,116, 97,110, 99,101, 0, 42, +112, 97,105,110,116, 95,114, 97,109,112, 0, 42,118,101,108, 95,114, 97,109,112, 0,112,114,111,120,105,109,105,116,121, 95,102, + 97,108,108,111,102,102, 0,114, 97,121, 95,100,105,114, 0,119, 97,118,101, 95,102, 97, 99,116,111,114, 0,119, 97,118,101, 95, + 99,108, 97,109,112, 0,109, 97,120, 95,118,101,108,111, 99,105,116,121, 0,115,109,117,100,103,101, 95,115,116,114,101,110,103, +116,104, 0, 0, 84, 89, 80, 69, 26, 2, 0, 0, 99,104, 97,114, 0,117, 99,104, 97,114, 0,115,104,111,114,116, 0,117,115,104, +111,114,116, 0,105,110,116, 0,108,111,110,103, 0,117,108,111,110,103, 0,102,108,111, 97,116, 0,100,111,117, 98,108,101, 0, +105,110,116, 54, 52, 95,116, 0,117,105,110,116, 54, 52, 95,116, 0,118,111,105,100, 0, 76,105,110,107, 0, 76,105,110,107, 68, + 97,116, 97, 0, 76,105,115,116, 66, 97,115,101, 0,118,101, 99, 50,115, 0,118,101, 99, 50,102, 0,118,101, 99, 51,102, 0,114, + 99,116,105, 0,114, 99,116,102, 0, 73, 68, 80,114,111,112,101,114,116,121, 68, 97,116, 97, 0, 73, 68, 80,114,111,112,101,114, +116,121, 0, 73, 68, 0, 76,105, 98,114, 97,114,121, 0, 70,105,108,101, 68, 97,116, 97, 0, 80,114,101,118,105,101,119, 73,109, + 97,103,101, 0, 73,112,111, 68,114,105,118,101,114, 0, 79, 98,106,101, 99,116, 0, 73,112,111, 67,117,114,118,101, 0, 66, 80, +111,105,110,116, 0, 66,101,122, 84,114,105,112,108,101, 0, 73,112,111, 0, 75,101,121, 66,108,111, 99,107, 0, 75,101,121, 0, + 65,110,105,109, 68, 97,116, 97, 0, 84,101,120,116, 76,105,110,101, 0, 84,101,120,116, 77, 97,114,107,101,114, 0, 84,101,120, +116, 0, 80, 97, 99,107,101,100, 70,105,108,101, 0, 67, 97,109,101,114, 97, 0, 73,109, 97,103,101, 85,115,101,114, 0, 83, 99, +101,110,101, 0, 73,109, 97,103,101, 0, 71, 80, 85, 84,101,120,116,117,114,101, 0, 97,110,105,109, 0, 82,101,110,100,101,114, + 82,101,115,117,108,116, 0, 77, 84,101,120, 0, 84,101,120, 0, 67, 66, 68, 97,116, 97, 0, 67,111,108,111,114, 66, 97,110,100, + 0, 69,110,118, 77, 97,112, 0, 73,109, 66,117,102, 0, 80,111,105,110,116, 68,101,110,115,105,116,121, 0, 67,117,114,118,101, + 77, 97,112,112,105,110,103, 0, 86,111,120,101,108, 68, 97,116, 97, 0, 79, 99,101, 97,110, 84,101,120, 0, 98, 78,111,100,101, + 84,114,101,101, 0, 84,101,120, 77, 97,112,112,105,110,103, 0, 67,111,108,111,114, 77, 97,112,112,105,110,103, 0, 76, 97,109, +112, 0, 86,111,108,117,109,101, 83,101,116,116,105,110,103,115, 0, 71, 97,109,101, 83,101,116,116,105,110,103,115, 0, 77, 97, +116,101,114,105, 97,108, 0, 71,114,111,117,112, 0, 86, 70,111,110,116, 0, 86, 70,111,110,116, 68, 97,116, 97, 0, 77,101,116, + 97, 69,108,101,109, 0, 66,111,117,110,100, 66,111,120, 0, 77,101,116, 97, 66, 97,108,108, 0, 78,117,114, 98, 0, 67,104, 97, +114, 73,110,102,111, 0, 84,101,120,116, 66,111,120, 0, 69,100,105,116, 78,117,114, 98, 0, 71, 72, 97,115,104, 0, 67,117,114, +118,101, 0, 80, 97,116,104, 0, 83,101,108, 66,111,120, 0, 69,100,105,116, 70,111,110,116, 0, 77,101,115,104, 0, 77, 83,101, +108,101, 99,116, 0, 77, 80,111,108,121, 0, 77, 84,101,120, 80,111,108,121, 0, 77, 76,111,111,112, 0, 77, 76,111,111,112, 85, + 86, 0, 77, 76,111,111,112, 67,111,108, 0, 77, 70, 97, 99,101, 0, 77, 84, 70, 97, 99,101, 0, 84, 70, 97, 99,101, 0, 77, 86, +101,114,116, 0, 77, 69,100,103,101, 0, 77, 68,101,102,111,114,109, 86,101,114,116, 0, 77, 67,111,108, 0, 77, 83,116,105, 99, +107,121, 0, 66, 77, 69,100,105,116, 77,101,115,104, 0, 67,117,115,116,111,109, 68, 97,116, 97, 0, 77,117,108,116,105,114,101, +115, 0, 77, 68,101,102,111,114,109, 87,101,105,103,104,116, 0, 77, 70,108,111, 97,116, 80,114,111,112,101,114,116,121, 0, 77, + 73,110,116, 80,114,111,112,101,114,116,121, 0, 77, 83,116,114,105,110,103, 80,114,111,112,101,114,116,121, 0, 79,114,105,103, + 83,112, 97, 99,101, 70, 97, 99,101, 0, 79,114,105,103, 83,112, 97, 99,101, 76,111,111,112, 0, 77, 68,105,115,112,115, 0, 77, +117,108,116,105,114,101,115, 67,111,108, 0, 77,117,108,116,105,114,101,115, 67,111,108, 70, 97, 99,101, 0, 77,117,108,116,105, +114,101,115, 70, 97, 99,101, 0, 77,117,108,116,105,114,101,115, 69,100,103,101, 0, 77,117,108,116,105,114,101,115, 76,101,118, +101,108, 0, 77, 82,101, 99, 97,115,116, 0, 71,114,105,100, 80, 97,105,110,116, 77, 97,115,107, 0, 77, 86,101,114,116, 83,107, +105,110, 0, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,112,112,105,110,103, 73,110,102,111, 77,111,100,105,102, +105,101,114, 68, 97,116, 97, 0, 83,117, 98,115,117,114,102, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 76, 97,116,116, +105, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,117,114,118,101, 77,111,100,105,102,105,101,114, 68, 97,116, + 97, 0, 66,117,105,108,100, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77, 97,115,107, 77,111,100,105,102,105,101,114, + 68, 97,116, 97, 0, 65,114,114, 97,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,105,114,114,111,114, 77,111,100, +105,102,105,101,114, 68, 97,116, 97, 0, 69,100,103,101, 83,112,108,105,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, + 66,101,118,101,108, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 77,101,115,104, 77,111,100,105,102,105,101,114, 68, + 97,116, 97, 0, 83,109,111,107,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,107,101, 68,111,109, 97,105, +110, 83,101,116,116,105,110,103,115, 0, 83,109,111,107,101, 70,108,111,119, 83,101,116,116,105,110,103,115, 0, 83,109,111,107, +101, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 68,105,115,112,108, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97, +116, 97, 0, 85, 86, 80,114,111,106,101, 99,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101, 99,105,109, 97,116, +101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,109,111,111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, + 0, 67, 97,115,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87, 97,118,101, 77,111,100,105,102,105,101,114, 68, 97, +116, 97, 0, 65,114,109, 97,116,117,114,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 72,111,111,107, 77,111,100,105, +102,105,101,114, 68, 97,116, 97, 0, 83,111,102,116, 98,111,100,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108, +111,116,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 67,108,111,116,104, 0, 67,108,111,116,104, 83,105,109, 83,101, +116,116,105,110,103,115, 0, 67,108,111,116,104, 67,111,108,108, 83,101,116,116,105,110,103,115, 0, 80,111,105,110,116, 67, 97, + 99,104,101, 0, 67,111,108,108,105,115,105,111,110, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 66, 86, 72, 84,114,101, +101, 0, 83,117,114,102, 97, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,101,114,105,118,101,100, 77,101,115, +104, 0, 66, 86, 72, 84,114,101,101, 70,114,111,109, 77,101,115,104, 0, 66,111,111,108,101, 97,110, 77,111,100,105,102,105,101, +114, 68, 97,116, 97, 0, 77, 68,101,102, 73,110,102,108,117,101,110, 99,101, 0, 77, 68,101,102, 67,101,108,108, 0, 77,101,115, +104, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116, +101,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,121,115,116,101,109, 0, 80, 97, +114,116,105, 99,108,101, 73,110,115,116, 97,110, 99,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 69,120,112,108,111, +100,101, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 77,117,108,116,105,114,101,115, 77,111,100,105,102,105,101,114, 68, + 97,116, 97, 0, 70,108,117,105,100,115,105,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 70,108,117,105,100,115,105, +109, 83,101,116,116,105,110,103,115, 0, 83,104,114,105,110,107,119,114, 97,112, 77,111,100,105,102,105,101,114, 68, 97,116, 97, + 0, 83,105,109,112,108,101, 68,101,102,111,114,109, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,104, 97,112,101, 75, +101,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,111,108,105,100,105,102,121, 77,111,100,105,102,105,101,114, 68, + 97,116, 97, 0, 83, 99,114,101,119, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 79, 99,101, 97,110, 77,111,100,105,102, +105,101,114, 68, 97,116, 97, 0, 79, 99,101, 97,110, 0, 79, 99,101, 97,110, 67, 97, 99,104,101, 0, 87, 97,114,112, 77,111,100, +105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104,116, 86, 71, 69,100,105,116, 77,111,100,105,102,105,101,114, 68, 97, +116, 97, 0, 87,101,105,103,104,116, 86, 71, 77,105,120, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 87,101,105,103,104, +116, 86, 71, 80,114,111,120,105,109,105,116,121, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,121,110, 97,109,105, 99, + 80, 97,105,110,116, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 67, 97, +110,118, 97,115, 83,101,116,116,105,110,103,115, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 66,114,117,115,104, 83,101, +116,116,105,110,103,115, 0, 82,101,109,101,115,104, 77,111,100,105,102,105,101,114, 68, 97,116, 97, 0, 83,107,105,110, 77,111, +100,105,102,105,101,114, 68, 97,116, 97, 0, 69,100,105,116, 76, 97,116,116, 0, 76, 97,116,116,105, 99,101, 0, 98, 68,101,102, +111,114,109, 71,114,111,117,112, 0, 83, 99,117,108,112,116, 83,101,115,115,105,111,110, 0, 98, 65, 99,116,105,111,110, 0, 98, + 80,111,115,101, 0, 98, 71, 80,100, 97,116, 97, 0, 98, 65,110,105,109, 86,105,122, 83,101,116,116,105,110,103,115, 0, 98, 77, +111,116,105,111,110, 80, 97,116,104, 0, 66,117,108,108,101,116, 83,111,102,116, 66,111,100,121, 0, 80, 97,114,116, 68,101,102, +108,101, 99,116, 0, 83,111,102,116, 66,111,100,121, 0, 79, 98, 72,111,111,107, 0, 68,117,112,108,105, 79, 98,106,101, 99,116, + 0, 82, 78, 71, 0, 69,102,102,101, 99,116,111,114, 87,101,105,103,104,116,115, 0, 80, 84, 67, 97, 99,104,101, 69,120,116,114, + 97, 0, 80, 84, 67, 97, 99,104,101, 77,101,109, 0, 80, 84, 67, 97, 99,104,101, 69,100,105,116, 0, 83, 66, 86,101,114,116,101, +120, 0, 66,111,100,121, 80,111,105,110,116, 0, 66,111,100,121, 83,112,114,105,110,103, 0, 83, 66, 83, 99,114, 97,116, 99,104, + 0, 70,108,117,105,100, 86,101,114,116,101,120, 86,101,108,111, 99,105,116,121, 0, 87,111,114,108,100, 0, 66, 97,115,101, 0, + 65,118,105, 67,111,100,101, 99, 68, 97,116, 97, 0, 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 68, 97,116, 97, 0, + 81,117,105, 99,107,116,105,109,101, 67,111,100,101, 99, 83,101,116,116,105,110,103,115, 0, 70, 70, 77,112,101,103, 67,111,100, +101, 99, 68, 97,116, 97, 0, 65,117,100,105,111, 68, 97,116, 97, 0, 83, 99,101,110,101, 82,101,110,100,101,114, 76, 97,121,101, +114, 0, 73,109, 97,103,101, 70,111,114,109, 97,116, 68, 97,116, 97, 0, 82,101,110,100,101,114, 68, 97,116, 97, 0, 82,101,110, +100,101,114, 80,114,111,102,105,108,101, 0, 71, 97,109,101, 68,111,109,101, 0, 71, 97,109,101, 70,114, 97,109,105,110,103, 0, + 82,101, 99, 97,115,116, 68, 97,116, 97, 0, 71, 97,109,101, 68, 97,116, 97, 0, 84,105,109,101, 77, 97,114,107,101,114, 0, 80, + 97,105,110,116, 0, 66,114,117,115,104, 0, 73,109, 97,103,101, 80, 97,105,110,116, 83,101,116,116,105,110,103,115, 0, 80, 97, +114,116,105, 99,108,101, 66,114,117,115,104, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 69,100,105,116, 83,101,116,116, +105,110,103,115, 0, 83, 99,117,108,112,116, 0, 85,118, 83, 99,117,108,112,116, 0, 86, 80, 97,105,110,116, 0, 84,114, 97,110, +115,102,111,114,109, 79,114,105,101,110,116, 97,116,105,111,110, 0, 85,110,105,102,105,101,100, 80, 97,105,110,116, 83,101,116, +116,105,110,103,115, 0, 84,111,111,108, 83,101,116,116,105,110,103,115, 0, 98, 83,116, 97,116,115, 0, 85,110,105,116, 83,101, +116,116,105,110,103,115, 0, 80,104,121,115,105, 99,115, 83,101,116,116,105,110,103,115, 0, 69,100,105,116,105,110,103, 0, 83, + 99,101,110,101, 83,116, 97,116,115, 0, 68, 97,103, 70,111,114,101,115,116, 0, 77,111,118,105,101, 67,108,105,112, 0, 66, 71, +112,105, 99, 0, 77,111,118,105,101, 67,108,105,112, 85,115,101,114, 0, 82,101,103,105,111,110, 86,105,101,119, 51, 68, 0, 82, +101,110,100,101,114, 73,110,102,111, 0, 82,101,110,100,101,114, 69,110,103,105,110,101, 0, 86,105,101,119, 68,101,112,116,104, +115, 0, 83,109,111,111,116,104, 86,105,101,119, 83,116,111,114,101, 0,119,109, 84,105,109,101,114, 0, 86,105,101,119, 51, 68, + 0, 83,112, 97, 99,101, 76,105,110,107, 0, 86,105,101,119, 50, 68, 0, 83,112, 97, 99,101, 73,110,102,111, 0, 83,112, 97, 99, +101, 66,117,116,115, 0, 83,112, 97, 99,101, 79,111,112,115, 0, 84,114,101,101, 83,116,111,114,101, 0, 84,114,101,101, 83,116, +111,114,101, 69,108,101,109, 0, 83,112, 97, 99,101, 73,112,111, 0, 98, 68,111,112,101, 83,104,101,101,116, 0, 83,112, 97, 99, +101, 78,108, 97, 0, 83,112, 97, 99,101, 84,105,109,101, 67, 97, 99,104,101, 0, 83,112, 97, 99,101, 84,105,109,101, 0, 83,112, + 97, 99,101, 83,101,113, 0, 70,105,108,101, 83,101,108,101, 99,116, 80, 97,114, 97,109,115, 0, 83,112, 97, 99,101, 70,105,108, +101, 0, 70,105,108,101, 76,105,115,116, 0,119,109, 79,112,101,114, 97,116,111,114, 0, 70,105,108,101, 76, 97,121,111,117,116, + 0, 83,112, 97, 99,101, 73,109, 97,103,101, 0, 83, 99,111,112,101,115, 0, 72,105,115,116,111,103,114, 97,109, 0, 83,112, 97, + 99,101, 84,101,120,116, 0, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 83, 99,114,105,112,116, 0, 83,112, 97, 99,101, 78, +111,100,101, 0, 83,112, 97, 99,101, 76,111,103,105, 99, 0, 67,111,110,115,111,108,101, 76,105,110,101, 0, 83,112, 97, 99,101, + 67,111,110,115,111,108,101, 0, 83,112, 97, 99,101, 85,115,101,114, 80,114,101,102, 0, 83,112, 97, 99,101, 67,108,105,112, 0, + 77,111,118,105,101, 67,108,105,112, 83, 99,111,112,101,115, 0,117,105, 70,111,110,116, 0,117,105, 70,111,110,116, 83,116,121, +108,101, 0,117,105, 83,116,121,108,101, 0,117,105, 87,105,100,103,101,116, 67,111,108,111,114,115, 0,117,105, 87,105,100,103, +101,116, 83,116, 97,116,101, 67,111,108,111,114,115, 0,117,105, 80, 97,110,101,108, 67,111,108,111,114,115, 0, 84,104,101,109, +101, 85, 73, 0, 84,104,101,109,101, 83,112, 97, 99,101, 0, 84,104,101,109,101, 87,105,114,101, 67,111,108,111,114, 0, 98, 84, +104,101,109,101, 0, 98, 65,100,100,111,110, 0, 83,111,108,105,100, 76,105,103,104,116, 0, 85,115,101,114, 68,101,102, 0, 98, + 83, 99,114,101,101,110, 0, 83, 99,114, 86,101,114,116, 0, 83, 99,114, 69,100,103,101, 0, 80, 97,110,101,108, 0, 80, 97,110, +101,108, 84,121,112,101, 0,117,105, 76, 97,121,111,117,116, 0, 83, 99,114, 65,114,101, 97, 0, 83,112, 97, 99,101, 84,121,112, +101, 0, 65, 82,101,103,105,111,110, 0, 65, 82,101,103,105,111,110, 84,121,112,101, 0, 70,105,108,101, 71,108,111, 98, 97,108, + 0, 83,116,114,105,112, 69,108,101,109, 0, 83,116,114,105,112, 67,114,111,112, 0, 83,116,114,105,112, 84,114, 97,110,115,102, +111,114,109, 0, 83,116,114,105,112, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 83,116,114,105,112, 80,114,111,120,121, + 0, 83,116,114,105,112, 0, 83,101,113,117,101,110, 99,101, 0, 98, 83,111,117,110,100, 0, 77,101,116, 97, 83,116, 97, 99,107, + 0, 87,105,112,101, 86, 97,114,115, 0, 71,108,111,119, 86, 97,114,115, 0, 84,114, 97,110,115,102,111,114,109, 86, 97,114,115, + 0, 83,111,108,105,100, 67,111,108,111,114, 86, 97,114,115, 0, 83,112,101,101,100, 67,111,110,116,114,111,108, 86, 97,114,115, + 0, 69,102,102,101, 99,116, 0, 66,117,105,108,100, 69,102,102, 0, 80, 97,114,116, 69,102,102, 0, 80, 97,114,116,105, 99,108, +101, 0, 87, 97,118,101, 69,102,102, 0, 98, 80,114,111,112,101,114,116,121, 0, 98, 78,101, 97,114, 83,101,110,115,111,114, 0, + 98, 77,111,117,115,101, 83,101,110,115,111,114, 0, 98, 84,111,117, 99,104, 83,101,110,115,111,114, 0, 98, 75,101,121, 98,111, + 97,114,100, 83,101,110,115,111,114, 0, 98, 80,114,111,112,101,114,116,121, 83,101,110,115,111,114, 0, 98, 65, 99,116,117, 97, +116,111,114, 83,101,110,115,111,114, 0, 98, 68,101,108, 97,121, 83,101,110,115,111,114, 0, 98, 67,111,108,108,105,115,105,111, +110, 83,101,110,115,111,114, 0, 98, 82, 97,100, 97,114, 83,101,110,115,111,114, 0, 98, 82, 97,110,100,111,109, 83,101,110,115, +111,114, 0, 98, 82, 97,121, 83,101,110,115,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 83,101,110,115,111,114, 0, 98, 77, +101,115,115, 97,103,101, 83,101,110,115,111,114, 0, 98, 83,101,110,115,111,114, 0, 98, 67,111,110,116,114,111,108,108,101,114, + 0, 98, 74,111,121,115,116,105, 99,107, 83,101,110,115,111,114, 0, 98, 69,120,112,114,101,115,115,105,111,110, 67,111,110,116, + 0, 98, 80,121,116,104,111,110, 67,111,110,116, 0, 98, 65, 99,116,117, 97,116,111,114, 0, 98, 65,100,100, 79, 98,106,101, 99, +116, 65, 99,116,117, 97,116,111,114, 0, 98, 65, 99,116,105,111,110, 65, 99,116,117, 97,116,111,114, 0, 83,111,117,110,100, 51, + 68, 0, 98, 83,111,117,110,100, 65, 99,116,117, 97,116,111,114, 0, 98, 69,100,105,116, 79, 98,106,101, 99,116, 65, 99,116,117, + 97,116,111,114, 0, 98, 83, 99,101,110,101, 65, 99,116,117, 97,116,111,114, 0, 98, 80,114,111,112,101,114,116,121, 65, 99,116, +117, 97,116,111,114, 0, 98, 79, 98,106,101, 99,116, 65, 99,116,117, 97,116,111,114, 0, 98, 73,112,111, 65, 99,116,117, 97,116, +111,114, 0, 98, 67, 97,109,101,114, 97, 65, 99,116,117, 97,116,111,114, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 65, 99, +116,117, 97,116,111,114, 0, 98, 71,114,111,117,112, 65, 99,116,117, 97,116,111,114, 0, 98, 82, 97,110,100,111,109, 65, 99,116, +117, 97,116,111,114, 0, 98, 77,101,115,115, 97,103,101, 65, 99,116,117, 97,116,111,114, 0, 98, 71, 97,109,101, 65, 99,116,117, + 97,116,111,114, 0, 98, 86,105,115,105, 98,105,108,105,116,121, 65, 99,116,117, 97,116,111,114, 0, 98, 84,119,111, 68, 70,105, +108,116,101,114, 65, 99,116,117, 97,116,111,114, 0, 98, 80, 97,114,101,110,116, 65, 99,116,117, 97,116,111,114, 0, 98, 83,116, + 97,116,101, 65, 99,116,117, 97,116,111,114, 0, 98, 65,114,109, 97,116,117,114,101, 65, 99,116,117, 97,116,111,114, 0, 98, 83, +116,101,101,114,105,110,103, 65, 99,116,117, 97,116,111,114, 0, 71,114,111,117,112, 79, 98,106,101, 99,116, 0, 66,111,110,101, + 0, 98, 65,114,109, 97,116,117,114,101, 0, 98, 77,111,116,105,111,110, 80, 97,116,104, 86,101,114,116, 0, 98, 80,111,115,101, + 67,104, 97,110,110,101,108, 0, 98, 73, 75, 80, 97,114, 97,109, 0, 98, 73,116, 97,115, 99, 0, 98, 65, 99,116,105,111,110, 71, +114,111,117,112, 0, 83,112, 97, 99,101, 65, 99,116,105,111,110, 0, 98, 65, 99,116,105,111,110, 67,104, 97,110,110,101,108, 0, + 98, 67,111,110,115,116,114, 97,105,110,116, 67,104, 97,110,110,101,108, 0, 98, 67,111,110,115,116,114, 97,105,110,116, 0, 98, + 67,111,110,115,116,114, 97,105,110,116, 84, 97,114,103,101,116, 0, 98, 80,121,116,104,111,110, 67,111,110,115,116,114, 97,105, +110,116, 0, 98, 75,105,110,101,109, 97,116,105, 99, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,112,108,105,110,101, 73, + 75, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97, 99,107, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, + 82,111,116, 97,116,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 97,116,101, 76,105,107,101, + 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,107,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, + 83, 97,109,101, 86,111,108,117,109,101, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 84,114, 97,110,115, 76,105,107,101, 67, +111,110,115,116,114, 97,105,110,116, 0, 98, 77,105,110, 77, 97,120, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116, +105,111,110, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99,107, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105, +110,116, 0, 98, 68, 97,109,112, 84,114, 97, 99,107, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 80, + 97,116,104, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,116,114,101,116, 99,104, 84,111, 67,111,110,115,116,114, 97,105, +110,116, 0, 98, 82,105,103,105,100, 66,111,100,121, 74,111,105,110,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,108, + 97,109,112, 84,111, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 67,104,105,108,100, 79,102, 67,111,110,115,116,114, 97,105, +110,116, 0, 98, 84,114, 97,110,115,102,111,114,109, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 80,105,118,111,116, 67,111, +110,115,116,114, 97,105,110,116, 0, 98, 76,111, 99, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 82,111, +116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,105,122,101, 76,105,109,105,116, 67,111,110,115,116, +114, 97,105,110,116, 0, 98, 68,105,115,116, 76,105,109,105,116, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 83,104,114,105, +110,107,119,114, 97,112, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 70,111,108,108,111,119, 84,114, 97, 99,107, 67,111,110, +115,116,114, 97,105,110,116, 0, 98, 67, 97,109,101,114, 97, 83,111,108,118,101,114, 67,111,110,115,116,114, 97,105,110,116, 0, + 98, 79, 98,106,101, 99,116, 83,111,108,118,101,114, 67,111,110,115,116,114, 97,105,110,116, 0, 98, 65, 99,116,105,111,110, 77, +111,100,105,102,105,101,114, 0, 98, 65, 99,116,105,111,110, 83,116,114,105,112, 0, 98, 78,111,100,101, 83,116, 97, 99,107, 0, + 98, 78,111,100,101, 83,111, 99,107,101,116, 0, 98, 78,111,100,101, 76,105,110,107, 0, 98, 78,111,100,101, 80,114,101,118,105, +101,119, 0, 98, 78,111,100,101, 0,117,105, 66,108,111, 99,107, 0, 98, 78,111,100,101, 84,121,112,101, 0, 98, 78,111,100,101, + 84,114,101,101, 69,120,101, 99, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 73,110,116, 0, 98, 78,111, +100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 70,108,111, 97,116, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97, +108,117,101, 66,111,111,108,101, 97,110, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 86,101, 99,116,111, +114, 0, 98, 78,111,100,101, 83,111, 99,107,101,116, 86, 97,108,117,101, 82, 71, 66, 65, 0, 78,111,100,101, 70,114, 97,109,101, + 0, 78,111,100,101, 73,109, 97,103,101, 65,110,105,109, 0, 67,111,108,111,114, 67,111,114,114,101, 99,116,105,111,110, 68, 97, +116, 97, 0, 78,111,100,101, 67,111,108,111,114, 67,111,114,114,101, 99,116,105,111,110, 0, 78,111,100,101, 66,111,107,101,104, + 73,109, 97,103,101, 0, 78,111,100,101, 66,111,120, 77, 97,115,107, 0, 78,111,100,101, 69,108,108,105,112,115,101, 77, 97,115, +107, 0, 78,111,100,101, 73,109, 97,103,101, 76, 97,121,101,114, 0, 78,111,100,101, 66,108,117,114, 68, 97,116, 97, 0, 78,111, +100,101, 68, 66,108,117,114, 68, 97,116, 97, 0, 78,111,100,101, 66,105,108, 97,116,101,114, 97,108, 66,108,117,114, 68, 97,116, + 97, 0, 78,111,100,101, 72,117,101, 83, 97,116, 0, 78,111,100,101, 73,109, 97,103,101, 70,105,108,101, 0, 78,111,100,101, 73, +109, 97,103,101, 77,117,108,116,105, 70,105,108,101, 0, 78,111,100,101, 73,109, 97,103,101, 77,117,108,116,105, 70,105,108,101, + 83,111, 99,107,101,116, 0, 78,111,100,101, 67,104,114,111,109, 97, 0, 78,111,100,101, 84,119,111, 88, 89,115, 0, 78,111,100, +101, 84,119,111, 70,108,111, 97,116,115, 0, 78,111,100,101, 71,101,111,109,101,116,114,121, 0, 78,111,100,101, 86,101,114,116, +101,120, 67,111,108, 0, 78,111,100,101, 68,101,102,111, 99,117,115, 0, 78,111,100,101, 83, 99,114,105,112,116, 68,105, 99,116, + 0, 78,111,100,101, 71,108, 97,114,101, 0, 78,111,100,101, 84,111,110,101,109, 97,112, 0, 78,111,100,101, 76,101,110,115, 68, +105,115,116, 0, 78,111,100,101, 67,111,108,111,114, 66, 97,108, 97,110, 99,101, 0, 78,111,100,101, 67,111,108,111,114,115,112, +105,108,108, 0, 78,111,100,101, 84,101,120, 66, 97,115,101, 0, 78,111,100,101, 84,101,120, 83,107,121, 0, 78,111,100,101, 84, +101,120, 73,109, 97,103,101, 0, 78,111,100,101, 84,101,120, 67,104,101, 99,107,101,114, 0, 78,111,100,101, 84,101,120, 69,110, +118,105,114,111,110,109,101,110,116, 0, 78,111,100,101, 84,101,120, 71,114, 97,100,105,101,110,116, 0, 78,111,100,101, 84,101, +120, 78,111,105,115,101, 0, 78,111,100,101, 84,101,120, 86,111,114,111,110,111,105, 0, 78,111,100,101, 84,101,120, 77,117,115, +103,114, 97,118,101, 0, 78,111,100,101, 84,101,120, 87, 97,118,101, 0, 78,111,100,101, 84,101,120, 77, 97,103,105, 99, 0, 78, +111,100,101, 83,104, 97,100,101,114, 65,116,116,114,105, 98,117,116,101, 0, 84,101,120, 78,111,100,101, 79,117,116,112,117,116, + 0, 67,117,114,118,101, 77, 97,112, 80,111,105,110,116, 0, 67,117,114,118,101, 77, 97,112, 0, 66,114,117,115,104, 67,108,111, +110,101, 0, 67,117,115,116,111,109, 68, 97,116, 97, 76, 97,121,101,114, 0, 67,117,115,116,111,109, 68, 97,116, 97, 69,120,116, +101,114,110, 97,108, 0, 72, 97,105,114, 75,101,121, 0, 80, 97,114,116,105, 99,108,101, 75,101,121, 0, 66,111,105,100, 80, 97, +114,116,105, 99,108,101, 0, 66,111,105,100, 68, 97,116, 97, 0, 80, 97,114,116,105, 99,108,101, 83,112,114,105,110,103, 0, 67, +104,105,108,100, 80, 97,114,116,105, 99,108,101, 0, 80, 97,114,116,105, 99,108,101, 84, 97,114,103,101,116, 0, 80, 97,114,116, +105, 99,108,101, 68,117,112,108,105, 87,101,105,103,104,116, 0, 80, 97,114,116,105, 99,108,101, 68, 97,116, 97, 0, 83, 80, 72, + 70,108,117,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 83,101,116,116,105,110,103,115, 0, 66, +111,105,100, 83,101,116,116,105,110,103,115, 0, 80, 97,114,116,105, 99,108,101, 67, 97, 99,104,101, 75,101,121, 0, 75, 68, 84, +114,101,101, 0, 80, 97,114,116,105, 99,108,101, 68,114, 97,119, 68, 97,116, 97, 0, 76,105,110,107, 78,111,100,101, 0, 98, 71, + 80, 68,115,112,111,105,110,116, 0, 98, 71, 80, 68,115,116,114,111,107,101, 0, 98, 71, 80, 68,102,114, 97,109,101, 0, 98, 71, + 80, 68,108, 97,121,101,114, 0, 82,101,112,111,114,116, 76,105,115,116, 0,119,109, 87,105,110,100,111,119, 77, 97,110, 97,103, +101,114, 0,119,109, 87,105,110,100,111,119, 0,119,109, 75,101,121, 67,111,110,102,105,103, 0,119,109, 69,118,101,110,116, 0, +119,109, 83,117, 98, 87,105,110,100,111,119, 0,119,109, 71,101,115,116,117,114,101, 0,119,109, 75,101,121, 77, 97,112, 73,116, +101,109, 0, 80,111,105,110,116,101,114, 82, 78, 65, 0,119,109, 75,101,121, 77, 97,112, 68,105,102,102, 73,116,101,109, 0,119, +109, 75,101,121, 77, 97,112, 0,119,109, 79,112,101,114, 97,116,111,114, 84,121,112,101, 0, 70, 77,111,100,105,102,105,101,114, + 0, 70, 77,111,100, 95, 71,101,110,101,114, 97,116,111,114, 0, 70, 77,111,100, 95, 70,117,110, 99,116,105,111,110, 71,101,110, +101,114, 97,116,111,114, 0, 70, 67, 77, 95, 69,110,118,101,108,111,112,101, 68, 97,116, 97, 0, 70, 77,111,100, 95, 69,110,118, +101,108,111,112,101, 0, 70, 77,111,100, 95, 67,121, 99,108,101,115, 0, 70, 77,111,100, 95, 80,121,116,104,111,110, 0, 70, 77, +111,100, 95, 76,105,109,105,116,115, 0, 70, 77,111,100, 95, 78,111,105,115,101, 0, 70, 77,111,100, 95, 83,116,101,112,112,101, +100, 0, 68,114,105,118,101,114, 84, 97,114,103,101,116, 0, 68,114,105,118,101,114, 86, 97,114, 0, 67,104, 97,110,110,101,108, + 68,114,105,118,101,114, 0, 70, 80,111,105,110,116, 0, 70, 67,117,114,118,101, 0, 65,110,105,109, 77, 97,112, 80, 97,105,114, + 0, 65,110,105,109, 77, 97,112,112,101,114, 0, 78,108, 97, 83,116,114,105,112, 0, 78,108, 97, 84,114, 97, 99,107, 0, 75, 83, + 95, 80, 97,116,104, 0, 75,101,121,105,110,103, 83,101,116, 0, 65,110,105,109, 79,118,101,114,114,105,100,101, 0, 73,100, 65, +100,116, 84,101,109,112,108, 97,116,101, 0, 66,111,105,100, 82,117,108,101, 0, 66,111,105,100, 82,117,108,101, 71,111, 97,108, + 65,118,111,105,100, 0, 66,111,105,100, 82,117,108,101, 65,118,111,105,100, 67,111,108,108,105,115,105,111,110, 0, 66,111,105, +100, 82,117,108,101, 70,111,108,108,111,119, 76,101, 97,100,101,114, 0, 66,111,105,100, 82,117,108,101, 65,118,101,114, 97,103, +101, 83,112,101,101,100, 0, 66,111,105,100, 82,117,108,101, 70,105,103,104,116, 0, 66,111,105,100, 83,116, 97,116,101, 0, 70, + 76, 85, 73, 68, 95, 51, 68, 0, 87, 84, 85, 82, 66, 85, 76, 69, 78, 67, 69, 0, 83,112,101, 97,107,101,114, 0, 77,111,118,105, +101, 67,108,105,112, 80,114,111,120,121, 0, 77,111,118,105,101, 67,108,105,112, 67, 97, 99,104,101, 0, 77,111,118,105,101, 84, +114, 97, 99,107,105,110,103, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 84,114, 97, 99,107, 0, 77,111,118,105,101, + 84,114, 97, 99,107,105,110,103, 77, 97,114,107,101,114, 0, 77,111,118,105,101, 82,101, 99,111,110,115,116,114,117, 99,116,101, +100, 67, 97,109,101,114, 97, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 67, 97,109,101,114, 97, 0, 77,111,118,105, +101, 84,114, 97, 99,107,105,110,103, 83,101,116,116,105,110,103,115, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 83, +116, 97, 98,105,108,105,122, 97,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 82,101, 99,111,110,115, +116,114,117, 99,116,105,111,110, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 79, 98,106,101, 99,116, 0, 77,111,118, +105,101, 84,114, 97, 99,107,105,110,103, 83,116, 97,116,115, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 68,111,112, +101,115,104,101,101,116, 67,104, 97,110,110,101,108, 0, 77,111,118,105,101, 84,114, 97, 99,107,105,110,103, 68,111,112,101,115, +104,101,101,116, 0, 68,121,110, 97,109,105, 99, 80, 97,105,110,116, 83,117,114,102, 97, 99,101, 0, 80, 97,105,110,116, 83,117, +114,102, 97, 99,101, 68, 97,116, 97, 0, 0, 0, 84, 76, 69, 78, 1, 0, 1, 0, 2, 0, 2, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 8, 0, 8, 0, 8, 0, 0, 0, 16, 0, 24, 0, 16, 0, 4, 0, 8, 0, 12, 0, 16, 0, 16, 0, 32, 0,128, 0,120, 0,144, 8, + 0, 0, 40, 0,144, 0,128, 5,112, 0, 36, 0, 56, 0,160, 0,192, 0,224, 0, 96, 0, 40, 0, 48, 0,224, 0, 16, 0,200, 0, + 40, 0,232, 11, 48, 5, 0, 0, 0, 0, 0, 0, 56, 1,160, 1, 24, 0, 8, 3,200, 0, 0, 0,104, 0, 64, 1, 56, 4, 80, 0, + 32, 1,144, 0, 56, 3, 16, 2, 88, 0, 16, 0,128, 3,152, 0,136, 4, 0, 0,104, 0,104, 0, 0, 1, 80, 0, 8, 0, 16, 0, + 32, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0, 16, 5, 8, 0, 12, 0, 16, 0, 8, 0, 12, 0, 4, 0, 20, 0, 48, 0, 64, 0, + 20, 0, 12, 0, 16, 0, 4, 0, 8, 0, 0, 0,184, 0,160, 1, 8, 0, 4, 0, 4, 0, 0, 1, 32, 0, 8, 0, 24, 0, 16, 0, + 64, 0, 24, 0, 12, 0, 64, 0, 4, 0, 16, 0, 16, 0,112, 0,200, 0,136, 0,192, 0,192, 0,128, 0,192, 0,192, 0,128, 0, +120, 0,200, 0,120, 0,144, 0, 16, 1, 56, 0,200, 0, 24, 1, 40, 1,120, 0,184, 0,200, 0, 64, 1,200, 0, 88, 1,112, 0, +168, 0, 0, 0,152, 0, 48, 0, 40, 5,192, 0, 0, 0,152, 0, 0, 0, 0, 0,128, 0, 8, 0, 8, 0,112, 1,144, 0,152, 2, +136, 0,192, 0,120, 0,128, 0,224, 4,208, 0,200, 0,112, 0,208, 0,144, 0, 16, 5, 0, 0, 0, 0, 48, 1,104, 1,160, 1, +104, 1,136, 0,104, 0,112, 0,128, 0,120, 0, 16, 0, 96, 1, 88, 0, 0, 0,200, 0,216, 0,152, 0, 48, 0, 24, 0,120, 0, +152, 0,216, 1, 0, 1,184, 0, 0, 0, 72, 0, 32, 0,176, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 12, 0, 24, 2, 40, 0, +184, 0,152, 0, 64, 0, 72, 0, 32, 0,128, 0, 24, 0, 56, 9, 64, 0, 24, 0, 16, 0, 56, 0,184, 0, 96, 0, 32, 0, 96, 6, + 56, 0, 16, 0,168, 0,104, 0, 32, 0, 64, 0,120, 0, 24, 0,248, 1, 32, 0, 8, 0, 24, 0, 80, 8, 0, 0, 0, 0,224, 8, +104, 0, 8, 0,112, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 56, 0,144, 0, 64, 0,248, 0, 24, 1, 16, 0, 16, 0, +240, 0,112, 0,216, 0, 24, 0,208, 0,240, 0,160, 7,104, 0, 0, 0,168, 0, 0, 0, 40, 33,128, 16, 24, 16,160, 2,168, 5, + 64, 0, 48, 1, 72, 0, 40, 0,136, 1,104, 0, 56, 1, 56, 0, 24, 4, 32, 0,232, 0, 32, 0, 32, 0, 8, 0, 80, 3,232, 1, + 16, 0, 48, 37, 80, 0, 56, 0,112, 32, 8, 1, 32, 0, 40, 0, 88, 1, 0, 0, 0, 0,160, 0, 0, 0, 40, 1, 0, 0, 48, 4, + 8, 1, 16, 0, 8, 0, 44, 0, 16, 4, 72, 3, 72, 1,208, 4, 32, 0, 12, 0, 24, 0, 32, 0, 16, 0, 24, 0, 24, 0, 32, 0, +136, 1, 0, 0, 64, 0, 96, 0, 80, 0, 8, 0, 80, 0,136, 0,200, 0, 72, 0, 8, 0,136, 0, 76, 0, 72, 0,204, 0,136, 0, +136, 0,128, 0,136, 0, 92, 0,128, 0, 80, 0,112, 0, 16, 0,168, 0, 32, 0, 72, 0,120, 0, 24, 0,144, 0,112, 0,148, 0, + 32, 0,128, 0, 88, 0, 88, 0,208, 0,140, 0, 4, 0, 24, 0, 16, 0, 8, 0,160, 0, 48, 0, 40, 0, 72, 1, 0, 1, 16, 0, + 32, 2, 4, 0, 40, 0,120, 0, 72, 1,120, 0, 56, 0,120, 0,160, 0,112, 0,184, 0, 24, 0, 88, 0, 80, 0, 80, 0, 80, 0, + 8, 0, 72, 0,104, 0,104, 0, 80, 0, 80, 0, 24, 0, 88, 0,104, 0, 16, 0,144, 0,128, 0, 88, 0, 28, 0, 28, 0, 28, 0, + 88, 0, 24, 0,160, 0, 16, 0,152, 0, 72, 0,168, 0, 48, 0,208, 0, 56, 0, 16, 0,112, 1, 0, 0, 0, 0, 0, 0, 16, 0, + 16, 0, 4, 0, 24, 0, 16, 0, 4, 0, 16, 0, 24, 0,104, 0, 20, 0, 24, 0, 24, 0, 8, 0, 40, 0, 28, 0, 12, 0, 12, 0, + 32, 4, 40, 4, 64, 4, 44, 0, 24, 0, 8, 0,128, 0, 64, 0, 32, 0, 16, 0, 32, 0, 32, 0, 8, 0, 96, 0, 20, 0,200, 3, +216, 3,208, 3,200, 3,208, 3,208, 3,200, 3,208, 3,208, 3,208, 3,208, 3, 64, 0, 64, 0, 12, 0, 56, 0, 24, 0,104, 0, + 0, 4, 24, 0, 56, 0, 56, 0, 20, 0, 16, 0, 64, 0, 40, 0, 32, 0,192, 0, 60, 0, 16, 3,104, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 32, 0, 40, 0,192, 0, 40, 0, 88, 1, 0, 1,168, 0, 0, 0, 0, 0, 0, 0,184, 0, 0, 0, 32, 0,136, 0, + 0, 0,120, 0, 24, 0, 24, 0, 16, 0, 24, 0, 8, 0, 16, 0, 24, 0, 20, 0, 20, 0, 56, 0, 24, 2, 40, 1, 16, 0,104, 0, + 0, 1, 40, 0,208, 0,104, 0,112, 0,216, 1, 32, 0,128, 0, 56, 0, 80, 0, 64, 0,104, 0, 72, 0, 64, 0,128, 0, 0, 0, + 0, 0,184, 0, 8, 3, 0, 0, 24, 1,192, 0, 16, 0, 72, 0, 48, 0, 64, 0, 56, 0, 24, 0,128, 0, 0, 1, 48, 0, 32, 0, + 16, 6, 0, 0, 83, 84, 82, 67,217, 1, 0, 0, 12, 0, 2, 0, 12, 0, 0, 0, 12, 0, 1, 0, 13, 0, 3, 0, 13, 0, 0, 0, + 13, 0, 1, 0, 11, 0, 2, 0, 14, 0, 2, 0, 11, 0, 3, 0, 11, 0, 4, 0, 15, 0, 2, 0, 2, 0, 5, 0, 2, 0, 6, 0, + 16, 0, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0, 17, 0, 3, 0, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 18, 0, 4, 0, + 4, 0, 8, 0, 4, 0, 9, 0, 4, 0, 10, 0, 4, 0, 11, 0, 19, 0, 4, 0, 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, + 7, 0, 11, 0, 20, 0, 4, 0, 11, 0, 12, 0, 14, 0, 13, 0, 4, 0, 14, 0, 4, 0, 15, 0, 21, 0, 10, 0, 21, 0, 0, 0, + 21, 0, 1, 0, 0, 0, 16, 0, 0, 0, 17, 0, 2, 0, 18, 0, 0, 0, 19, 0, 4, 0, 20, 0, 20, 0, 21, 0, 4, 0, 22, 0, + 4, 0, 23, 0, 22, 0, 11, 0, 11, 0, 0, 0, 11, 0, 1, 0, 22, 0, 24, 0, 23, 0, 25, 0, 0, 0, 26, 0, 2, 0, 27, 0, + 2, 0, 28, 0, 2, 0, 18, 0, 4, 0, 29, 0, 4, 0, 30, 0, 21, 0, 31, 0, 23, 0, 6, 0, 22, 0, 32, 0, 22, 0, 33, 0, + 24, 0, 34, 0, 0, 0, 35, 0, 0, 0, 36, 0, 23, 0, 37, 0, 25, 0, 5, 0, 4, 0, 38, 0, 4, 0, 39, 0, 2, 0, 40, 0, + 2, 0, 41, 0, 4, 0, 42, 0, 26, 0, 6, 0, 27, 0, 43, 0, 2, 0, 44, 0, 2, 0, 45, 0, 2, 0, 16, 0, 2, 0, 18, 0, + 0, 0, 46, 0, 28, 0, 21, 0, 28, 0, 0, 0, 28, 0, 1, 0, 29, 0, 47, 0, 30, 0, 48, 0, 19, 0, 49, 0, 19, 0, 50, 0, + 2, 0, 44, 0, 2, 0, 45, 0, 2, 0, 51, 0, 2, 0, 52, 0, 2, 0, 53, 0, 2, 0, 54, 0, 2, 0, 18, 0, 2, 0, 55, 0, + 7, 0, 10, 0, 7, 0, 11, 0, 4, 0, 56, 0, 7, 0, 57, 0, 7, 0, 58, 0, 7, 0, 59, 0, 26, 0, 60, 0, 31, 0, 7, 0, + 22, 0, 32, 0, 14, 0, 61, 0, 19, 0, 62, 0, 2, 0, 44, 0, 2, 0, 63, 0, 2, 0, 64, 0, 2, 0, 27, 0, 32, 0, 16, 0, + 32, 0, 0, 0, 32, 0, 1, 0, 7, 0, 65, 0, 7, 0, 59, 0, 2, 0, 16, 0, 2, 0, 66, 0, 2, 0, 67, 0, 2, 0, 18, 0, + 4, 0, 68, 0, 4, 0, 69, 0, 11, 0, 2, 0, 7, 0, 70, 0, 0, 0, 19, 0, 0, 0, 71, 0, 7, 0, 72, 0, 7, 0, 73, 0, + 33, 0, 15, 0, 22, 0, 32, 0, 34, 0, 74, 0, 32, 0, 75, 0, 0, 0, 76, 0, 4, 0, 77, 0, 4, 0, 27, 0, 14, 0, 78, 0, + 31, 0, 79, 0, 22, 0, 80, 0, 2, 0, 16, 0, 2, 0, 81, 0, 2, 0, 82, 0, 2, 0, 18, 0, 7, 0, 83, 0, 4, 0, 84, 0, + 35, 0, 6, 0, 35, 0, 0, 0, 35, 0, 1, 0, 0, 0, 85, 0, 0, 0, 86, 0, 4, 0, 22, 0, 4, 0, 87, 0, 36, 0, 10, 0, + 36, 0, 0, 0, 36, 0, 1, 0, 4, 0, 88, 0, 4, 0, 89, 0, 4, 0, 90, 0, 4, 0, 66, 0, 4, 0, 13, 0, 4, 0, 91, 0, + 0, 0, 92, 0, 0, 0, 93, 0, 37, 0, 15, 0, 22, 0, 32, 0, 0, 0, 94, 0, 4, 0, 91, 0, 4, 0, 95, 0, 14, 0, 96, 0, + 35, 0, 97, 0, 35, 0, 98, 0, 4, 0, 99, 0, 4, 0,100, 0, 14, 0,101, 0, 0, 0,102, 0, 4, 0,103, 0, 4, 0,104, 0, + 11, 0,105, 0, 8, 0,106, 0, 38, 0, 3, 0, 4, 0,107, 0, 4, 0,108, 0, 11, 0, 2, 0, 39, 0, 20, 0, 22, 0, 32, 0, + 34, 0, 74, 0, 0, 0, 16, 0, 0, 0,109, 0, 2, 0, 18, 0, 7, 0,110, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,113, 0, + 7, 0,114, 0, 7, 0,115, 0, 7, 0,116, 0, 7, 0,117, 0, 7, 0,118, 0, 7, 0,119, 0, 7, 0,120, 0, 31, 0, 79, 0, + 27, 0,121, 0, 0, 0,122, 0, 0, 0,123, 0, 40, 0, 14, 0, 41, 0,124, 0, 4, 0,125, 0, 4, 0,126, 0, 4, 0,127, 0, + 4, 0,128, 0, 0, 0,129, 0, 0, 0,130, 0, 0, 0,131, 0, 0, 0, 27, 0, 2, 0,132, 0, 2, 0,133, 0, 2, 0,134, 0, + 2, 0, 18, 0, 4, 0, 30, 0, 42, 0, 33, 0, 22, 0, 32, 0, 0, 0, 35, 0, 14, 0,135, 0, 43, 0,136, 0, 44, 0,137, 0, + 45, 0,138, 0, 45, 0,139, 0, 2, 0,140, 0, 2, 0,141, 0, 2, 0,131, 0, 2, 0, 18, 0, 2, 0,142, 0, 2, 0, 16, 0, + 4, 0,143, 0, 2, 0,144, 0, 2, 0,145, 0, 2, 0,146, 0, 2, 0,147, 0, 2, 0,148, 0, 2, 0,149, 0, 4, 0,150, 0, + 4, 0,151, 0, 38, 0,152, 0, 25, 0,153, 0, 7, 0,154, 0, 4, 0,155, 0, 2, 0,156, 0, 2, 0,157, 0, 2, 0,158, 0, + 0, 0,159, 0, 0, 0,160, 0, 7, 0,161, 0, 7, 0,162, 0, 46, 0, 65, 0, 2, 0,163, 0, 2, 0,164, 0, 2, 0,165, 0, + 2, 0,166, 0, 27, 0,167, 0, 47, 0,168, 0, 0, 0,169, 0, 0, 0,170, 0, 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, + 7, 0,174, 0, 7, 0,175, 0, 7, 0,176, 0, 2, 0,177, 0, 2, 0,178, 0, 2, 0,179, 0, 2, 0,180, 0, 2, 0,181, 0, + 2, 0,182, 0, 0, 0,183, 0, 0, 0,123, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0,188, 0, + 7, 0, 55, 0, 7, 0,189, 0, 7, 0,190, 0, 7, 0,191, 0, 7, 0,192, 0, 7, 0,193, 0, 7, 0,194, 0, 7, 0,195, 0, + 7, 0,196, 0, 7, 0,197, 0, 7, 0,198, 0, 7, 0,199, 0, 7, 0,200, 0, 7, 0,201, 0, 7, 0,202, 0, 7, 0,203, 0, + 7, 0,204, 0, 7, 0,205, 0, 7, 0,206, 0, 7, 0,207, 0, 7, 0,208, 0, 7, 0,209, 0, 7, 0,210, 0, 7, 0,211, 0, + 7, 0,212, 0, 7, 0,213, 0, 7, 0,214, 0, 7, 0,215, 0, 7, 0,216, 0, 7, 0,217, 0, 7, 0,218, 0, 7, 0,219, 0, + 7, 0,220, 0, 7, 0,221, 0, 7, 0,222, 0, 7, 0,223, 0, 7, 0,224, 0, 7, 0,225, 0, 48, 0, 6, 0, 7, 0,184, 0, + 7, 0,185, 0, 7, 0,186, 0, 7, 0,226, 0, 7, 0, 65, 0, 4, 0, 62, 0, 49, 0, 5, 0, 2, 0, 18, 0, 2, 0,227, 0, + 2, 0, 62, 0, 2, 0,228, 0, 48, 0,229, 0, 50, 0, 17, 0, 27, 0,167, 0, 42, 0,230, 0, 51, 0,231, 0, 7, 0,232, 0, + 7, 0,233, 0, 2, 0, 16, 0, 2, 0,234, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0,235, 0, 4, 0,236, 0, 2, 0,237, 0, + 2, 0,238, 0, 4, 0,131, 0, 4, 0,143, 0, 2, 0,239, 0, 2, 0,240, 0, 52, 0, 25, 0, 2, 0, 18, 0, 2, 0,241, 0, + 7, 0,242, 0, 7, 0,243, 0, 2, 0,142, 0, 2, 0,244, 0, 4, 0,245, 0, 4, 0,246, 0, 27, 0,167, 0, 4, 0,247, 0, + 2, 0,248, 0, 2, 0,249, 0, 11, 0,250, 0, 7, 0,251, 0, 7, 0,252, 0, 2, 0,253, 0, 2, 0,254, 0, 2, 0,255, 0, + 2, 0, 0, 1, 7, 0, 1, 1, 7, 0, 2, 1, 7, 0, 3, 1, 7, 0, 4, 1, 49, 0, 5, 1, 53, 0, 6, 1, 54, 0, 13, 0, + 4, 0, 7, 1, 4, 0, 8, 1, 2, 0, 9, 1, 2, 0, 18, 0, 2, 0, 10, 1, 2, 0, 11, 1, 27, 0,167, 0, 7, 0, 12, 1, + 4, 0, 13, 1, 0, 0, 14, 1, 7, 0, 15, 1, 4, 0, 16, 1, 4, 0,131, 0, 55, 0, 4, 0, 27, 0,167, 0, 0, 0, 17, 1, + 4, 0, 18, 1, 4, 0, 27, 0, 47, 0, 63, 0, 22, 0, 32, 0, 34, 0, 74, 0, 7, 0, 19, 1, 7, 0, 20, 1, 7, 0, 21, 1, + 7, 0, 22, 1, 7, 0, 23, 1, 7, 0, 24, 1, 7, 0, 25, 1, 7, 0, 26, 1, 7, 0, 27, 1, 7, 0, 30, 0, 7, 0, 28, 1, + 7, 0, 29, 1, 7, 0, 30, 1, 7, 0, 31, 1, 7, 0, 32, 1, 7, 0, 33, 1, 7, 0, 34, 1, 7, 0, 35, 1, 7, 0, 36, 1, + 7, 0, 37, 1, 7, 0, 38, 1, 7, 0, 39, 1, 2, 0, 40, 1, 2, 0, 41, 1, 2, 0, 42, 1, 2, 0, 43, 1, 2, 0, 44, 1, + 2, 0, 45, 1, 2, 0, 46, 1, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0,234, 0, 7, 0, 47, 1, 7, 0, 48, 1, 7, 0, 49, 1, + 7, 0, 50, 1, 4, 0, 51, 1, 4, 0, 52, 1, 2, 0, 53, 1, 2, 0, 54, 1, 2, 0, 10, 1, 2, 0,129, 0, 4, 0, 22, 0, + 4, 0,126, 0, 4, 0,127, 0, 4, 0,128, 0, 7, 0, 55, 1, 7, 0, 56, 1, 7, 0, 66, 0, 40, 0, 57, 1, 56, 0, 58, 1, + 31, 0, 79, 0, 42, 0,230, 0, 49, 0, 5, 1, 50, 0, 59, 1, 25, 0,153, 0, 52, 0, 60, 1, 54, 0, 61, 1, 55, 0, 62, 1, + 0, 0, 63, 1, 0, 0,123, 0, 57, 0, 13, 0, 7, 0, 64, 1, 7, 0, 65, 1, 7, 0,175, 0, 4, 0, 18, 0, 0, 0,170, 0, + 0, 0,171, 0, 0, 0,172, 0, 0, 0,173, 0, 4, 0, 27, 0, 7, 0, 66, 1, 7, 0, 67, 1, 7, 0, 68, 1, 27, 0, 43, 0, + 58, 0, 9, 0, 49, 0, 69, 1, 7, 0, 21, 1, 7, 0, 22, 1, 7, 0, 23, 1, 4, 0, 18, 0, 7, 0, 70, 1, 7, 0, 71, 1, + 4, 0, 72, 1, 4, 0, 73, 1, 59, 0, 76, 0, 22, 0, 32, 0, 34, 0, 74, 0, 2, 0, 16, 0, 2, 0, 18, 0, 4, 0, 74, 1, + 2, 0,178, 0, 2, 0, 75, 1, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,187, 0, 7, 0, 76, 1, 7, 0, 77, 1, + 7, 0, 78, 1, 7, 0, 79, 1, 7, 0, 80, 1, 7, 0, 81, 1, 7, 0, 82, 1, 7, 0, 83, 1, 7, 0, 84, 1, 7, 0, 85, 1, + 7, 0, 86, 1, 53, 0, 87, 1, 2, 0,241, 0, 2, 0, 30, 0, 7, 0,111, 0, 7, 0,112, 0, 7, 0, 88, 1, 7, 0, 89, 1, + 7, 0, 90, 1, 7, 0, 91, 1, 7, 0, 92, 1, 7, 0, 93, 1, 2, 0, 94, 1, 2, 0, 95, 1, 2, 0, 96, 1, 2, 0, 97, 1, + 0, 0, 98, 1, 0, 0, 99, 1, 2, 0,100, 1, 2, 0,101, 1, 2, 0,102, 1, 2, 0,103, 1, 2, 0,104, 1, 7, 0,105, 1, + 7, 0,106, 1, 7, 0,107, 1, 7, 0,108, 1, 2, 0,109, 1, 2, 0,110, 1, 2, 0,111, 1, 2, 0,112, 1, 2, 0,113, 1, + 2, 0,114, 1, 7, 0,115, 1, 7, 0,116, 1, 7, 0,117, 1, 7, 0,118, 1, 7, 0,119, 1, 7, 0,120, 1, 7, 0,121, 1, + 7, 0,122, 1, 7, 0,123, 1, 7, 0,124, 1, 7, 0,125, 1, 7, 0,126, 1, 7, 0,127, 1, 2, 0,128, 1, 0, 0,129, 1, + 31, 0, 79, 0, 46, 0,130, 1, 2, 0,131, 1, 2, 0, 63, 1, 0, 0,132, 1, 25, 0,153, 0, 56, 0, 58, 1, 60, 0, 18, 0, 7, 0,133, 1, 7, 0,134, 1, 7, 0,135, 1, 7, 0,136, 1, 7, 0,137, 1, 7, 0,138, 1, 7, 0,139, 1, 7, 0,140, 1, - 2, 0,141, 1, 0, 0,142, 1, 31, 0, 79, 0, 46, 0,143, 1, 2, 0,144, 1, 2, 0, 76, 1, 0, 0,145, 1, 25, 0,153, 0, - 57, 0, 70, 1, 61, 0, 18, 0, 7, 0,146, 1, 7, 0,147, 1, 7, 0,148, 1, 7, 0,149, 1, 7, 0,150, 1, 7, 0,151, 1, - 7, 0,152, 1, 7, 0,153, 1, 7, 0,154, 1, 7, 0,155, 1, 2, 0,156, 1, 2, 0,157, 1, 2, 0,158, 1, 2, 0,159, 1, - 7, 0,160, 1, 7, 0,161, 1, 7, 0,162, 1, 7, 0,163, 1, 62, 0, 4, 0, 4, 0, 18, 0, 4, 0,164, 1, 4, 0,165, 1, - 4, 0, 66, 0, 63, 0,126, 0, 22, 0, 32, 0, 34, 0, 74, 0, 2, 0,166, 1, 2, 0, 18, 0, 7, 0,184, 0, 7, 0,185, 0, - 7, 0,186, 0, 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, 7, 0,170, 1, 7, 0,171, 1, 7, 0,172, 1, 7, 0,173, 1, - 7, 0,174, 1, 7, 0,175, 1, 7, 0,176, 1, 7, 0,177, 1, 7, 0,178, 1, 7, 0,179, 1, 7, 0,180, 1, 7, 0,181, 1, - 7, 0,182, 1, 7, 0,183, 1, 7, 0,184, 1, 7, 0,185, 1, 7, 0,186, 1, 61, 0,187, 1, 62, 0,188, 1, 7, 0,189, 1, - 7, 0,190, 1, 7, 0,191, 1, 7, 0,192, 1, 7, 0,193, 1, 7, 0,194, 1, 7, 0,195, 1, 2, 0,196, 1, 2, 0,197, 1, - 2, 0,198, 1, 0, 0,199, 1, 0, 0,200, 1, 7, 0,201, 1, 7, 0,202, 1, 2, 0,203, 1, 2, 0,204, 1, 7, 0,205, 1, - 7, 0,206, 1, 7, 0,207, 1, 7, 0,208, 1, 2, 0,209, 1, 2, 0,210, 1, 4, 0, 87, 1, 4, 0,211, 1, 2, 0,212, 1, - 2, 0,213, 1, 2, 0,214, 1, 2, 0,215, 1, 7, 0,216, 1, 7, 0,217, 1, 7, 0,218, 1, 7, 0,219, 1, 7, 0,220, 1, - 7, 0,221, 1, 7, 0,222, 1, 7, 0,223, 1, 7, 0,224, 1, 7, 0,225, 1, 0, 0,226, 1, 7, 0,227, 1, 7, 0,228, 1, - 7, 0,229, 1, 4, 0,230, 1, 0, 0,231, 1, 0, 0,124, 1, 0, 0,232, 1, 0, 0, 76, 1, 2, 0,233, 1, 2, 0,234, 1, - 2, 0,144, 1, 2, 0,235, 1, 2, 0,236, 1, 2, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, 7, 0,240, 1, 7, 0,241, 1, - 7, 0,242, 1, 2, 0,163, 0, 2, 0,164, 0, 50, 0,243, 1, 50, 0,244, 1, 0, 0,245, 1, 0, 0,246, 1, 0, 0,247, 1, - 0, 0,248, 1, 2, 0,249, 1, 2, 0,250, 1, 7, 0,251, 1, 7, 0,252, 1, 46, 0,143, 1, 57, 0, 70, 1, 31, 0, 79, 0, - 64, 0,253, 1, 25, 0,153, 0, 7, 0,254, 1, 7, 0,255, 1, 7, 0, 0, 2, 7, 0, 1, 2, 7, 0, 2, 2, 2, 0, 3, 2, - 2, 0, 30, 0, 7, 0, 4, 2, 7, 0, 5, 2, 7, 0, 6, 2, 7, 0, 7, 2, 7, 0, 8, 2, 7, 0, 9, 2, 7, 0, 10, 2, - 7, 0, 11, 2, 7, 0, 12, 2, 2, 0, 13, 2, 2, 0, 14, 2, 4, 0, 15, 2, 2, 0, 16, 2, 2, 0, 17, 2, 14, 0, 18, 2, - 65, 0, 4, 0, 22, 0, 32, 0, 0, 0, 35, 0, 66, 0, 2, 0, 38, 0,152, 0, 67, 0, 20, 0, 67, 0, 0, 0, 67, 0, 1, 0, - 68, 0, 19, 2, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 20, 2, 2, 0, 21, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, - 7, 0, 22, 2, 7, 0, 23, 2, 7, 0, 24, 2, 7, 0, 25, 2, 7, 0, 26, 2, 7, 0, 27, 2, 7, 0, 28, 2, 7, 0, 22, 0, - 7, 0, 29, 2, 7, 0, 30, 2, 69, 0, 20, 0, 22, 0, 32, 0, 34, 0, 74, 0, 68, 0, 19, 2, 14, 0, 31, 2, 14, 0, 32, 2, - 14, 0, 33, 2, 31, 0, 79, 0, 63, 0, 34, 2, 0, 0, 18, 0, 0, 0, 35, 2, 2, 0, 36, 2, 2, 0,177, 0, 2, 0, 27, 0, - 7, 0, 77, 1, 7, 0,175, 0, 7, 0, 78, 1, 7, 0, 37, 2, 7, 0, 38, 2, 7, 0, 39, 2, 67, 0, 40, 2, 30, 0, 11, 0, - 7, 0, 41, 2, 7, 0, 42, 2, 7, 0, 43, 2, 7, 0,255, 0, 2, 0, 53, 0, 0, 0, 44, 2, 0, 0, 45, 2, 0, 0, 46, 2, - 0, 0, 47, 2, 0, 0, 48, 2, 0, 0, 49, 2, 29, 0, 7, 0, 7, 0, 50, 2, 7, 0, 42, 2, 7, 0, 43, 2, 2, 0, 46, 2, - 2, 0, 49, 2, 7, 0,255, 0, 7, 0, 27, 0, 70, 0, 21, 0, 70, 0, 0, 0, 70, 0, 1, 0, 2, 0, 16, 0, 2, 0, 51, 2, - 2, 0, 49, 2, 2, 0, 18, 0, 2, 0, 52, 2, 2, 0, 53, 2, 2, 0, 54, 2, 2, 0, 55, 2, 2, 0, 56, 2, 2, 0, 57, 2, - 2, 0, 58, 2, 2, 0, 59, 2, 7, 0, 60, 2, 7, 0, 61, 2, 29, 0, 47, 0, 30, 0, 48, 0, 2, 0, 62, 2, 2, 0, 63, 2, - 4, 0, 64, 2, 71, 0, 5, 0, 2, 0, 65, 2, 2, 0, 51, 2, 0, 0, 18, 0, 0, 0, 27, 0, 2, 0, 30, 0, 72, 0, 4, 0, - 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 66, 2, 7, 0, 67, 2, 73, 0, 4, 0, 14, 0, 68, 2, 74, 0, 69, 2, 4, 0, 70, 2, - 0, 0, 93, 0, 75, 0, 70, 0, 22, 0, 32, 0, 34, 0, 74, 0, 68, 0, 19, 2, 14, 0, 71, 2, 14, 0, 32, 2, 73, 0, 72, 2, - 27, 0, 73, 2, 27, 0, 74, 2, 27, 0, 75, 2, 31, 0, 79, 0, 76, 0, 76, 2, 33, 0, 77, 2, 63, 0, 34, 2, 14, 0, 78, 2, - 7, 0, 77, 1, 7, 0,175, 0, 7, 0, 78, 1, 2, 0, 16, 0, 2, 0,177, 0, 2, 0, 79, 2, 2, 0, 80, 2, 7, 0, 81, 2, - 7, 0, 82, 2, 4, 0, 83, 2, 2, 0, 27, 0, 2, 0, 36, 2, 2, 0, 18, 0, 2, 0, 84, 2, 7, 0, 85, 2, 7, 0, 86, 2, - 7, 0, 87, 2, 2, 0, 54, 2, 2, 0, 55, 2, 2, 0, 88, 2, 2, 0, 89, 2, 4, 0, 90, 2, 11, 0, 91, 2, 2, 0, 22, 0, - 2, 0, 96, 0, 2, 0, 65, 0, 2, 0, 92, 2, 7, 0, 93, 2, 7, 0, 94, 2, 7, 0, 95, 2, 7, 0, 96, 2, 7, 0, 97, 2, - 7, 0, 98, 2, 7, 0, 99, 2, 7, 0,100, 2, 7, 0,101, 2, 7, 0,102, 2, 0, 0,103, 2, 77, 0,104, 2, 78, 0,105, 2, - 0, 0,106, 2, 65, 0,107, 2, 65, 0,108, 2, 65, 0,109, 2, 65, 0,110, 2, 4, 0,111, 2, 7, 0, 83, 0, 4, 0,112, 2, - 4, 0,113, 2, 72, 0,114, 2, 4, 0,115, 2, 4, 0,116, 2, 71, 0,117, 2, 71, 0,118, 2, 7, 0,119, 2, 7, 0,120, 2, - 79, 0, 47, 0, 22, 0, 32, 0, 34, 0, 74, 0, 68, 0, 19, 2, 31, 0, 79, 0, 33, 0, 77, 2, 63, 0, 34, 2, 80, 0,121, 2, - 81, 0,122, 2, 82, 0,123, 2, 83, 0,124, 2, 84, 0,125, 2, 85, 0,126, 2, 86, 0,127, 2, 87, 0,128, 2, 88, 0,129, 2, - 89, 0,130, 2, 90, 0,131, 2, 91, 0,132, 2, 92, 0,133, 2, 93, 0,134, 2, 79, 0,135, 2, 94, 0,136, 2, 95, 0,137, 2, - 95, 0,138, 2, 95, 0,139, 2, 95, 0,140, 2, 95, 0,141, 2, 4, 0, 52, 0, 4, 0,142, 2, 4, 0,143, 2, 4, 0,144, 2, - 4, 0,145, 2, 4, 0,146, 2, 4, 0,147, 2, 7, 0, 77, 1, 7, 0,175, 0, 7, 0, 78, 1, 2, 0,177, 0, 2, 0, 79, 2, - 2, 0,148, 2, 2, 0, 18, 0, 2, 0,149, 2, 2, 0,150, 2, 0, 0,151, 2, 0, 0,152, 2, 2, 0, 36, 2, 96, 0,153, 2, - 88, 0, 8, 0, 11, 0,154, 2, 7, 0,155, 2, 4, 0,156, 2, 0, 0, 18, 0, 0, 0,157, 2, 2, 0, 87, 1, 2, 0,158, 2, - 2, 0,159, 2, 86, 0, 7, 0, 4, 0,160, 2, 4, 0,161, 2, 4, 0,162, 2, 4, 0,163, 2, 2, 0, 51, 2, 0, 0,164, 2, - 0, 0, 18, 0, 90, 0, 5, 0, 4, 0,160, 2, 4, 0,161, 2, 0, 0,165, 2, 0, 0,166, 2, 2, 0, 18, 0, 97, 0, 2, 0, - 4, 0,167, 2, 7, 0, 43, 2, 91, 0, 3, 0, 97, 0,168, 2, 4, 0,169, 2, 4, 0, 18, 0, 89, 0, 4, 0, 7, 0,170, 2, - 2, 0,171, 2, 0, 0, 18, 0, 0, 0,166, 2, 92, 0, 4, 0, 0, 0,239, 0, 0, 0,184, 0, 0, 0,185, 0, 0, 0,186, 0, - 81, 0, 5, 0, 4, 0,172, 2, 4, 0,146, 2, 2, 0, 51, 2, 0, 0, 18, 0, 0, 0, 27, 0, 83, 0, 2, 0, 4, 0,173, 2, - 4, 0,174, 2, 82, 0, 6, 0, 42, 0,154, 2, 0, 0, 18, 0, 0, 0,157, 2, 2, 0, 87, 1, 2, 0,158, 2, 2, 0,159, 2, - 84, 0, 2, 0, 7, 0,175, 2, 4, 0, 18, 0, 85, 0, 4, 0, 0, 0,184, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,239, 0, - 93, 0, 1, 0, 7, 0,176, 2, 80, 0, 2, 0, 4, 0, 17, 2, 4, 0, 16, 0, 87, 0, 7, 0, 7, 0,155, 2, 42, 0,154, 2, - 0, 0, 18, 0, 0, 0,157, 2, 2, 0, 87, 1, 2, 0,158, 2, 2, 0,159, 2, 98, 0, 1, 0, 7, 0,177, 2, 99, 0, 1, 0, - 4, 0,178, 2,100, 0, 1, 0, 0, 0,179, 2,101, 0, 1, 0, 7, 0,155, 2,102, 0, 1, 0, 7, 0,175, 2,103, 0, 4, 0, - 4, 0,180, 2, 4, 0,181, 2, 7, 0,182, 2, 4, 0,183, 2,104, 0, 4, 0, 7, 0,239, 0, 7, 0,184, 0, 7, 0,185, 0, - 7, 0,186, 0,105, 0, 1, 0,104, 0,156, 2,106, 0, 5, 0, 4, 0,184, 2, 4, 0,185, 2, 0, 0, 18, 0, 0, 0, 51, 2, - 0, 0,186, 2,107, 0, 2, 0, 4, 0,187, 2, 4, 0,185, 2,108, 0, 10, 0,108, 0, 0, 0,108, 0, 1, 0,106, 0,188, 2, -105, 0,189, 2,107, 0,190, 2, 4, 0, 52, 0, 4, 0,143, 2, 4, 0,142, 2, 4, 0, 27, 0, 89, 0,191, 2, 96, 0, 14, 0, - 14, 0,192, 2, 89, 0,191, 2, 0, 0,193, 2, 0, 0,194, 2, 0, 0,195, 2, 0, 0,196, 2, 0, 0,197, 2, 0, 0,198, 2, - 0, 0,199, 2, 0, 0, 18, 0, 95, 0,137, 2, 95, 0,139, 2, 2, 0,200, 2, 0, 0,201, 2,109, 0, 1, 0, 4, 0,178, 2, -110, 0, 3, 0, 7, 0, 2, 0, 4, 0,181, 2, 4, 0, 27, 0,111, 0, 9, 0,111, 0, 0, 0,111, 0, 1, 0, 4, 0, 16, 0, - 4, 0, 87, 1, 4, 0,202, 2, 4, 0, 27, 0, 0, 0, 19, 0, 41, 0,124, 0, 0, 0,203, 2,112, 0, 6, 0,111, 0,204, 2, - 47, 0,205, 2, 27, 0,206, 2, 0, 0,207, 2, 4, 0,208, 2, 4, 0,209, 2,113, 0, 7, 0,111, 0,204, 2, 2, 0,210, 2, - 2, 0,192, 2, 2, 0,211, 2, 2, 0, 91, 0, 11, 0,212, 2, 11, 0,213, 2,114, 0, 5, 0,111, 0,204, 2, 27, 0,167, 0, - 0, 0, 19, 0, 7, 0,214, 2, 0, 0, 93, 0,115, 0, 5, 0,111, 0,204, 2, 27, 0,167, 0, 0, 0, 19, 0, 2, 0,215, 2, - 0, 0,216, 2,116, 0, 5, 0,111, 0,204, 2, 7, 0, 89, 0, 7, 0,217, 2, 4, 0,218, 2, 4, 0,219, 2,117, 0, 5, 0, -111, 0,204, 2, 27, 0,220, 2, 0, 0, 71, 0, 4, 0, 87, 1, 4, 0, 18, 0,118, 0, 13, 0,111, 0,204, 2, 27, 0,221, 2, - 27, 0,222, 2, 27, 0,223, 2, 27, 0,224, 2, 7, 0,225, 2, 7, 0,226, 2, 7, 0,217, 2, 7, 0,227, 2, 4, 0,228, 2, - 4, 0,229, 2, 4, 0, 91, 0, 4, 0,230, 2,119, 0, 5, 0,111, 0,204, 2, 2, 0,231, 2, 2, 0, 18, 0, 7, 0,232, 2, - 27, 0,233, 2,120, 0, 3, 0,111, 0,204, 2, 7, 0,234, 2, 4, 0, 91, 0,121, 0, 10, 0,111, 0,204, 2, 7, 0,235, 2, - 4, 0,236, 2, 4, 0, 27, 0, 2, 0, 91, 0, 2, 0,237, 2, 2, 0,238, 2, 2, 0,239, 2, 7, 0,240, 2, 0, 0,241, 2, -122, 0, 3, 0,111, 0,204, 2, 7, 0, 27, 0, 4, 0, 16, 0,123, 0, 6, 0,111, 0,204, 2,124, 0,242, 2,125, 0,243, 2, -126, 0,244, 2, 7, 0,245, 2, 4, 0, 16, 0,127, 0, 11, 0,111, 0,204, 2, 47, 0,205, 2, 27, 0,206, 2, 0, 0,207, 2, - 4, 0,208, 2, 4, 0,209, 2, 7, 0,214, 2, 4, 0,246, 2, 0, 0,241, 2, 7, 0,247, 2, 4, 0, 27, 0,128, 0, 12, 0, -111, 0,204, 2, 27, 0,248, 2, 42, 0,249, 2, 4, 0, 91, 0, 4, 0,250, 2, 7, 0,251, 2, 7, 0,252, 2, 7, 0,253, 2, - 7, 0,254, 2, 0, 0,207, 2, 4, 0,208, 2, 4, 0, 27, 0,129, 0, 3, 0,111, 0,204, 2, 7, 0,255, 2, 4, 0, 0, 3, -130, 0, 5, 0,111, 0,204, 2, 7, 0, 1, 3, 0, 0,241, 2, 2, 0, 18, 0, 2, 0, 2, 3,131, 0, 8, 0,111, 0,204, 2, - 27, 0,167, 0, 7, 0, 1, 3, 7, 0,255, 0, 7, 0,107, 0, 0, 0,241, 2, 2, 0, 18, 0, 2, 0, 16, 0,132, 0, 21, 0, -111, 0,204, 2, 47, 0,205, 2, 27, 0,206, 2, 0, 0,207, 2, 4, 0,208, 2, 4, 0,209, 2, 27, 0, 3, 3, 0, 0,241, 2, - 2, 0, 18, 0, 2, 0, 27, 0, 7, 0, 4, 3, 7, 0, 5, 3, 7, 0, 6, 3, 7, 0, 85, 2, 7, 0, 7, 3, 7, 0, 8, 3, - 7, 0, 9, 3, 7, 0, 10, 3, 7, 0, 11, 3, 7, 0, 12, 3, 7, 0, 66, 0,133, 0, 7, 0,111, 0,204, 2, 2, 0, 13, 3, - 2, 0, 14, 3, 4, 0, 30, 0, 27, 0,167, 0, 7, 0, 15, 3, 0, 0,241, 2,134, 0, 10, 0,111, 0,204, 2, 27, 0,167, 0, - 0, 0, 16, 3, 7, 0, 17, 3, 7, 0, 18, 3, 7, 0, 10, 3, 4, 0, 19, 3, 4, 0, 20, 3, 7, 0, 21, 3, 0, 0, 19, 0, -135, 0, 1, 0,111, 0,204, 2,136, 0, 7, 0,111, 0,204, 2, 41, 0,124, 0,137, 0, 22, 3,138, 0, 23, 3,139, 0, 24, 3, -140, 0, 25, 3, 14, 0, 26, 3,141, 0, 13, 0,111, 0,204, 2, 89, 0, 27, 3, 89, 0, 28, 3, 89, 0, 29, 3, 89, 0, 30, 3, - 89, 0, 31, 3, 89, 0, 32, 3, 86, 0, 33, 3, 4, 0, 34, 3, 4, 0, 35, 3, 7, 0, 36, 3, 7, 0, 37, 3,142, 0, 38, 3, -143, 0, 7, 0,111, 0,204, 2, 89, 0, 27, 3, 89, 0, 39, 3,144, 0, 40, 3,145, 0, 38, 3, 4, 0, 41, 3, 4, 0, 34, 3, -146, 0, 4, 0,111, 0,204, 2, 27, 0,167, 0, 4, 0, 42, 3, 4, 0, 27, 0,147, 0, 2, 0, 4, 0, 43, 3, 7, 0, 43, 2, -148, 0, 2, 0, 4, 0,127, 0, 4, 0, 44, 3,149, 0, 24, 0,111, 0,204, 2, 27, 0,167, 0, 0, 0,241, 2, 2, 0, 45, 3, - 2, 0, 18, 0, 2, 0, 87, 1, 2, 0, 27, 0,147, 0, 46, 3, 4, 0, 47, 3, 7, 0, 48, 3, 4, 0, 52, 0, 4, 0, 49, 3, -148, 0, 50, 3,147, 0, 51, 3, 4, 0, 52, 3, 4, 0, 53, 3, 4, 0, 54, 3, 4, 0, 44, 3, 7, 0, 55, 3, 7, 0, 56, 3, - 7, 0, 57, 3, 7, 0, 58, 3, 7, 0, 59, 3, 11, 0, 60, 3,150, 0, 8, 0,111, 0,204, 2,151, 0, 61, 3,144, 0, 40, 3, - 4, 0, 62, 3, 4, 0, 63, 3, 4, 0, 64, 3, 2, 0, 18, 0, 2, 0, 55, 0,152, 0, 8, 0,111, 0,204, 2, 27, 0, 43, 0, - 2, 0, 3, 1, 2, 0, 18, 0, 2, 0,231, 2, 2, 0, 55, 0, 7, 0, 65, 3, 7, 0, 66, 3,153, 0, 6, 0,111, 0,204, 2, - 4, 0, 67, 3, 2, 0, 18, 0, 2, 0, 68, 3, 7, 0, 69, 3, 0, 0,169, 0,154, 0, 8, 0,111, 0,204, 2, 0, 0, 70, 3, - 0, 0, 71, 3, 0, 0,198, 2, 0, 0, 72, 3, 0, 0, 73, 3, 0, 0, 91, 0, 0, 0,186, 2,155, 0, 3, 0,111, 0,204, 2, -156, 0, 74, 3,140, 0, 25, 3,157, 0, 10, 0,111, 0,204, 2, 27, 0, 75, 3, 27, 0, 76, 3, 0, 0, 77, 3, 7, 0, 78, 3, - 2, 0, 79, 3, 2, 0, 80, 3, 0, 0, 81, 3, 0, 0, 82, 3, 0, 0,216, 2,158, 0, 9, 0,111, 0,204, 2, 27, 0, 83, 3, - 0, 0, 77, 3, 7, 0, 84, 3, 7, 0, 85, 3, 0, 0, 87, 1, 0, 0,231, 2, 0, 0, 86, 3, 0, 0, 27, 0,159, 0, 1, 0, -111, 0,204, 2,160, 0, 11, 0,111, 0,204, 2, 0, 0,241, 2, 7, 0,127, 0, 7, 0, 87, 3, 7, 0, 88, 3, 7, 0, 89, 3, - 7, 0, 90, 3, 7, 0, 91, 3, 4, 0, 18, 0, 2, 0, 92, 3, 2, 0, 93, 3,161, 0, 9, 0,111, 0,204, 2, 27, 0, 94, 3, - 4, 0, 95, 3, 4, 0, 96, 3, 4, 0, 97, 3, 7, 0, 98, 3, 7, 0, 99, 3, 2, 0,231, 2, 2, 0, 18, 0,162, 0, 29, 0, -111, 0,204, 2,163, 0,100, 3,164, 0,101, 3, 4, 0,102, 3, 4, 0,103, 3, 7, 0,104, 3, 7, 0, 9, 3, 7, 0,105, 3, - 7, 0,250, 0, 7, 0,106, 3, 7, 0,107, 3, 7, 0,108, 3, 7, 0,109, 3, 7, 0,110, 3, 7, 0,245, 2, 4, 0,111, 3, - 4, 0,112, 3, 0, 0,113, 3, 0, 0,114, 3, 0, 0,115, 3, 0, 0,116, 3, 0, 0, 18, 0, 0, 0,117, 3, 2, 0,118, 3, - 2, 0,119, 3, 4, 0,219, 2, 7, 0,107, 0, 7, 0,120, 3, 4, 0, 27, 0,165, 0, 15, 0,111, 0,204, 2, 47, 0,205, 2, - 27, 0,206, 2, 0, 0,207, 2, 4, 0,208, 2, 4, 0,209, 2, 27, 0,121, 3, 27, 0,122, 3, 54, 0,100, 1, 0, 0,241, 2, - 7, 0,214, 2, 7, 0,123, 3, 0, 0, 18, 0, 0, 0,253, 0, 0, 0,216, 2,166, 0, 16, 0,111, 0,204, 2, 0, 0,241, 2, - 2, 0,124, 3, 2, 0,253, 0, 7, 0,125, 3, 54, 0,126, 3, 7, 0,127, 3, 7, 0,128, 3, 7, 0,129, 3, 0, 0,130, 3, - 4, 0,131, 3, 47, 0,132, 3, 27, 0,133, 3, 4, 0,134, 3, 0, 0,135, 3, 4, 0,136, 3,167, 0, 16, 0,111, 0,204, 2, - 0, 0,137, 3, 0, 0,138, 3, 7, 0,139, 3, 7, 0,140, 3, 0, 0,141, 3, 0, 0,142, 3, 0, 0,143, 3, 7, 0,129, 3, - 0, 0,130, 3, 4, 0,131, 3, 47, 0,132, 3, 27, 0,133, 3, 4, 0,134, 3, 0, 0,135, 3, 4, 0,136, 3,168, 0, 16, 0, -111, 0,204, 2, 0, 0,241, 2, 4, 0,144, 3, 4, 0,145, 3, 27, 0,146, 3, 7, 0,129, 3, 0, 0,130, 3, 4, 0,131, 3, - 47, 0,132, 3, 27, 0,133, 3, 4, 0,134, 3, 0, 0,135, 3, 7, 0,147, 3, 7, 0,148, 3, 2, 0,253, 0, 2, 0,149, 3, -169, 0, 5, 0,111, 0,204, 2,170, 0,150, 3,171, 0,151, 3, 4, 0, 16, 0, 4, 0, 27, 0,172, 0, 8, 0,111, 0,204, 2, - 7, 0,152, 3, 7, 0,153, 3, 7, 0,154, 3, 0, 0,250, 0, 0, 0, 18, 0, 0, 0, 87, 1, 0, 0, 27, 0,173, 0, 3, 0, -174, 0,155, 3, 4, 0, 70, 2, 0, 0, 93, 0,174, 0, 29, 0, 22, 0, 32, 0, 34, 0, 74, 0, 2, 0, 52, 2, 2, 0, 53, 2, - 2, 0,156, 3, 2, 0, 18, 0, 2, 0,157, 3, 2, 0,158, 3, 2, 0,159, 3, 2, 0, 30, 0, 0, 0,160, 3, 0, 0,161, 3, - 0, 0,162, 3, 0, 0,250, 1, 4, 0, 27, 0, 7, 0,163, 3, 7, 0,164, 3, 7, 0,165, 3, 7, 0,166, 3, 7, 0,167, 3, - 7, 0,168, 3, 29, 0,169, 3, 31, 0, 79, 0, 33, 0, 77, 2, 91, 0,132, 2, 0, 0, 71, 0, 7, 0,170, 3, 7, 0,171, 3, -173, 0,172, 3,175, 0, 5, 0,175, 0, 0, 0,175, 0, 1, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0,123, 0, 68, 0, 3, 0, - 7, 0,173, 3, 4, 0, 18, 0, 4, 0, 27, 0, 27, 0,128, 0, 22, 0, 32, 0, 34, 0, 74, 0,176, 0,174, 3, 2, 0, 16, 0, - 2, 0,175, 3, 4, 0,176, 3, 4, 0,177, 3, 4, 0,178, 3, 0, 0,179, 3, 27, 0, 37, 0, 27, 0,180, 3, 27, 0,181, 3, - 27, 0,182, 3, 27, 0,183, 3, 31, 0, 79, 0, 68, 0, 19, 2,177, 0,184, 3,177, 0,185, 3,178, 0,186, 3, 11, 0, 2, 0, -179, 0,187, 3,180, 0,188, 3,181, 0,189, 3, 14, 0,190, 3, 14, 0,191, 3, 14, 0, 32, 2, 14, 0,192, 3, 14, 0,193, 3, - 4, 0, 87, 1, 4, 0,194, 3, 63, 0, 34, 2, 0, 0,195, 3, 4, 0, 36, 2, 4, 0,196, 3, 7, 0, 77, 1, 7, 0,197, 3, - 7, 0,198, 3, 7, 0,175, 0, 7, 0,199, 3, 7, 0,200, 3, 7, 0, 78, 1, 7, 0,201, 3, 7, 0, 22, 2, 7, 0,202, 3, - 7, 0,203, 3, 7, 0,204, 3, 7, 0,205, 3, 7, 0,206, 3, 7, 0,207, 3, 7, 0, 17, 3, 7, 0,208, 3, 7, 0,244, 0, - 7, 0,209, 3, 4, 0,210, 3, 4, 0,211, 3, 2, 0, 18, 0, 2, 0,212, 3, 2, 0,213, 3, 2, 0,214, 3, 2, 0,215, 3, - 2, 0,216, 3, 2, 0,217, 3, 2, 0,218, 3, 2, 0,219, 3, 0, 0,220, 3, 0, 0,221, 3, 4, 0,222, 3, 4, 0,223, 3, - 4, 0,224, 3, 4, 0,225, 3, 7, 0,226, 3, 7, 0, 83, 0, 7, 0,227, 3, 7, 0,228, 3, 7, 0,229, 3, 7, 0,230, 3, - 7, 0,231, 3, 7, 0,219, 0, 7, 0,232, 3, 7, 0,233, 3, 7, 0,234, 3, 7, 0,235, 3, 7, 0,236, 3, 2, 0,237, 3, - 0, 0,238, 3, 0, 0,239, 3, 0, 0,240, 3, 0, 0,241, 3, 0, 0,109, 0, 0, 0,242, 3, 7, 0,243, 3, 7, 0,244, 3, - 14, 0,245, 3, 14, 0,246, 3, 14, 0,247, 3, 14, 0,248, 3, 7, 0,249, 3, 2, 0, 17, 2, 2, 0,250, 3, 7, 0,156, 2, - 4, 0,251, 3, 4, 0,252, 3,182, 0,253, 3, 2, 0,254, 3, 2, 0,251, 0, 7, 0,255, 3, 14, 0, 0, 4, 14, 0, 1, 4, - 14, 0, 2, 4, 14, 0, 3, 4,183, 0, 73, 1,184, 0, 4, 4, 64, 0, 5, 4, 0, 0, 6, 4, 0, 0, 7, 4, 2, 0, 70, 2, - 7, 0,148, 2,156, 0, 8, 4,144, 0, 9, 4,144, 0, 10, 4, 10, 0, 11, 4, 10, 0, 12, 4, 4, 0, 13, 4, 4, 0, 14, 4, - 14, 0, 15, 4, 14, 0, 16, 4, 14, 0, 17, 4, 7, 0, 18, 4,185, 0, 14, 0,185, 0, 0, 0,185, 0, 1, 0, 27, 0, 37, 0, - 7, 0, 17, 3, 7, 0, 79, 1, 7, 0, 18, 3, 7, 0, 10, 3, 0, 0, 19, 0, 4, 0, 19, 3, 4, 0, 20, 3, 4, 0, 19, 4, - 2, 0, 16, 0, 2, 0, 20, 4, 7, 0, 21, 3,186, 0, 12, 0,186, 0, 0, 0,186, 0, 1, 0, 27, 0, 43, 0, 4, 0, 21, 4, - 4, 0, 17, 2, 7, 0, 79, 1, 7, 0, 22, 4, 7, 0, 23, 4, 7, 0,175, 2, 2, 0, 16, 0, 0, 0, 24, 4, 0, 0, 25, 4, -183, 0, 40, 0, 4, 0, 18, 0, 2, 0, 26, 4, 2, 0, 27, 4, 2, 0, 10, 3, 2, 0, 28, 4, 2, 0, 29, 4, 2, 0, 30, 4, - 2, 0, 31, 4, 2, 0, 32, 4, 7, 0, 33, 4, 7, 0, 34, 4, 7, 0, 35, 4, 7, 0, 36, 4, 7, 0, 37, 4, 7, 0, 38, 4, - 7, 0, 39, 4, 7, 0, 40, 4, 7, 0, 41, 4, 7, 0, 42, 4, 7, 0, 43, 4, 7, 0, 44, 4, 7, 0, 45, 4, 7, 0, 46, 4, - 7, 0, 47, 4, 7, 0, 48, 4, 7, 0, 49, 4, 7, 0, 50, 4, 7, 0, 51, 4, 7, 0, 52, 4, 7, 0, 53, 4, 7, 0, 54, 4, - 7, 0, 55, 4, 7, 0, 56, 4, 7, 0, 57, 4, 7, 0, 58, 4, 7, 0, 59, 4, 47, 0,168, 0,187, 0, 60, 4, 7, 0, 61, 4, - 4, 0,219, 2,188, 0, 5, 0, 64, 0,253, 1, 7, 0, 62, 4, 7, 0, 63, 4, 2, 0, 18, 0, 2, 0, 64, 4,189, 0, 5, 0, -189, 0, 0, 0,189, 0, 1, 0, 4, 0, 16, 0, 4, 0, 65, 4, 11, 0, 2, 0,190, 0, 9, 0,190, 0, 0, 0,190, 0, 1, 0, - 4, 0, 66, 4, 4, 0, 67, 4, 4, 0, 68, 4, 4, 0, 18, 0, 11, 0, 69, 4, 11, 0, 70, 4, 14, 0, 71, 4,140, 0, 23, 0, -140, 0, 0, 0,140, 0, 1, 0, 4, 0, 18, 0, 4, 0, 72, 4, 4, 0, 73, 4, 4, 0, 74, 4, 4, 0, 75, 4, 4, 0, 76, 4, - 4, 0, 77, 4, 4, 0, 78, 4, 4, 0, 27, 0, 4, 0, 67, 4, 4, 0, 17, 2, 2, 0, 79, 4, 2, 0, 55, 0, 0, 0, 19, 0, - 0, 0, 80, 4, 0, 0, 81, 4, 0, 0, 82, 4, 0, 0, 83, 4, 14, 0, 84, 4,191, 0, 85, 4, 11, 0, 86, 4,192, 0, 1, 0, - 7, 0, 50, 2,182, 0, 30, 0, 4, 0, 18, 0, 7, 0, 87, 4, 7, 0, 88, 4, 7, 0, 89, 4, 4, 0, 90, 4, 4, 0, 91, 4, - 4, 0, 92, 4, 4, 0, 93, 4, 7, 0, 94, 4, 7, 0, 95, 4, 7, 0, 96, 4, 7, 0, 97, 4, 7, 0, 98, 4, 7, 0, 99, 4, - 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4, 7, 0,103, 4, 7, 0,104, 4, 7, 0,105, 4, 7, 0,106, 4, 7, 0,107, 4, - 7, 0,108, 4, 7, 0,109, 4, 7, 0,110, 4, 7, 0,111, 4, 4, 0,112, 4, 4, 0,113, 4, 7, 0,114, 4, 7, 0,232, 3, -184, 0, 54, 0, 4, 0, 67, 4, 4, 0,115, 4,193, 0,116, 4,194, 0,117, 4, 0, 0, 27, 0, 0, 0,118, 4, 2, 0,119, 4, - 7, 0,120, 4, 0, 0,121, 4, 7, 0,122, 4, 7, 0,123, 4, 7, 0,124, 4, 7, 0,125, 4, 7, 0,126, 4, 7, 0,127, 4, - 7, 0,128, 4, 7, 0,129, 4, 7, 0,130, 4, 2, 0,131, 4, 0, 0,132, 4, 2, 0,133, 4, 7, 0,134, 4, 7, 0,135, 4, - 0, 0,136, 4, 4, 0,128, 0, 4, 0,137, 4, 4, 0,138, 4, 2, 0,139, 4, 2, 0,140, 4,192, 0,141, 4, 4, 0,142, 4, - 4, 0, 81, 0, 7, 0,143, 4, 7, 0,144, 4, 7, 0,145, 4, 7, 0,146, 4, 2, 0,147, 4, 2, 0,148, 4, 2, 0,149, 4, - 2, 0,150, 4, 2, 0,151, 4, 2, 0,152, 4, 2, 0,153, 4, 2, 0,154, 4,195, 0,155, 4, 7, 0,156, 4, 7, 0,157, 4, -140, 0,158, 4, 14, 0, 26, 3,188, 0,159, 4, 7, 0,160, 4, 7, 0,161, 4, 7, 0,162, 4, 4, 0,163, 4,196, 0, 1, 0, - 7, 0,164, 4,156, 0, 52, 0,155, 0,165, 4, 2, 0, 16, 0, 2, 0,166, 4, 2, 0,167, 4, 2, 0,168, 4, 7, 0,169, 4, - 2, 0,170, 4, 2, 0,171, 4, 7, 0,172, 4, 2, 0,173, 4, 2, 0,174, 4, 7, 0,175, 4, 7, 0,176, 4, 7, 0,177, 4, - 4, 0,178, 4, 4, 0,179, 4, 4, 0,180, 4, 4, 0, 27, 0, 7, 0,181, 4, 4, 0,182, 4, 7, 0,183, 4, 7, 0,184, 4, - 7, 0,185, 4, 79, 0,186, 4, 79, 0,187, 4, 0, 0,188, 4, 7, 0,189, 4, 7, 0,190, 4, 31, 0, 79, 0, 2, 0,191, 4, - 0, 0,192, 4, 0, 0,193, 4, 7, 0,194, 4, 4, 0,195, 4, 7, 0,196, 4, 7, 0,197, 4, 4, 0,198, 4, 4, 0, 18, 0, - 7, 0,199, 4, 7, 0,200, 4, 7, 0,201, 4,196, 0,202, 4, 4, 0, 52, 0, 7, 0,203, 4, 7, 0,204, 4, 7, 0,205, 4, - 7, 0,206, 4, 7, 0,207, 4, 7, 0,208, 4, 7, 0,209, 4, 4, 0,210, 4, 7, 0,211, 4,197, 0, 78, 0, 22, 0, 32, 0, - 34, 0, 74, 0, 2, 0,178, 0, 2, 0, 88, 1, 2, 0,124, 1, 2, 0,212, 4, 7, 0,213, 4, 7, 0,214, 4, 7, 0,215, 4, - 7, 0,216, 4, 7, 0,217, 4, 7, 0,218, 4, 7, 0,173, 1, 7, 0,175, 1, 7, 0,174, 1, 7, 0, 30, 0, 4, 0,219, 4, - 7, 0,220, 4, 7, 0,221, 4, 7, 0,222, 4, 7, 0,223, 4, 7, 0,224, 4, 7, 0,225, 4, 7, 0,226, 4, 2, 0,227, 4, - 2, 0, 87, 1, 2, 0,228, 4, 2, 0,229, 4, 2, 0,230, 4, 2, 0,231, 4, 2, 0,232, 4, 2, 0,233, 4, 7, 0,234, 4, - 7, 0,235, 4, 7, 0,236, 4, 7, 0,237, 4, 7, 0,238, 4, 7, 0,239, 4, 7, 0,240, 4, 7, 0,241, 4, 7, 0,242, 4, - 7, 0,243, 4, 7, 0,244, 4, 7, 0,245, 4, 2, 0,246, 4, 2, 0,247, 4, 2, 0,248, 4, 2, 0,249, 4, 7, 0,250, 4, - 7, 0,251, 4, 7, 0,252, 4, 7, 0,253, 4, 2, 0,254, 4, 2, 0,255, 4, 2, 0, 0, 5, 2, 0, 1, 5, 7, 0, 2, 5, - 7, 0, 3, 5, 7, 0, 4, 5, 7, 0, 5, 5, 7, 0, 6, 5, 7, 0, 7, 5, 7, 0, 8, 5, 2, 0, 9, 5, 2, 0, 10, 5, - 2, 0, 11, 5, 2, 0, 12, 5, 2, 0, 13, 5, 2, 0, 18, 0, 7, 0, 14, 5, 7, 0, 15, 5, 31, 0, 79, 0, 46, 0,143, 1, - 2, 0,144, 1, 2, 0, 76, 1, 2, 0,186, 2, 25, 0,153, 0, 57, 0, 70, 1,198, 0, 8, 0,198, 0, 0, 0,198, 0, 1, 0, - 4, 0,210, 3, 4, 0, 16, 5, 4, 0, 18, 0, 2, 0, 17, 5, 2, 0, 18, 5, 27, 0,167, 0,199, 0, 13, 0, 11, 0, 19, 5, - 11, 0, 20, 5, 4, 0, 21, 5, 4, 0, 22, 5, 4, 0, 23, 5, 4, 0, 24, 5, 4, 0, 25, 5, 4, 0, 26, 5, 4, 0, 27, 5, - 4, 0, 28, 5, 4, 0, 29, 5, 4, 0, 27, 0, 0, 0, 30, 5,200, 0, 5, 0, 11, 0, 31, 5, 11, 0, 32, 5, 4, 0, 33, 5, - 4, 0, 30, 0, 0, 0, 34, 5,201, 0, 17, 0, 4, 0, 35, 5, 4, 0, 36, 5, 4, 0, 37, 5, 4, 0, 38, 5, 4, 0, 39, 5, - 4, 0, 40, 5, 4, 0, 41, 5, 4, 0, 42, 5, 4, 0, 43, 5, 4, 0, 44, 5, 4, 0, 45, 5, 4, 0, 46, 5, 2, 0, 47, 5, - 2, 0, 48, 5, 4, 0, 49, 5, 4, 0, 50, 5, 4, 0, 66, 0,202, 0, 17, 0, 4, 0, 16, 0, 4, 0, 37, 5, 4, 0, 51, 5, - 4, 0, 52, 5, 4, 0, 53, 5, 4, 0, 54, 5, 4, 0, 55, 5, 4, 0, 56, 5, 7, 0, 57, 5, 4, 0, 58, 5, 4, 0, 91, 0, - 4, 0, 59, 5, 4, 0, 60, 5, 4, 0, 61, 5, 4, 0, 62, 5, 4, 0, 63, 5, 21, 0, 31, 0,203, 0, 9, 0, 4, 0, 64, 5, - 7, 0, 65, 5, 7, 0, 66, 5, 7, 0, 67, 5, 4, 0, 68, 5, 2, 0, 18, 0, 2, 0, 27, 0, 7, 0, 89, 4, 7, 0, 30, 0, -204, 0, 13, 0,204, 0, 0, 0,204, 0, 1, 0, 0, 0, 19, 0, 63, 0, 69, 5, 64, 0, 70, 5, 4, 0,210, 3, 4, 0, 71, 5, - 4, 0, 72, 5, 4, 0, 73, 5, 4, 0, 74, 5, 4, 0, 75, 5, 4, 0, 76, 5, 4, 0, 27, 0,205, 0, 13, 0, 0, 0, 77, 5, - 0, 0,250, 0, 0, 0, 78, 5, 0, 0, 18, 0, 0, 0, 79, 5, 0, 0, 80, 5, 0, 0, 81, 5, 0, 0, 82, 5, 2, 0, 83, 5, - 2, 0, 84, 5, 7, 0, 85, 5, 0, 0, 86, 5, 0, 0,123, 0,206, 0,106, 0,205, 0, 87, 5,199, 0, 88, 5,200, 0, 89, 5, -201, 0, 90, 5,202, 0, 91, 5, 4, 0, 41, 3, 4, 0,128, 0, 4, 0,137, 4, 7, 0, 92, 5, 4, 0, 93, 5, 4, 0, 94, 5, - 4, 0, 95, 5, 4, 0, 96, 5, 2, 0, 18, 0, 2, 0, 97, 5, 7, 0, 98, 5, 7, 0, 99, 5, 7, 0,100, 5, 7, 0,101, 5, - 7, 0,102, 5, 2, 0,103, 5, 2, 0,104, 5, 2, 0,105, 5, 2, 0,106, 5, 2, 0,250, 0, 2, 0,107, 5, 4, 0,108, 5, - 2, 0,109, 5, 2, 0,110, 5, 2, 0,110, 1, 2, 0,107, 0, 2, 0,111, 5, 2, 0,112, 5, 2, 0,113, 5, 2, 0,114, 5, - 2, 0,115, 5, 2, 0, 78, 5, 2, 0, 77, 5, 2, 0,116, 5, 2, 0, 79, 5, 2, 0,117, 5, 4, 0,118, 5, 4, 0, 87, 1, - 4, 0,119, 5, 2, 0,120, 5, 2, 0, 66, 0, 2, 0,121, 5, 2, 0,122, 5, 2, 0,123, 5, 2, 0,124, 5, 2, 0,125, 5, - 2, 0,126, 5, 19, 0,127, 5, 19, 0,128, 5, 18, 0,129, 5, 14, 0,130, 5, 2, 0,131, 5, 2, 0,132, 5, 7, 0,133, 5, - 7, 0,134, 5, 7, 0,135, 5, 7, 0,136, 5, 4, 0,137, 5, 7, 0,138, 5, 7, 0,139, 5, 7, 0,140, 5, 7, 0,141, 5, - 2, 0,142, 5, 2, 0,143, 5, 2, 0,144, 5, 2, 0,145, 5, 2, 0,146, 5, 2, 0,147, 5, 7, 0,148, 5, 7, 0,149, 5, - 7, 0,150, 5, 0, 0,151, 5, 4, 0,152, 5, 2, 0,153, 5, 2, 0,250, 1, 0, 0,154, 5, 7, 0,155, 5, 7, 0,156, 5, - 0, 0,157, 5, 0, 0,158, 5, 0, 0,159, 5, 0, 0,160, 5, 4, 0,161, 5, 2, 0,162, 5, 2, 0,163, 5, 7, 0,164, 5, - 7, 0,165, 5, 2, 0,166, 5, 2, 0,167, 5, 7, 0,168, 5, 2, 0,169, 5, 2, 0,170, 5, 4, 0,171, 5, 2, 0,172, 5, - 2, 0,173, 5, 2, 0,174, 5, 2, 0,175, 5, 7, 0,176, 5, 7, 0, 30, 0, 37, 0,177, 5, 0, 0,178, 5,207, 0, 9, 0, -207, 0, 0, 0,207, 0, 1, 0, 0, 0,179, 5, 2, 0,180, 5, 2, 0,181, 5, 2, 0,182, 5, 2, 0, 66, 0, 7, 0,183, 5, - 7, 0, 30, 0,208, 0, 7, 0, 2, 0,236, 2, 2, 0, 87, 1, 2, 0, 99, 3, 2, 0,184, 5, 7, 0,185, 5, 7, 0, 30, 0, - 37, 0,186, 5,209, 0, 5, 0, 7, 0,187, 5, 0, 0, 16, 0, 0, 0, 66, 0, 0, 0, 30, 0, 0, 0,250, 1,210, 0, 15, 0, - 7, 0,188, 5, 7, 0,189, 5, 7, 0,190, 5, 7, 0,191, 5, 7, 0,192, 5, 7, 0,193, 5, 7, 0,194, 5, 7, 0,195, 5, - 7, 0,196, 5, 7, 0,197, 5, 4, 0,198, 5, 7, 0,199, 5, 7, 0,200, 5, 2, 0, 66, 0, 2, 0, 30, 0,211, 0, 32, 0, -209, 0,201, 5, 2, 0,202, 5, 2, 0,104, 5, 2, 0,105, 5, 2, 0,106, 5, 2, 0,250, 0, 2, 0,107, 5, 2, 0,203, 5, - 2, 0,204, 5, 2, 0,205, 5, 2, 0,206, 5,208, 0,207, 5, 2, 0,208, 5, 2, 0,109, 5, 7, 0,209, 5,210, 0,210, 5, - 7, 0,225, 4, 7, 0,226, 4, 4, 0, 18, 0, 2, 0, 87, 1, 2, 0,211, 5, 2, 0,228, 4, 2, 0,229, 4, 2, 0,212, 5, - 2, 0, 27, 0, 2, 0,230, 4, 2, 0,231, 4, 2, 0,232, 4, 2, 0,233, 4, 2, 0,213, 5, 2, 0, 66, 0, 7, 0,214, 5, -212, 0, 6, 0,212, 0, 0, 0,212, 0, 1, 0, 4, 0, 66, 4, 0, 0, 19, 0, 4, 0, 18, 0, 27, 0,215, 5,213, 0, 6, 0, -214, 0,151, 3, 11, 0,216, 5, 0, 0,217, 5, 4, 0, 91, 0, 4, 0,218, 5, 4, 0, 27, 0,215, 0, 8, 0,213, 0,219, 5, - 2, 0, 18, 0, 2, 0, 27, 0, 2, 0,220, 5, 2, 0,221, 5, 2, 0,222, 5, 4, 0, 66, 0, 11, 0,223, 5,216, 0, 6, 0, - 2, 0,107, 0, 2, 0, 72, 4, 2, 0,224, 5, 2, 0,230, 2, 4, 0, 18, 0, 7, 0,214, 2,217, 0, 14, 0, 2, 0, 18, 0, - 2, 0,225, 5, 2, 0,226, 5, 2, 0,227, 5,216, 0,228, 5, 11, 0,223, 5, 7, 0,229, 5, 7, 0, 55, 0, 4, 0,230, 5, - 4, 0,231, 5, 4, 0,232, 5, 4, 0,233, 5, 41, 0,124, 0, 27, 0,167, 0,218, 0, 14, 0,213, 0,219, 5, 4, 0, 91, 0, - 4, 0,234, 5, 7, 0,235, 5, 7, 0,236, 5, 7, 0,237, 5, 4, 0,238, 5, 4, 0,239, 5, 7, 0,240, 5, 7, 0,241, 5, - 4, 0,242, 5, 7, 0,243, 5, 7, 0,244, 5, 4, 0, 27, 0,219, 0, 1, 0,213, 0,219, 5,220, 0, 7, 0,213, 0,219, 5, - 2, 0, 18, 0, 2, 0, 27, 0, 4, 0,240, 0, 4, 0,245, 5, 91, 0,246, 5, 11, 0,223, 5,221, 0, 5, 0,221, 0, 0, 0, -221, 0, 1, 0, 0, 0, 19, 0, 7, 0,247, 5, 4, 0, 27, 0,222, 0, 6, 0, 4, 0,107, 0, 7, 0,248, 5, 7, 0,181, 1, - 7, 0, 43, 2, 4, 0, 18, 0, 4, 0, 27, 0,223, 0, 85, 0,220, 0,249, 5,220, 0,250, 5,218, 0,174, 3,219, 0,251, 5, - 7, 0,252, 5, 2, 0,253, 5, 2, 0,250, 1, 7, 0,254, 5, 7, 0,255, 5, 2, 0, 72, 4, 2, 0, 0, 6, 7, 0, 1, 6, - 7, 0, 2, 6, 7, 0, 3, 6, 2, 0, 4, 6, 2, 0,230, 5, 2, 0, 5, 6, 2, 0, 6, 6, 2, 0, 7, 6, 2, 0, 8, 6, - 7, 0, 9, 6, 7, 0, 10, 6, 7, 0, 11, 6, 2, 0, 12, 6, 2, 0, 13, 6, 2, 0, 14, 6, 2, 0, 15, 6, 2, 0, 16, 6, - 2, 0, 17, 6, 2, 0, 18, 6, 2, 0, 19, 6,215, 0, 20, 6,217, 0, 21, 6, 7, 0, 22, 6, 7, 0, 23, 6, 7, 0, 24, 6, - 2, 0, 25, 6, 2, 0, 26, 6, 0, 0, 27, 6, 0, 0, 28, 6, 2, 0, 29, 6, 7, 0, 30, 6, 7, 0, 31, 6, 7, 0, 32, 6, - 7, 0, 33, 6, 7, 0, 34, 6, 7, 0, 35, 6, 7, 0, 36, 6, 7, 0, 37, 6, 7, 0, 38, 6, 7, 0, 39, 6, 2, 0, 40, 6, - 0, 0, 41, 6, 0, 0, 42, 6, 0, 0, 43, 6, 0, 0, 44, 6, 27, 0, 45, 6, 0, 0, 46, 6, 0, 0, 47, 6, 0, 0, 48, 6, - 0, 0, 49, 6, 0, 0, 50, 6, 0, 0, 51, 6, 0, 0, 52, 6, 0, 0, 53, 6, 0, 0, 54, 6, 0, 0, 55, 6, 2, 0, 56, 6, - 2, 0, 57, 6, 2, 0, 58, 6, 2, 0, 59, 6, 0, 0, 60, 6, 0, 0, 61, 6, 0, 0, 62, 6, 0, 0, 63, 6, 4, 0, 64, 6, - 4, 0, 65, 6, 4, 0, 66, 6, 4, 0, 67, 6, 2, 0, 68, 6, 2, 0, 66, 0, 4, 0, 69, 6, 7, 0, 70, 6, 7, 0, 71, 6, -222, 0, 72, 6,224, 0, 8, 0, 4, 0, 73, 6, 4, 0, 74, 6, 4, 0, 75, 6, 4, 0, 76, 6, 4, 0, 77, 6, 4, 0, 78, 6, - 4, 0, 52, 0, 4, 0,143, 2,225, 0, 4, 0, 7, 0, 79, 6, 0, 0, 80, 6, 0, 0, 81, 6, 2, 0, 18, 0,226, 0, 4, 0, - 7, 0, 82, 6, 4, 0, 18, 0, 4, 0, 83, 6, 4, 0, 55, 0, 41, 0, 46, 0, 22, 0, 32, 0, 34, 0, 74, 0, 27, 0,215, 5, -197, 0, 84, 6, 41, 0, 85, 6, 14, 0, 86, 6,198, 0, 87, 6, 27, 0, 88, 6, 7, 0, 89, 6, 7, 0, 90, 6, 7, 0, 91, 6, - 7, 0, 92, 6, 4, 0,210, 3, 4, 0, 93, 6, 4, 0, 94, 6, 2, 0, 18, 0, 2, 0, 76, 1, 57, 0, 70, 1,227, 0, 95, 6, -223, 0, 96, 6,228, 0, 97, 6,206, 0,184, 0,203, 0, 98, 6, 14, 0,101, 0, 14, 0, 99, 6, 11, 0,100, 6, 11, 0,101, 6, - 11, 0,102, 6, 11, 0,103, 6, 11, 0,104, 6,229, 0,105, 6, 2, 0,106, 6, 2, 0,107, 6, 2, 0,251, 0, 2, 0,211, 3, - 4, 0,221, 3, 4, 0,108, 6, 14, 0,109, 6,209, 0,201, 5,211, 0,110, 6,225, 0,111, 6,179, 0,187, 3,226, 0,112, 6, -230, 0,113, 6, 10, 0, 12, 4, 10, 0,114, 6,231, 0, 14, 0,231, 0, 0, 0,231, 0, 1, 0, 42, 0,242, 0, 40, 0, 69, 1, -230, 0,113, 6,232, 0,115, 6, 7, 0,100, 2, 7, 0,101, 2, 7, 0,107, 0, 7, 0,116, 6, 2, 0,117, 6, 2, 0, 18, 0, - 2, 0,142, 0, 2, 0, 27, 0,233, 0, 39, 0, 7, 0,118, 6, 7, 0,119, 6, 7, 0,120, 6, 7, 0,121, 6, 7, 0,122, 6, - 7, 0,123, 6, 7, 0,124, 6, 7, 0,125, 6, 7, 0,126, 6, 68, 0,127, 6,179, 0,187, 3,233, 0,128, 6,234, 0,129, 6, -235, 0,130, 6,236, 0,131, 6,237, 0,132, 6,238, 0,133, 6, 7, 0,134, 6, 7, 0,135, 6, 7, 0, 94, 1, 7, 0,136, 6, - 7, 0,137, 6, 7, 0,138, 6, 7, 0,139, 6, 7, 0,174, 0, 7, 0,140, 6, 0, 0,141, 6, 0, 0,142, 6, 0, 0,117, 6, - 0, 0,143, 6, 2, 0,144, 6, 2, 0,145, 6, 7, 0,146, 6, 2, 0,147, 6, 2, 0,148, 6, 7, 0,149, 6, 7, 0,150, 6, - 7, 0,151, 6, 7, 0,152, 6,239, 0, 51, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, - 2, 0,156, 6, 7, 0,135, 6, 7, 0, 94, 1, 7, 0,157, 6, 2, 0,158, 6, 0, 0,216, 2, 4, 0,159, 6, 2, 0,142, 6, - 2, 0,117, 6, 27, 0,215, 5, 27, 0,160, 6, 14, 0,161, 6,231, 0,162, 6,239, 0,128, 6, 0, 0,163, 6, 4, 0,210, 3, - 4, 0, 93, 6, 2, 0,164, 6, 2, 0,165, 6, 2, 0,166, 6, 2, 0,167, 6, 2, 0, 18, 0, 2, 0, 35, 2, 7, 0,113, 0, - 7, 0,168, 6, 7, 0,169, 6, 7, 0,170, 6, 7, 0,174, 0, 7, 0, 89, 6, 2, 0,171, 6, 2, 0,172, 6, 2, 0,173, 6, - 0, 0,174, 6, 0, 0,175, 6, 0, 0,176, 6, 0, 0,177, 6, 0, 0,178, 6, 14, 0,179, 6, 14, 0,180, 6, 14, 0,181, 6, - 2, 0,182, 6, 2, 0,157, 2, 2, 0,183, 6, 0, 0,184, 6, 11, 0,185, 6,179, 0,187, 3,241, 0, 24, 0, 19, 0,240, 0, - 19, 0, 62, 0, 18, 0,186, 6, 18, 0,187, 6, 18, 0,188, 6, 7, 0,189, 6, 7, 0,190, 6, 7, 0,191, 6, 7, 0,192, 6, - 2, 0,193, 6, 2, 0,194, 6, 2, 0,195, 6, 2, 0,196, 6, 2, 0,197, 6, 2, 0, 18, 0, 2, 0,198, 6, 2, 0,199, 6, - 2, 0,200, 6, 2, 0,201, 6, 2, 0,202, 6, 2, 0,167, 6, 7, 0,203, 6, 4, 0,204, 6, 4, 0,205, 6,240, 0, 6, 0, -240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, 2, 0,156, 6,242, 0, 8, 0,240, 0, 0, 0, -240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, 2, 0,156, 6, 0, 0,206, 6, 0, 0,123, 0,243, 0, 14, 0, -240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, 2, 0,156, 6,241, 0,207, 6,244, 0,208, 6, - 14, 0,209, 6, 2, 0, 87, 1, 2, 0,210, 6, 4, 0, 18, 0, 7, 0,211, 6, 4, 0,167, 6,245, 0, 21, 0,240, 0, 0, 0, -240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, 2, 0,156, 6,241, 0,207, 6, 2, 0,212, 6, 2, 0,213, 6, - 2, 0,214, 6, 2, 0,215, 6, 2, 0,198, 6, 2, 0,216, 6, 2, 0,217, 6, 0, 0, 18, 0, 0, 0, 27, 0, 11, 0, 76, 2, - 4, 0,218, 6, 4, 0,219, 6, 22, 0,220, 6, 11, 0,221, 6,246, 0, 18, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, - 4, 0,154, 6, 7, 0,155, 6, 2, 0,156, 6,241, 0,207, 6, 7, 0,100, 2, 7, 0,101, 2, 2, 0,212, 6, 2, 0,222, 6, - 2, 0,223, 6, 2, 0,224, 6, 4, 0, 18, 0, 7, 0,225, 6, 4, 0,117, 6, 4, 0, 27, 0,179, 0,187, 3,247, 0, 16, 0, - 0, 0,226, 6, 0, 0,227, 6, 0, 0,228, 6, 0, 0,229, 6, 0, 0,230, 6, 0, 0,231, 6, 4, 0,232, 6, 4, 0,233, 6, - 4, 0,234, 6, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0,235, 6, 2, 0,236, 6, 2, 0,193, 1, 2, 0,237, 6, 0, 0,238, 6, -248, 0, 16, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 4, 0,239, 6,247, 0,240, 6,249, 0,241, 6, - 14, 0,242, 6, 14, 0,243, 6,250, 0,244, 6,238, 0,245, 6,251, 0,246, 6, 2, 0,247, 6, 2, 0,248, 6, 2, 0,249, 6, - 2, 0, 30, 0,252, 0, 15, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, 2, 0,156, 6, -241, 0,207, 6, 14, 0,250, 6,253, 0,251, 6, 0, 0,252, 6,254, 0,253, 6, 2, 0, 18, 0, 2, 0,254, 6, 2, 0,255, 6, - 2, 0, 0, 7,255, 0, 25, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 4, 0, 18, 0, 42, 0,249, 2, - 40, 0, 69, 1, 54, 0, 1, 7, 0, 1, 2, 7, 1, 1, 3, 7,179, 0,187, 3, 7, 0, 4, 7, 7, 0,100, 2, 7, 0,101, 2, - 7, 0,225, 6, 7, 0, 5, 7, 7, 0, 6, 7, 2, 0, 7, 7, 2, 0, 27, 0, 2, 0, 8, 7, 2, 0, 9, 7, 0, 0, 10, 7, - 0, 0, 11, 7, 0, 0, 12, 7, 0, 0,167, 6, 2, 1, 11, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, - 7, 0,155, 6, 2, 0,156, 6, 2, 0,210, 6, 2, 0, 18, 0, 4, 0, 27, 0,244, 0,208, 6,241, 0,207, 6, 3, 1, 31, 0, -240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, 2, 0,156, 6, 37, 0, 13, 7, 4, 0, 14, 7, - 4, 0, 15, 7, 2, 0, 91, 0, 2, 0, 16, 7, 2, 0, 17, 7, 0, 0, 18, 7, 0, 0, 19, 7, 4, 0, 20, 7, 4, 0, 21, 7, - 4, 0, 22, 7, 2, 0, 23, 7, 2, 0, 24, 7, 2, 0, 25, 7, 2, 0, 26, 7, 7, 0, 27, 7, 18, 0, 28, 7, 18, 0, 29, 7, - 4, 0, 30, 7, 4, 0, 31, 7, 0, 0, 32, 7, 0, 0, 33, 7, 2, 0, 34, 7, 0, 0,216, 2, 11, 0, 35, 7, 4, 1, 10, 0, - 22, 0, 32, 0, 11, 0, 36, 7, 11, 0, 37, 7, 11, 0, 38, 7, 11, 0, 39, 7, 11, 0, 40, 7, 4, 0, 91, 0, 4, 0, 41, 7, - 0, 0, 42, 7, 0, 0, 43, 7, 5, 1, 10, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, - 4, 1, 44, 7, 2, 0, 91, 0, 2, 0, 16, 7, 4, 0, 66, 0, 11, 0, 45, 7, 6, 1, 3, 0, 6, 1, 0, 0, 6, 1, 1, 0, - 7, 0, 46, 7, 7, 1, 9, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6,241, 0,207, 6, - 14, 0, 47, 7, 4, 0, 48, 7, 4, 0, 18, 0, 8, 1, 27, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, - 7, 0,155, 6, 2, 0,156, 6,241, 0,207, 6, 22, 0, 49, 7, 22, 0, 80, 0, 2, 0, 18, 0, 2, 0, 66, 0, 7, 0, 50, 7, - 7, 0,100, 2, 7, 0,101, 2, 7, 0,225, 6, 7, 0, 51, 7, 7, 0, 52, 7, 7, 0, 53, 7, 57, 0, 70, 1, 57, 0, 54, 7, - 4, 0, 55, 7, 2, 0, 56, 7, 2, 0, 57, 7, 2, 0,251, 0, 2, 0, 86, 1, 14, 0, 58, 7,179, 0,187, 3, 9, 1, 10, 0, -240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, 2, 0,156, 6, 2, 0, 18, 0, 2, 0,219, 3, - 4, 0, 27, 0,179, 0,187, 3, 10, 1, 7, 0, 10, 1, 0, 0, 10, 1, 1, 0, 4, 0, 59, 7, 4, 0, 22, 0, 0, 0, 85, 0, - 4, 0, 60, 7, 4, 0, 16, 0, 11, 1, 14, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, - 2, 0,156, 6, 4, 0, 17, 7, 4, 0, 27, 0, 14, 0, 61, 7, 14, 0, 62, 7, 0, 0, 63, 7, 0, 0, 64, 7, 4, 0, 65, 7, - 4, 0, 66, 7, 12, 1, 6, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 4, 0, 27, 0, 0, 0, 67, 7, - 13, 1, 28, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,100, 2, 7, 0,101, 2, 7, 0, 68, 7, - 7, 0, 69, 7, 7, 0,225, 6,232, 0, 70, 7,230, 0,113, 6, 14, 1, 2, 7, 4, 0, 18, 0, 2, 0, 87, 1, 2, 0,117, 6, - 4, 0, 71, 7, 7, 0, 72, 7, 7, 0,153, 3, 7, 0, 99, 3, 4, 0, 27, 0, 7, 0, 73, 7, 7, 0, 74, 7, 4, 0, 75, 7, - 4, 0, 30, 0, 11, 0, 76, 7, 2, 0, 77, 7, 2, 0, 78, 7, 4, 0,250, 1, 15, 1, 7, 0, 15, 1, 0, 0, 15, 1, 1, 0, - 0, 0, 79, 7, 2, 0, 80, 7, 2, 0, 81, 7, 2, 0, 82, 7, 2, 0, 27, 0, 16, 1, 12, 0, 2, 0, 81, 7, 2, 0, 83, 7, - 2, 0, 84, 7, 0, 0,216, 2, 2, 0, 85, 7, 2, 0, 86, 7, 2, 0, 87, 7, 2, 0, 88, 7, 2, 0, 89, 7, 2, 0,198, 6, - 7, 0, 90, 7, 7, 0, 91, 7, 17, 1, 18, 0, 17, 1, 0, 0, 17, 1, 1, 0, 0, 0, 19, 0, 16, 1, 92, 7, 16, 1, 93, 7, - 16, 1, 94, 7, 16, 1, 95, 7, 7, 0, 96, 7, 2, 0, 97, 7, 2, 0, 98, 7, 2, 0, 99, 7, 2, 0,100, 7, 2, 0,101, 7, - 2, 0,102, 7, 2, 0,103, 7, 2, 0,104, 7, 2, 0,105, 7, 2, 0, 27, 0, 18, 1, 10, 0, 0, 0,106, 7, 0, 0,107, 7, - 0, 0,108, 7, 0, 0,109, 7, 0, 0,110, 7, 0, 0,111, 7, 2, 0,112, 7, 2, 0,113, 7, 2, 0,114, 7, 2, 0,115, 7, - 19, 1, 8, 0, 0, 0,116, 7, 0, 0,117, 7, 0, 0,118, 7, 0, 0,119, 7, 0, 0,120, 7, 0, 0,121, 7, 7, 0,116, 6, - 7, 0, 27, 0, 20, 1, 3, 0, 0, 0,122, 7, 2, 0,123, 7, 2, 0, 27, 0, 21, 1, 22, 0, 18, 1,124, 7, 18, 1,125, 7, - 18, 1,126, 7, 18, 1,127, 7, 18, 1,128, 7, 18, 1,129, 7, 18, 1,130, 7, 18, 1,131, 7, 18, 1,132, 7, 18, 1,133, 7, - 18, 1,134, 7, 18, 1,135, 7, 18, 1,136, 7, 18, 1,137, 7, 18, 1,138, 7, 18, 1,139, 7, 18, 1,140, 7, 19, 1,141, 7, - 20, 1,142, 7, 0, 0,143, 7, 7, 0,144, 7, 7, 0, 27, 0, 22, 1,122, 0, 0, 0,145, 7, 0, 0,146, 7, 0, 0,110, 7, - 0, 0,147, 7, 0, 0,122, 7, 0, 0,148, 7, 0, 0,149, 7, 0, 0,150, 7, 0, 0,151, 7, 0, 0,152, 7, 0, 0,153, 7, - 0, 0,154, 7, 0, 0,155, 7, 0, 0,156, 7, 0, 0,157, 7, 0, 0,158, 7, 0, 0,159, 7, 0, 0,160, 7, 0, 0,161, 7, - 0, 0,162, 7, 0, 0,163, 7, 0, 0,164, 7, 0, 0,165, 7, 0, 0,166, 7, 0, 0,167, 7, 0, 0,168, 7, 0, 0,169, 7, - 0, 0,170, 7, 0, 0,171, 7, 0, 0,172, 7, 0, 0,173, 7, 0, 0,174, 7, 0, 0,175, 7, 0, 0,176, 7, 0, 0,177, 7, - 0, 0,178, 7, 0, 0,179, 7, 0, 0,180, 7, 0, 0,181, 7, 0, 0,182, 7, 0, 0,183, 7, 0, 0,184, 7, 0, 0,185, 7, - 0, 0,186, 7, 0, 0,187, 7, 0, 0,188, 7, 0, 0,189, 7, 0, 0,190, 7, 0, 0,191, 7, 0, 0,192, 7, 0, 0,193, 7, - 0, 0,194, 7, 0, 0,195, 7, 0, 0,196, 7, 0, 0,197, 7, 0, 0,198, 7, 0, 0,199, 7, 0, 0,200, 7, 0, 0,201, 7, - 0, 0,202, 7, 0, 0,203, 7, 0, 0,204, 7, 0, 0,205, 7, 0, 0,206, 7, 0, 0,207, 7, 0, 0,208, 7, 0, 0,209, 7, - 0, 0,210, 7, 0, 0,211, 7, 0, 0,212, 7, 0, 0,213, 7, 0, 0,214, 7, 0, 0,215, 7, 0, 0,216, 7, 0, 0,217, 7, - 0, 0,218, 7, 0, 0,219, 7, 0, 0,220, 7, 0, 0,221, 7, 0, 0,222, 7, 0, 0,223, 7, 0, 0,224, 7, 0, 0,225, 7, - 0, 0,226, 7, 0, 0,227, 7, 0, 0,228, 7, 0, 0,229, 7, 0, 0,230, 7, 0, 0,231, 7, 0, 0,232, 7, 0, 0,233, 7, - 0, 0,234, 7, 0, 0,235, 7, 0, 0,236, 7, 0, 0,237, 7, 0, 0,238, 7, 0, 0,239, 7, 0, 0,240, 7, 0, 0,241, 7, - 0, 0,242, 7, 0, 0,243, 7, 0, 0,244, 7, 0, 0,245, 7, 0, 0,246, 7, 0, 0,247, 7, 0, 0,248, 7, 0, 0,249, 7, - 0, 0,250, 7, 0, 0,251, 7, 0, 0,252, 7, 0, 0,253, 7, 0, 0,254, 7, 0, 0,255, 7, 0, 0, 0, 8, 0, 0, 1, 8, - 0, 0, 2, 8, 0, 0, 3, 8, 0, 0, 4, 8, 0, 0, 5, 8, 0, 0, 6, 8, 0, 0, 7, 8, 0, 0, 8, 8, 23, 1, 5, 0, - 0, 0, 9, 8, 0, 0,168, 7, 0, 0,174, 7, 2, 0, 18, 0, 2, 0, 27, 0, 24, 1, 24, 0, 24, 1, 0, 0, 24, 1, 1, 0, - 0, 0,179, 5, 21, 1, 10, 8, 22, 1, 11, 8, 22, 1, 12, 8, 22, 1, 13, 8, 22, 1, 14, 8, 22, 1, 15, 8, 22, 1, 16, 8, - 22, 1, 17, 8, 22, 1, 18, 8, 22, 1, 19, 8, 22, 1, 20, 8, 22, 1, 21, 8, 22, 1, 22, 8, 22, 1, 23, 8, 22, 1, 24, 8, - 22, 1, 25, 8, 22, 1, 26, 8, 22, 1, 27, 8, 23, 1, 28, 8, 4, 0, 29, 8, 4, 0, 27, 0, 25, 1, 3, 0, 25, 1, 0, 0, - 25, 1, 1, 0, 0, 0, 30, 8, 26, 1, 5, 0, 4, 0, 18, 0, 4, 0, 27, 0, 7, 0,156, 2, 7, 0, 31, 8, 7, 0, 50, 2, - 27, 1, 95, 0, 4, 0, 18, 0, 4, 0, 32, 8, 4, 0, 33, 8, 0, 0, 34, 8, 0, 0, 35, 8, 0, 0, 36, 8, 0, 0, 37, 8, - 0, 0, 38, 8, 0, 0, 39, 8, 0, 0, 40, 8, 0, 0, 41, 8, 0, 0, 42, 8, 0, 0, 43, 8, 4, 0, 44, 8, 2, 0, 45, 8, - 2, 0, 46, 8, 2, 0, 47, 8, 2, 0, 48, 8, 4, 0, 49, 8, 4, 0, 50, 8, 4, 0, 51, 8, 4, 0, 52, 8, 2, 0, 53, 8, - 2, 0, 54, 8, 4, 0, 55, 8, 4, 0, 56, 8, 4, 0, 57, 8, 4, 0, 58, 8, 4, 0, 59, 8, 4, 0, 61, 7, 4, 0, 60, 8, - 2, 0, 61, 8, 2, 0, 62, 8, 2, 0, 63, 8, 2, 0, 64, 8, 14, 0, 65, 8, 14, 0, 66, 8, 14, 0, 67, 8, 14, 0, 68, 8, - 14, 0, 69, 8, 14, 0, 70, 8, 0, 0, 71, 8, 2, 0, 72, 8, 2, 0, 73, 8, 2, 0, 74, 8, 2, 0, 75, 8, 2, 0, 76, 8, - 2, 0, 77, 8, 2, 0, 78, 8, 2, 0, 79, 8, 26, 1, 80, 8, 2, 0, 81, 8, 2, 0, 82, 8, 2, 0, 83, 8, 2, 0, 84, 8, - 2, 0, 85, 8, 2, 0, 86, 8, 2, 0, 87, 8, 2, 0, 88, 8, 4, 0, 89, 8, 4, 0, 90, 8, 2, 0, 91, 8, 2, 0, 92, 8, - 2, 0, 93, 8, 2, 0, 94, 8, 2, 0, 95, 8, 2, 0, 96, 8, 2, 0, 97, 8, 2, 0, 98, 8, 2, 0, 99, 8, 2, 0,100, 8, - 2, 0,101, 8, 2, 0,102, 8, 2, 0,103, 8, 2, 0,104, 8, 2, 0,105, 8, 2, 0,106, 8, 2, 0,107, 8, 2, 0,108, 8, - 7, 0,109, 8, 4, 0,110, 8, 7, 0,111, 8, 2, 0, 25, 6, 2, 0, 26, 6, 2, 0,112, 8, 2, 0,113, 8, 50, 0,114, 8, - 7, 0,115, 8, 2, 0,116, 8, 2, 0,250, 1, 0, 0,117, 8, 4, 0,118, 8, 4, 0,119, 8, 7, 0,120, 8, 7, 0, 27, 0, - 28, 1, 24, 0, 22, 0, 32, 0, 14, 0,121, 8, 14, 0,122, 8, 14, 0,123, 8, 14, 0,153, 6, 41, 0,124, 0, 41, 0,124, 8, - 4, 0,125, 8, 4, 0, 66, 0, 2, 0,126, 8, 2, 0,127, 8, 2, 0,128, 8, 2, 0,129, 8, 2, 0,130, 8, 2, 0,131, 8, - 2, 0,132, 8, 2, 0,133, 8, 2, 0,134, 8, 2, 0,135, 8, 2, 0,136, 8, 2, 0, 27, 0,238, 0,137, 8, 11, 0,138, 8, - 2, 0,139, 8, 29, 1, 5, 0, 29, 1, 0, 0, 29, 1, 1, 0, 29, 1,140, 8, 15, 0,141, 8, 4, 0, 18, 0, 30, 1, 7, 0, - 30, 1, 0, 0, 30, 1, 1, 0, 29, 1,142, 8, 29, 1,143, 8, 2, 0,128, 5, 2, 0, 18, 0, 4, 0, 27, 0, 31, 1, 25, 0, - 31, 1, 0, 0, 31, 1, 1, 0, 32, 1,144, 8, 33, 1,246, 6, 0, 0,145, 8, 0, 0,146, 8, 0, 0,147, 8, 2, 0,148, 8, - 2, 0,149, 8, 2, 0,150, 8, 2, 0,151, 8, 2, 0,152, 8, 2, 0, 27, 0, 2, 0, 18, 0, 2, 0,153, 8, 2, 0,154, 8, - 2, 0,155, 8, 4, 0,156, 8, 31, 1,157, 8, 11, 0,158, 8, 4, 0,159, 8, 4, 0,160, 8, 4, 0,161, 8, 4, 0,162, 8, - 0, 0,163, 8, 34, 1, 22, 0, 34, 1, 0, 0, 34, 1, 1, 0, 29, 1,142, 8, 29, 1,143, 8, 29, 1,164, 8, 29, 1,165, 8, - 28, 1,166, 8, 18, 0, 50, 0, 0, 0,154, 6, 0, 0,167, 8, 2, 0,199, 6, 2, 0,200, 6, 2, 0,168, 8, 2, 0, 27, 0, - 2, 0,130, 8, 2, 0, 60, 7, 2, 0, 18, 0, 35, 1,144, 8, 14, 0,169, 8, 14, 0,153, 6, 14, 0,170, 8, 14, 0,171, 8, - 36, 1, 24, 0, 36, 1, 0, 0, 36, 1, 1, 0,241, 0,207, 6, 18, 0,172, 8, 18, 0,173, 8, 2, 0,199, 6, 2, 0,200, 6, - 2, 0,174, 8, 2, 0,175, 8, 2, 0,176, 8, 2, 0, 18, 0, 7, 0, 96, 2, 2, 0,150, 8, 2, 0,151, 8, 2, 0,129, 8, - 2, 0,177, 8, 2, 0,134, 8, 2, 0, 86, 1, 37, 1,144, 8, 14, 0,178, 8, 14, 0,179, 8, 14, 0,170, 8, 0, 0,180, 8, - 11, 0,181, 8, 38, 1, 14, 0, 0, 0,182, 8, 2, 0,183, 8, 2, 0,184, 8, 2, 0,185, 8, 2, 0,186, 8, 2, 0,117, 5, - 2, 0,187, 8, 28, 1,188, 8, 41, 0,189, 8, 4, 0,190, 8, 4, 0,191, 8, 4, 0,192, 8, 4, 0, 27, 0, 0, 0, 79, 7, - 39, 1, 3, 0, 0, 0,193, 8, 4, 0,194, 8, 4, 0,195, 8, 40, 1, 4, 0, 4, 0, 14, 7, 4, 0,196, 8, 4, 0, 20, 7, - 4, 0,197, 8, 41, 1, 2, 0, 4, 0,198, 8, 4, 0,199, 8, 42, 1, 5, 0, 7, 0,200, 8, 7, 0,201, 8, 7, 0,202, 8, - 4, 0, 18, 0, 4, 0, 27, 0, 43, 1, 7, 0, 0, 0,203, 8, 0, 0,228, 6, 44, 0,137, 0, 2, 0,204, 8, 2, 0, 79, 5, - 2, 0,205, 8, 2, 0,206, 8, 44, 1, 12, 0, 44, 1, 0, 0, 44, 1, 1, 0, 4, 0, 28, 0, 4, 0,207, 8, 4, 0,208, 8, - 4, 0,209, 8, 39, 1,210, 8, 0, 0,203, 8, 43, 1,181, 3, 40, 1,211, 8, 41, 1,212, 8, 42, 1,213, 8, 45, 1, 12, 0, - 0, 0, 35, 0, 11, 0,226, 0, 0, 0,227, 0, 4, 0,230, 0, 4, 0,238, 0, 11, 0,231, 0, 7, 0,233, 0, 7, 0,234, 0, - 11, 0,214, 8, 11, 0,215, 8, 11, 0,235, 0, 11, 0,237, 0, 46, 1, 50, 0, 46, 1, 0, 0, 46, 1, 1, 0, 11, 0,216, 8, - 11, 0, 25, 0, 0, 0, 19, 0, 4, 0, 18, 0, 4, 0, 16, 0, 4, 0, 22, 0, 4, 0, 89, 0, 4, 0,217, 8, 4, 0,218, 8, - 4, 0,208, 8, 4, 0,209, 8, 4, 0,219, 8, 4, 0,250, 0, 4, 0,220, 8, 4, 0,221, 8, 7, 0,222, 8, 7, 0,223, 8, - 7, 0,224, 8, 2, 0,225, 8, 2, 0,226, 8, 4, 0,227, 8, 4, 0,228, 8, 44, 1,229, 8, 31, 0, 79, 0, 41, 0,124, 0, - 27, 0,230, 8, 44, 0,137, 0,230, 0,113, 6, 7, 0,231, 8, 7, 0,232, 8, 45, 1, 71, 1, 46, 1,233, 8, 46, 1,234, 8, - 46, 1,235, 8, 14, 0,236, 8, 47, 1,237, 8, 11, 0,238, 8, 7, 0, 89, 4, 7, 0,239, 8, 7, 0,240, 8, 7, 0,241, 8, - 11, 0,242, 8, 4, 0,243, 8, 4, 0,244, 8, 4, 0,245, 8, 7, 0,246, 8, 4, 0,128, 0, 4, 0, 27, 0, 48, 1, 4, 0, - 48, 1, 0, 0, 48, 1, 1, 0, 14, 0,247, 8, 46, 1,248, 8,227, 0, 11, 0, 14, 0,249, 8, 14, 0,236, 8, 14, 0,250, 8, - 46, 1,251, 8, 0, 0,252, 8, 0, 0,253, 8, 4, 0,254, 8, 4, 0,255, 8, 4, 0, 0, 9, 4, 0, 27, 0, 19, 0, 1, 9, - 49, 1, 4, 0, 7, 0, 2, 9, 7, 0, 99, 3, 2, 0, 3, 9, 2, 0, 4, 9, 50, 1, 6, 0, 7, 0, 5, 9, 7, 0, 6, 9, - 7, 0, 7, 9, 7, 0, 8, 9, 4, 0, 9, 9, 4, 0, 10, 9, 51, 1, 8, 0, 7, 0, 11, 9, 7, 0, 12, 9, 7, 0, 13, 9, - 7, 0, 14, 9, 7, 0, 15, 9, 4, 0,255, 2, 4, 0, 16, 9, 4, 0, 17, 9, 52, 1, 2, 0, 7, 0,187, 5, 7, 0, 27, 0, - 53, 1, 5, 0, 7, 0, 18, 9, 7, 0, 19, 9, 4, 0, 91, 0, 4, 0,217, 2, 4, 0, 20, 9, 54, 1, 6, 0, 54, 1, 0, 0, - 54, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 21, 9, 2, 0, 55, 0, 55, 1, 8, 0, 55, 1, 0, 0, 55, 1, 1, 0, - 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 21, 9, 2, 0, 55, 0, 7, 0, 22, 0, 7, 0,128, 0, 56, 1, 45, 0, 56, 1, 0, 0, - 56, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 21, 9, 2, 0,246, 0, 2, 0,131, 4, 2, 0, 22, 9, 7, 0, 23, 9, - 7, 0, 90, 0, 7, 0, 12, 3, 4, 0, 24, 9, 4, 0, 81, 0, 4, 0,219, 2, 7, 0, 25, 9, 7, 0, 26, 9, 7, 0, 27, 9, - 7, 0, 28, 9, 7, 0, 29, 9, 7, 0, 30, 9, 7, 0, 9, 3, 7, 0, 68, 1, 7, 0, 31, 9, 7, 0, 32, 9, 7, 0, 27, 0, - 7, 0, 33, 9, 7, 0, 34, 9, 7, 0, 35, 9, 2, 0, 36, 9, 2, 0, 37, 9, 2, 0, 38, 9, 2, 0, 39, 9, 2, 0, 40, 9, - 2, 0, 41, 9, 2, 0, 42, 9, 2, 0, 43, 9, 2, 0, 35, 2, 2, 0, 44, 9, 2, 0, 32, 2, 2, 0, 45, 9, 0, 0, 46, 9, - 0, 0, 47, 9, 7, 0,244, 0, 57, 1, 48, 9, 64, 0,253, 1, 58, 1, 16, 0, 58, 1, 0, 0, 58, 1, 1, 0, 2, 0, 16, 0, - 2, 0, 18, 0, 2, 0, 21, 9, 2, 0,246, 0, 7, 0, 4, 3, 7, 0, 5, 3, 7, 0, 6, 3, 7, 0, 85, 2, 7, 0, 7, 3, - 7, 0, 8, 3, 7, 0, 49, 9, 7, 0, 9, 3, 7, 0, 11, 3, 7, 0, 12, 3,254, 0, 5, 0, 2, 0, 16, 0, 2, 0, 50, 9, - 2, 0, 18, 0, 2, 0, 51, 9, 22, 0, 49, 7,253, 0, 3, 0, 4, 0, 68, 0, 4, 0, 52, 9,254, 0, 2, 0, 59, 1, 7, 0, - 59, 1, 0, 0, 59, 1, 1, 0, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 4, 0, 21, 0, 11, 0, 53, 9, 60, 1, 5, 0, - 0, 0, 19, 0, 7, 0, 94, 1, 7, 0, 54, 9, 4, 0, 55, 9, 4, 0, 27, 0, 61, 1, 4, 0, 2, 0, 16, 0, 2, 0, 18, 0, - 2, 0, 66, 0, 2, 0, 30, 0, 62, 1, 4, 0, 0, 0, 19, 0, 63, 0, 56, 9, 7, 0, 94, 1, 7, 0, 27, 0, 63, 1, 6, 0, - 2, 0, 57, 9, 2, 0, 58, 9, 2, 0, 16, 0, 2, 0, 59, 9, 0, 0, 60, 9, 0, 0, 61, 9, 64, 1, 5, 0, 4, 0, 16, 0, - 4, 0, 27, 0, 0, 0, 19, 0, 0, 0, 62, 9, 0, 0, 63, 9, 65, 1, 3, 0, 4, 0, 16, 0, 4, 0, 27, 0, 0, 0, 19, 0, - 66, 1, 4, 0, 2, 0, 64, 9, 2, 0, 65, 9, 2, 0, 18, 0, 2, 0, 27, 0, 67, 1, 6, 0, 0, 0, 19, 0, 0, 0, 66, 9, - 2, 0, 67, 9, 2, 0, 9, 3, 2, 0, 87, 1, 2, 0, 30, 0, 68, 1, 5, 0, 0, 0, 19, 0, 7, 0, 99, 3, 7, 0,222, 4, - 2, 0, 18, 0, 2, 0,231, 2, 69, 1, 3, 0, 0, 0, 19, 0, 4, 0,219, 2, 4, 0, 64, 9, 70, 1, 7, 0, 0, 0, 19, 0, - 7, 0,222, 4, 0, 0, 68, 9, 0, 0, 69, 9, 2, 0, 87, 1, 2, 0, 66, 0, 4, 0, 70, 9, 71, 1, 4, 0, 0, 0, 71, 9, - 0, 0, 72, 9, 4, 0, 16, 0, 7, 0,235, 2, 72, 1, 3, 0, 27, 0, 73, 9, 0, 0, 74, 9, 0, 0, 75, 9, 73, 1, 18, 0, - 73, 1, 0, 0, 73, 1, 1, 0, 2, 0, 16, 0, 2, 0, 76, 9, 2, 0, 18, 0, 2, 0, 77, 9, 2, 0, 78, 9, 2, 0, 79, 9, - 2, 0, 66, 0, 2, 0, 30, 0, 0, 0, 19, 0, 11, 0, 2, 0, 74, 1, 80, 9, 27, 0, 43, 0, 2, 0,224, 5, 2, 0,181, 2, - 2, 0, 81, 9, 2, 0, 27, 0, 75, 1, 11, 0, 0, 0, 19, 0, 0, 0, 16, 0, 0, 0, 82, 9, 2, 0, 18, 0, 2, 0,231, 2, - 2, 0, 83, 9, 4, 0, 84, 9, 4, 0, 85, 9, 4, 0, 86, 9, 4, 0, 87, 9, 4, 0, 88, 9, 76, 1, 1, 0, 0, 0, 89, 9, - 77, 1, 4, 0, 37, 0, 13, 7, 0, 0, 30, 8, 4, 0, 87, 1, 4, 0, 18, 0, 74, 1, 18, 0, 74, 1, 0, 0, 74, 1, 1, 0, - 74, 1, 90, 9, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 91, 9, 2, 0, 79, 9, 2, 0, 76, 9, 2, 0, 92, 9, 2, 0, 30, 0, - 2, 0,250, 1, 0, 0, 19, 0, 11, 0, 2, 0, 78, 1, 80, 9, 73, 1, 93, 9, 2, 0, 14, 0, 2, 0, 94, 9, 4, 0, 95, 9, - 79, 1, 3, 0, 4, 0,245, 2, 4, 0, 27, 0, 27, 0, 43, 0, 80, 1, 15, 0,177, 0, 96, 9, 2, 0, 16, 0, 2, 0, 18, 0, - 7, 0, 23, 9, 7, 0, 90, 0, 0, 0, 19, 0, 0, 0, 97, 9, 2, 0, 98, 9, 2, 0, 99, 9, 2, 0,133, 0, 2, 0,100, 9, - 2, 0,101, 9, 2, 0, 27, 0, 7, 0,102, 9, 7, 0,103, 9, 81, 1, 8, 0, 7, 0,104, 9, 7, 0,105, 9, 7, 0,106, 9, - 7, 0,107, 9, 7, 0,108, 9, 7, 0,109, 9, 7, 0,110, 9, 7, 0,111, 9, 82, 1, 13, 0, 2, 0, 18, 0, 2, 0,112, 9, - 4, 0, 66, 0, 4, 0, 30, 0, 2, 0,184, 6, 7, 0, 89, 4, 7, 0,239, 8, 47, 1,237, 8, 81, 1,113, 9, 2, 0, 16, 0, - 2, 0,122, 5, 2, 0,221, 3, 2, 0,114, 9, 83, 1, 11, 0, 4, 0,245, 2, 2, 0, 16, 0, 2, 0, 18, 0, 27, 0, 43, 0, - 79, 0,115, 9, 0, 0, 19, 0, 7, 0,116, 9, 7, 0,117, 9, 7, 0,227, 3, 2, 0,118, 9, 2, 0,119, 9, 84, 1, 5, 0, - 2, 0, 16, 0, 2, 0, 66, 0, 4, 0, 27, 0, 41, 0,124, 0, 27, 0,215, 5, 85, 1, 5, 0, 4, 0, 27, 0, 4, 0, 16, 0, - 0, 0, 19, 0, 0, 0, 62, 9, 27, 0, 43, 0, 86, 1, 13, 0, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0, 76, 9, 2, 0,228, 3, - 7, 0,120, 9, 7, 0,121, 9, 7, 0, 86, 1, 7, 0,122, 9, 7, 0,197, 3, 7, 0,201, 3, 7, 0,123, 9, 7, 0,124, 9, - 27, 0,125, 9, 87, 1, 10, 0, 2, 0, 18, 0, 2, 0, 16, 0, 7, 0, 23, 9, 7, 0, 90, 0, 0, 0, 19, 0, 0, 0, 97, 9, - 2, 0, 66, 0, 2, 0, 30, 0, 2, 0,250, 1, 2, 0,122, 5, 88, 1, 8, 0, 27, 0, 43, 0, 7, 0, 6, 3, 7, 0,126, 9, - 7, 0,127, 9, 7, 0,228, 3, 2, 0, 66, 0, 2, 0,231, 2, 7, 0, 30, 0, 89, 1, 12, 0, 2, 0, 16, 0, 2, 0, 87, 1, - 2, 0, 18, 0, 2, 0, 9, 3, 2, 0,245, 2, 2, 0,128, 9, 4, 0, 27, 0, 7, 0,129, 9, 7, 0,130, 9, 7, 0,131, 9, - 7, 0,132, 9, 0, 0,133, 9, 90, 1, 9, 0, 2, 0, 18, 0, 2, 0, 16, 0, 4, 0, 23, 9, 4, 0, 90, 0, 0, 0, 19, 0, - 2, 0, 86, 1, 2, 0, 62, 0, 2, 0,134, 9, 2, 0,135, 9, 91, 1, 7, 0, 4, 0,219, 2, 4, 0,136, 9, 4, 0,137, 9, - 4, 0,138, 9, 7, 0,139, 9, 7, 0,140, 9, 0, 0, 68, 9, 92, 1, 7, 0, 0, 0,141, 9, 27, 0,142, 9, 0, 0, 74, 9, - 2, 0,143, 9, 2, 0, 66, 0, 4, 0, 30, 0, 0, 0, 75, 9, 93, 1, 6, 0, 2, 0, 18, 0, 2, 0, 16, 0, 4, 0, 23, 9, - 4, 0, 90, 0, 0, 0,144, 9, 0, 0,145, 9, 94, 1, 1, 0, 4, 0, 18, 0, 95, 1, 6, 0, 0, 0, 93, 0, 2, 0, 16, 0, - 2, 0, 18, 0, 4, 0,146, 9, 7, 0,147, 9, 37, 0, 13, 7, 96, 1, 4, 0, 0, 0,186, 2, 2, 0, 18, 0, 4, 0, 16, 0, - 27, 0, 43, 0, 97, 1, 2, 0, 4, 0, 16, 0, 4, 0,188, 6, 98, 1, 8, 0, 0, 0, 71, 9, 0, 0, 72, 9, 4, 0, 16, 0, - 7, 0, 43, 2, 7, 0,148, 9, 7, 0, 27, 0, 27, 0, 75, 3, 27, 0,149, 9, 99, 1, 11, 0, 0, 0, 61, 6, 0, 0, 18, 0, - 2, 0,150, 9, 4, 0, 16, 0, 7, 0, 94, 1, 7, 0,151, 9, 7, 0,152, 9, 7, 0,153, 9, 4, 0,154, 9, 27, 0, 75, 3, - 27, 0,155, 9, 78, 1, 10, 0, 78, 1, 0, 0, 78, 1, 1, 0, 78, 1, 90, 9, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 76, 9, - 2, 0,156, 9, 0, 0, 19, 0, 11, 0, 2, 0, 27, 0, 43, 0, 47, 1, 17, 0, 22, 0, 32, 0, 0, 0, 35, 0, 38, 0,152, 0, - 11, 0,226, 0, 38, 0,157, 9, 31, 0, 79, 0, 7, 0, 89, 4, 7, 0,158, 9, 7, 0,239, 8, 7, 0,104, 9, 7, 0,105, 9, - 7, 0,159, 9, 4, 0, 91, 0, 4, 0, 27, 0, 11, 0,160, 9, 11, 0,161, 9, 11, 0,162, 9,100, 1, 6, 0,100, 1, 0, 0, -100, 1, 1, 0, 27, 0, 43, 0, 11, 0,163, 9, 2, 0,251, 0, 0, 0,216, 2, 64, 0, 4, 0, 22, 0, 32, 0, 14, 0,164, 9, - 4, 0,133, 0, 7, 0,165, 9,101, 1, 28, 0,101, 1, 0, 0,101, 1, 1, 0, 21, 0,166, 9,101, 1, 37, 0, 14, 0,167, 9, - 0, 0, 19, 0, 7, 0,168, 9, 7, 0,169, 9, 7, 0,170, 9, 7, 0,171, 9, 4, 0, 18, 0, 7, 0,172, 9, 7, 0,173, 9, - 7, 0,174, 9, 7, 0,175, 9, 7, 0, 94, 1, 7, 0, 43, 2, 7, 0,176, 9, 7, 0,217, 2, 7, 0,177, 9, 7, 0,178, 9, - 7, 0,179, 9, 7, 0,180, 9, 7, 0,181, 9, 7, 0,175, 0, 4, 0,133, 0, 2, 0, 5, 6, 2, 0,182, 9,102, 1, 27, 0, - 22, 0, 32, 0, 34, 0, 74, 0, 14, 0,183, 9, 14, 0,184, 9, 14, 0,185, 9,101, 1,186, 9, 11, 0,187, 9, 11, 0,188, 9, - 4, 0, 18, 0, 4, 0,164, 6, 4, 0,189, 9, 4, 0, 27, 0, 2, 0, 13, 3, 2, 0,218, 6, 4, 0,190, 9, 4, 0,133, 0, - 4, 0,191, 9, 2, 0,192, 9, 2, 0,193, 9, 2, 0,194, 9, 2, 0,195, 9, 4, 0,196, 9, 4, 0,197, 9, 4, 0,198, 9, - 4, 0,199, 9, 4, 0,200, 9, 4, 0,201, 9,103, 1, 2, 0, 7, 0,170, 2, 4, 0, 18, 0,181, 0, 5, 0,103, 1,202, 9, - 4, 0,217, 2, 4, 0,203, 9, 4, 0,204, 9, 4, 0, 18, 0,180, 0, 16, 0, 4, 0,205, 9, 4, 0,206, 9, 4, 0,207, 9, - 4, 0,208, 9, 2, 0,209, 9, 2, 0,210, 9, 2, 0,211, 9, 2, 0,251, 0, 2, 0,212, 9, 2, 0,213, 9, 2, 0,214, 9, - 2, 0,215, 9, 4, 0,216, 9, 4, 0,217, 9, 4, 0,218, 9, 4, 0,219, 9,104, 1, 40, 0,104, 1, 0, 0,104, 1, 1, 0, - 21, 0,166, 9, 14, 0, 0, 4, 0, 0, 19, 0, 2, 0, 18, 0, 2, 0,220, 9, 2, 0,214, 3, 2, 0,221, 9, 0, 0,222, 9, - 0, 0,223, 9, 0, 0,224, 9,101, 1,225, 9,104, 1, 37, 0,104, 1,226, 9, 14, 0,227, 9, 14, 0,228, 9,181, 0,189, 3, - 27, 0,229, 9,104, 1,230, 9, 7, 0, 77, 1, 7, 0,175, 0, 7, 0,231, 9, 7, 0, 22, 2, 7, 0,203, 3, 7, 0,205, 3, - 2, 0,237, 3, 2, 0, 27, 0, 7, 0,232, 9, 7, 0,233, 9, 7, 0,208, 3, 7, 0,234, 9, 7, 0,235, 9, 7, 0,236, 9, - 7, 0,237, 9, 7, 0,238, 9, 7, 0,239, 9, 7, 0,240, 9, 7, 0,241, 9, 11, 0,242, 9,178, 0, 16, 0, 14, 0,243, 9, - 74, 0,244, 9, 2, 0, 18, 0, 2, 0, 27, 0, 4, 0,245, 9, 4, 0, 66, 0, 7, 0, 83, 0, 7, 0,246, 9, 7, 0,247, 9, - 14, 0,248, 9, 4, 0,249, 9, 4, 0,250, 9, 11, 0,251, 9, 11, 0,252, 9,180, 0,188, 3, 0, 0,253, 9,105, 1, 1, 0, - 4, 0,250, 9,106, 1, 12, 0, 4, 0,250, 9, 7, 0, 88, 9, 2, 0,254, 9, 2, 0,255, 9, 7, 0, 0, 10, 7, 0, 1, 10, - 2, 0, 2, 10, 2, 0, 18, 0, 7, 0, 3, 10, 7, 0, 4, 10, 7, 0, 5, 10, 7, 0, 6, 10,107, 1, 7, 0,107, 1, 0, 0, -107, 1, 1, 0, 14, 0, 7, 10, 4, 0, 18, 0, 4, 0, 8, 10, 0, 0, 19, 0, 23, 1, 9, 10,177, 0, 9, 0, 22, 0, 32, 0, - 14, 0, 10, 10, 14, 0,243, 9, 14, 0, 11, 10, 14, 0,101, 0, 4, 0, 18, 0, 4, 0, 12, 10, 4, 0, 13, 10, 4, 0, 27, 0, -244, 0, 8, 0, 22, 0, 14, 10, 14, 0,243, 9, 64, 0, 15, 10, 0, 0, 16, 10, 4, 0, 17, 10, 4, 0, 18, 0, 4, 0, 18, 10, - 4, 0, 27, 0,108, 1, 13, 0,240, 0, 0, 0,240, 0, 1, 0, 14, 0,153, 6, 4, 0,154, 6, 7, 0,155, 6, 2, 0,156, 6, -241, 0,207, 6,177, 0,184, 3,244, 0, 19, 10, 0, 0, 87, 1, 0, 0,210, 6, 2, 0, 18, 0, 7, 0, 20, 10,109, 1, 8, 0, -109, 1, 0, 0,109, 1, 1, 0,107, 1, 21, 10, 31, 0, 79, 0, 14, 0,190, 3, 4, 0, 18, 0, 0, 0, 19, 0, 4, 0,127, 8, -110, 1, 5, 0,110, 1, 0, 0,110, 1, 1, 0, 31, 0, 79, 0, 2, 0, 18, 0, 0, 0, 22, 10,111, 1, 14, 0,111, 1, 0, 0, -111, 1, 1, 0, 11, 0, 2, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 23, 10, 0, 0, 24, 10, 0, 0, 19, 0, 2, 0, 27, 0, - 7, 0, 25, 10, 7, 0, 26, 10, 31, 0, 79, 0, 7, 0, 27, 10, 7, 0, 28, 10,112, 1, 9, 0,112, 1, 0, 0,112, 1, 1, 0, - 27, 0, 29, 10, 0, 0, 16, 3, 7, 0, 30, 10, 2, 0, 31, 10, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0, 32, 10,113, 1, 7, 0, - 37, 0, 13, 7, 21, 0,166, 9, 4, 0, 18, 0, 4, 0, 33, 10, 14, 0, 34, 10, 27, 0, 29, 10, 0, 0, 16, 3,114, 1, 15, 0, - 27, 0, 29, 10, 2, 0, 35, 10, 2, 0, 18, 0, 2, 0, 36, 10, 2, 0, 37, 10, 0, 0, 16, 3, 27, 0, 38, 10, 0, 0, 39, 10, - 7, 0, 40, 10, 7, 0, 43, 2, 7, 0, 41, 10, 7, 0, 42, 10, 2, 0, 16, 0, 2, 0, 87, 1, 7, 0, 94, 1,115, 1, 6, 0, - 27, 0, 29, 10, 7, 0,202, 9, 2, 0, 43, 10, 2, 0, 44, 10, 2, 0, 18, 0, 2, 0, 45, 10,116, 1, 6, 0, 27, 0, 29, 10, - 4, 0, 46, 10, 4, 0, 47, 10, 4, 0, 91, 0, 4, 0, 27, 0, 0, 0, 16, 3,117, 1, 4, 0, 27, 0, 29, 10, 4, 0, 18, 0, - 4, 0, 46, 10, 0, 0, 16, 3,118, 1, 4, 0, 27, 0, 29, 10, 4, 0, 18, 0, 4, 0, 46, 10, 0, 0, 16, 3,119, 1, 4, 0, - 27, 0, 29, 10, 4, 0, 18, 0, 4, 0, 46, 10, 0, 0, 16, 3,120, 1, 2, 0, 4, 0, 18, 0, 7, 0, 89, 4,121, 1, 2, 0, - 27, 0, 29, 10, 0, 0, 16, 3,122, 1, 10, 0, 27, 0, 29, 10, 4, 0, 48, 10, 7, 0,127, 0, 4, 0, 18, 0, 2, 0, 11, 7, - 2, 0, 49, 10, 2, 0, 66, 0, 2, 0, 30, 0, 7, 0, 50, 10, 0, 0, 16, 3,123, 1, 10, 0, 27, 0, 29, 10, 2, 0, 16, 0, - 2, 0,139, 4, 4, 0, 89, 0, 4, 0, 90, 0, 7, 0,126, 9, 7, 0,127, 9, 4, 0, 27, 0,177, 0, 96, 9, 0, 0, 16, 3, -124, 1, 4, 0, 27, 0, 29, 10, 4, 0,215, 3, 4, 0, 51, 10, 0, 0, 16, 3,125, 1, 4, 0, 27, 0, 29, 10, 4, 0,215, 3, - 4, 0, 27, 0, 0, 0, 16, 3,126, 1, 6, 0, 27, 0, 29, 10, 7, 0,127, 0, 7, 0, 87, 3, 4, 0, 52, 10, 2, 0,215, 3, - 2, 0,216, 3,127, 1, 6, 0, 27, 0, 29, 10, 4, 0, 53, 10, 4, 0, 54, 10, 7, 0, 55, 10, 7, 0, 56, 10, 0, 0, 16, 3, -128, 1, 16, 0, 27, 0, 29, 10, 27, 0,226, 9, 4, 0, 16, 0, 7, 0, 57, 10, 7, 0, 58, 10, 7, 0, 59, 10, 7, 0, 60, 10, - 7, 0, 61, 10, 7, 0, 62, 10, 7, 0, 63, 10, 7, 0, 64, 10, 7, 0, 65, 10, 2, 0, 18, 0, 2, 0, 27, 0, 2, 0, 66, 0, - 2, 0, 30, 0,129, 1, 3, 0, 27, 0, 29, 10, 4, 0, 18, 0, 4, 0, 35, 2,130, 1, 5, 0, 27, 0, 29, 10, 4, 0, 18, 0, - 4, 0, 27, 0, 7, 0, 66, 10, 0, 0, 16, 3,131, 1, 10, 0, 27, 0, 29, 10, 0, 0, 16, 3, 2, 0, 67, 10, 2, 0, 68, 10, - 0, 0, 69, 10, 0, 0, 70, 10, 7, 0, 71, 10, 7, 0, 72, 10, 7, 0, 73, 10, 7, 0, 74, 10,132, 1, 5, 0, 27, 0, 29, 10, - 0, 0, 16, 3, 7, 0,225, 2, 2, 0, 75, 10, 2, 0, 18, 0,133, 1, 8, 0, 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, - 7, 0, 11, 0, 7, 0, 76, 10, 7, 0, 77, 10, 2, 0, 18, 0, 2, 0, 35, 2,134, 1, 8, 0, 7, 0, 8, 0, 7, 0, 9, 0, - 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 76, 10, 7, 0, 77, 10, 2, 0, 18, 0, 2, 0, 35, 2,135, 1, 8, 0, 7, 0, 8, 0, - 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 76, 10, 7, 0, 77, 10, 2, 0, 18, 0, 2, 0, 35, 2,136, 1, 7, 0, - 27, 0, 29, 10, 0, 0, 16, 3, 7, 0, 94, 1, 7, 0,103, 1, 2, 0, 18, 0, 2, 0, 87, 1, 4, 0, 27, 0,137, 1, 5, 0, - 27, 0, 75, 3, 7, 0, 94, 1, 2, 0, 79, 3, 0, 0, 81, 3, 0, 0, 78, 10,138, 1, 7, 0,230, 0,113, 6, 0, 0, 79, 10, - 4, 0, 18, 0, 4, 0, 27, 0, 0, 0, 80, 10, 27, 0,215, 5, 27, 0, 81, 10,139, 1, 3, 0,230, 0,113, 6, 4, 0, 18, 0, - 4, 0, 27, 0,140, 1, 6, 0,230, 0,113, 6, 4, 0, 18, 0, 4, 0, 27, 0, 0, 0, 80, 10, 7, 0, 66, 10, 27, 0,215, 5, -141, 1, 10, 0,141, 1, 0, 0,141, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 82, 10, 7, 0, 31, 1, 7, 0, 32, 1, - 2, 0, 7, 10, 2, 0, 83, 10, 27, 0, 43, 0,142, 1, 22, 0,142, 1, 0, 0,142, 1, 1, 0, 2, 0, 18, 0, 2, 0, 87, 1, - 2, 0, 84, 10, 2, 0, 85, 10, 31, 0, 79, 0,177, 0, 96, 9, 27, 0,167, 0, 7, 0, 89, 0, 7, 0, 90, 0, 7, 0, 86, 10, - 7, 0, 87, 10, 7, 0, 88, 10, 7, 0, 89, 10, 7, 0, 2, 3, 7, 0,153, 3, 7, 0, 98, 9, 7, 0, 90, 10, 0, 0, 91, 10, - 0, 0, 92, 10, 14, 0,193, 3,143, 1, 11, 0, 7, 0, 50, 2, 7, 0,126, 9, 7, 0,127, 9, 11, 0, 2, 0, 2, 0, 93, 10, - 2, 0, 94, 10, 2, 0, 95, 10, 2, 0, 96, 10, 2, 0, 97, 10, 2, 0, 98, 10, 2, 0,186, 2,144, 1, 21, 0,144, 1, 0, 0, -144, 1, 1, 0,144, 1, 99, 10, 0, 0, 19, 0, 11, 0,100, 10, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0,101, 10, 2, 0, 66, 0, - 7, 0,102, 10, 7, 0,103, 10, 11, 0,104, 10, 2, 0,105, 10, 2, 0,106, 10, 4, 0,107, 10, 11, 0,160, 9, 4, 0,108, 10, - 4, 0,109, 10,144, 1,110, 10,145, 1,111, 10,143, 1,112, 10,146, 1, 4, 0, 0, 0,113, 10, 2, 0,114, 10, 2, 0,115, 10, - 4, 0, 27, 0,147, 1, 41, 0,147, 1, 0, 0,147, 1, 1, 0,147, 1,116, 10, 0, 0, 19, 0, 4, 0, 18, 0, 2, 0, 16, 0, - 2, 0, 30, 0, 2, 0,207, 8, 2, 0,181, 2, 2, 0,117, 10, 2, 0, 16, 7, 2, 0,105, 10, 2, 0, 50, 9, 7, 0,118, 10, - 14, 0, 91, 9, 14, 0,119, 10,147, 1, 37, 0, 22, 0, 49, 7, 11, 0,100, 10, 7, 0,102, 10, 7, 0,103, 10, 7, 0, 85, 2, - 7, 0, 6, 3, 7, 0,120, 10, 7, 0,121, 10, 7, 0,122, 10, 4, 0,123, 10, 0, 0,124, 10, 2, 0,125, 10, 2, 0,126, 10, - 7, 0,127, 10, 7, 0,128, 10, 2, 0,129, 10, 2, 0,130, 10, 11, 0,131, 10, 19, 0,132, 10, 19, 0,133, 10, 19, 0,134, 10, -146, 1,153, 0,148, 1,135, 10,149, 1,136, 10,145, 1, 8, 0,145, 1, 0, 0,145, 1, 1, 0,147, 1,137, 10,147, 1,138, 10, -144, 1,139, 10,144, 1,140, 10, 4, 0, 18, 0, 4, 0, 27, 0, 57, 0, 23, 0, 22, 0, 32, 0, 34, 0, 74, 0,179, 0,187, 3, - 14, 0,141, 10, 14, 0,142, 10, 4, 0, 16, 0, 4, 0,143, 10, 4, 0,144, 10, 4, 0, 18, 0, 4, 0,123, 10, 4, 0,145, 10, - 2, 0,146, 10, 2, 0,147, 10, 4, 0,148, 10, 14, 0, 91, 9, 14, 0,119, 10,150, 1,149, 10, 11, 0,150, 10, 11, 0,151, 10, - 4, 0,152, 10, 11, 0,153, 10, 11, 0,154, 10, 11, 0,155, 10,151, 1, 4, 0, 4, 0, 17, 0, 4, 0,235, 2, 4, 0,126, 9, - 4, 0,127, 9,152, 1, 4, 0, 4, 0, 17, 0, 7, 0,235, 2, 7, 0,126, 9, 7, 0,127, 9,153, 1, 2, 0, 0, 0,235, 2, - 0, 0, 86, 1,154, 1, 4, 0, 4, 0, 17, 0, 7, 0,156, 10, 7, 0,126, 9, 7, 0,127, 9,155, 1, 1, 0, 7, 0,157, 10, -156, 1, 2, 0, 2, 0, 18, 0, 2, 0,158, 10,157, 1, 6, 0, 4, 0,126, 0, 4, 0,128, 0, 4, 0, 50, 9, 0, 0,159, 10, - 0, 0,160, 10, 2, 0, 27, 0,158, 1, 6, 0, 7, 0, 35, 1, 7, 0, 34, 1, 7, 0,161, 10, 7, 0,162, 10, 7, 0,163, 10, - 4, 0, 27, 0,159, 1, 6, 0,158, 1,164, 10,158, 1,165, 10,158, 1,166, 10,158, 1,167, 10, 7, 0,168, 10, 7, 0,169, 10, -160, 1, 5, 0, 7, 0, 99, 3, 4, 0,170, 10, 7, 0,171, 10, 7, 0,172, 10, 7, 0,173, 10,161, 1, 6, 0, 7, 0, 5, 0, - 7, 0, 6, 0, 7, 0,174, 10, 7, 0, 6, 3, 7, 0, 85, 2, 4, 0, 27, 0,162, 1, 6, 0, 7, 0, 5, 0, 7, 0, 6, 0, - 7, 0,174, 10, 7, 0, 6, 3, 7, 0, 85, 2, 4, 0, 27, 0,163, 1, 2, 0, 4, 0,175, 10, 4, 0,176, 10,164, 1, 16, 0, - 2, 0,150, 8, 2, 0,151, 8, 2, 0, 76, 5, 2, 0,177, 10, 2, 0,178, 10, 2, 0, 67, 0, 2, 0, 50, 7, 2, 0,179, 10, - 7, 0, 1, 3, 7, 0,180, 10, 7, 0,181, 10, 2, 0,110, 1, 0, 0,182, 10, 0, 0,161, 10, 4, 0,183, 10, 4, 0,184, 10, -165, 1, 9, 0, 7, 0,185, 10, 7, 0,186, 10, 7, 0,159, 9, 7, 0, 99, 3, 7, 0,187, 10, 7, 0,225, 6, 2, 0, 97, 3, - 0, 0,188, 10, 0, 0, 27, 0,166, 1, 4, 0, 7, 0,189, 10, 7, 0,190, 10, 2, 0, 97, 3, 2, 0, 27, 0,167, 1, 3, 0, - 7, 0,191, 10, 7, 0,222, 8, 7, 0, 14, 0,168, 1, 4, 0, 0, 0, 35, 0,205, 0, 87, 5, 4, 0,128, 0, 4, 0,137, 4, -169, 1, 6, 0, 0, 0,192, 10,205, 0,193, 10, 4, 0,128, 0, 4, 0,137, 4, 4, 0,194, 10, 4, 0, 27, 0,170, 1, 7, 0, - 2, 0,195, 10, 2, 0,196, 10, 4, 0, 66, 0, 0, 0, 82, 4,205, 0,193, 10, 0, 0,197, 10, 0, 0,178, 6,171, 1, 9, 0, - 7, 0,198, 10, 7, 0,199, 10, 7, 0,200, 10, 7, 0, 96, 2, 7, 0,201, 10, 7, 0,202, 10, 7, 0,203, 10, 2, 0,204, 10, - 2, 0,205, 10,172, 1, 8, 0, 2, 0,206, 10, 2, 0,207, 10, 2, 0,208, 10, 2, 0,209, 10, 7, 0,210, 10, 7, 0,211, 10, - 7, 0,212, 10, 7, 0,213, 10,173, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,174, 1, 2, 0, 0, 0,169, 0, 0, 0,214, 10, -175, 1, 1, 0, 0, 0, 19, 0,176, 1, 12, 0, 0, 0,215, 10, 0, 0,216, 10, 0, 0,216, 6, 0, 0,217, 10, 2, 0, 76, 5, - 2, 0,218, 10, 7, 0,219, 10, 7, 0,220, 10, 7, 0,221, 10, 7, 0,153, 3, 7, 0,174, 10, 7, 0,222, 10,177, 1, 2, 0, - 11, 0,223, 10, 11, 0,224, 10,178, 1, 13, 0, 0, 0, 79, 5, 0, 0, 16, 0, 0, 0, 97, 3, 0, 0, 99, 3, 0, 0,216, 10, - 0, 0,107, 0, 0, 0,186, 2, 7, 0,225, 10, 7, 0,226, 10, 7, 0,152, 3, 7, 0,227, 10, 7, 0,228, 10, 7, 0,222, 10, -179, 1, 8, 0, 7, 0, 57, 9, 7, 0,127, 0, 7, 0,161, 10, 7, 0,177, 2, 7, 0,229, 10, 7, 0,239, 0, 7, 0,230, 10, - 4, 0, 16, 0,180, 1, 4, 0, 2, 0,231, 10, 2, 0,232, 10, 2, 0,233, 10, 2, 0, 27, 0,181, 1, 8, 0, 7, 0,234, 10, - 7, 0,225, 2, 7, 0,235, 10, 7, 0,200, 8, 7, 0,201, 8, 7, 0,202, 8, 7, 0,236, 10, 7, 0,237, 10,182, 1, 6, 0, - 2, 0,238, 10, 2, 0,239, 10, 7, 0,240, 10, 7, 0,241, 10, 7, 0,242, 10, 7, 0,243, 10,183, 1, 2, 0, 58, 0,244, 10, - 59, 0,245, 10,184, 1, 3, 0,183, 1, 86, 6, 7, 0,246, 10, 7, 0,247, 10,185, 1, 3, 0,183, 1, 86, 6, 4, 0,248, 10, - 4, 0, 27, 0,186, 1, 1, 0,183, 1, 86, 6,187, 1, 3, 0,183, 1, 86, 6, 4, 0,248, 10, 4, 0,249, 10,188, 1, 3, 0, -183, 1, 86, 6, 4, 0,250, 10, 4, 0, 27, 0,189, 1, 1, 0,183, 1, 86, 6,190, 1, 3, 0,183, 1, 86, 6, 4, 0,251, 10, - 4, 0, 27, 0,191, 1, 3, 0,183, 1, 86, 6, 4, 0,252, 10, 4, 0, 27, 0,192, 1, 3, 0,183, 1, 86, 6, 4, 0,253, 10, - 4, 0, 27, 0,193, 1, 3, 0,183, 1, 86, 6, 4, 0,250, 0, 4, 0, 27, 0,194, 1, 1, 0, 0, 0, 19, 0,195, 1, 1, 0, - 0, 0, 19, 0,196, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 18, 0, 2, 0,254, 10,197, 1, 10, 0, 2, 0, 67, 4, - 2, 0, 18, 0, 7, 0,222, 4, 7, 0,255, 10, 7, 0, 0, 11, 7, 0, 1, 11, 7, 0, 2, 11,196, 1, 3, 11,196, 1, 4, 11, -196, 1, 5, 11, 54, 0, 11, 0, 4, 0, 18, 0, 4, 0, 62, 0, 4, 0, 6, 11, 4, 0, 7, 11, 19, 0, 8, 11, 19, 0, 9, 11, -197, 1, 10, 11, 7, 0, 11, 11, 7, 0, 12, 11, 7, 0, 13, 11, 7, 0, 14, 11, 1, 1, 10, 0, 4, 0, 7, 10, 4, 0, 15, 11, - 7, 0, 16, 11, 7, 0, 17, 11, 7, 0, 18, 11, 7, 0, 19, 11, 7, 0, 9, 0, 7, 0, 11, 0, 4, 0, 87, 1, 4, 0, 6, 3, - 0, 1, 18, 0, 4, 0,131, 0, 4, 0, 20, 11, 4, 0, 21, 11, 7, 0, 22, 11, 4, 0, 23, 11, 7, 0, 24, 11, 7, 0, 25, 11, - 4, 0, 26, 11, 7, 0, 27, 11, 4, 0, 28, 11, 7, 0, 29, 11, 1, 1, 30, 11, 7, 0, 31, 11, 7, 0, 32, 11, 7, 0, 33, 11, - 7, 0, 34, 11, 4, 0, 35, 11, 4, 0, 27, 0,198, 1, 4, 0, 42, 0,249, 2, 7, 0, 36, 11, 7, 0,181, 1, 7, 0, 27, 0, -214, 0, 36, 0, 22, 0, 32, 0,198, 1, 37, 11, 54, 0, 3, 11, 46, 0, 38, 11,214, 0, 39, 11, 52, 0, 40, 11, 25, 0,153, 0, - 0, 0, 41, 11, 7, 0, 42, 11, 2, 0,116, 6, 2, 0, 43, 11, 7, 0, 43, 2, 4, 0,107, 0, 4, 0, 18, 0, 7, 0, 44, 11, - 4, 0, 93, 2, 4, 0, 45, 11, 7, 0, 46, 11, 7, 0, 47, 11, 7, 0, 48, 11, 7, 0,181, 1, 4, 0, 49, 11, 7, 0, 50, 11, - 0, 0, 51, 11, 0, 0, 52, 11, 0, 0, 53, 11, 0, 0, 54, 11, 7, 0, 55, 11, 7, 0, 56, 11, 7, 0, 57, 11, 7, 0, 6, 3, - 7, 0, 58, 11, 4, 0, 59, 11, 7, 0,248, 5, 7, 0, 60, 11, 7, 0, 61, 11,199, 1, 10, 0, 4, 0, 16, 0, 4, 0,127, 0, - 4, 0, 18, 0, 4, 0, 20, 4, 4, 0, 62, 11, 4, 0, 63, 11, 4, 0, 64, 11, 4, 0, 69, 0, 0, 0, 19, 0, 11, 0, 2, 0, -200, 1, 1, 0, 0, 0, 79, 7, 95, 0, 8, 0,199, 1, 65, 11, 4, 0, 66, 11, 4, 0, 67, 11, 4, 0, 68, 11, 4, 0, 69, 11, - 4, 0, 30, 0, 11, 0, 70, 11,200, 1, 71, 11,201, 1, 5, 0, 7, 0,170, 2, 7, 0,245, 2, 7, 0, 43, 2, 2, 0,152, 2, - 2, 0, 27, 0,202, 1, 5, 0, 7, 0,170, 2, 7, 0,164, 4, 7, 0, 72, 11, 7, 0, 73, 11, 7, 0,245, 2,203, 1, 5, 0, - 27, 0, 74, 11,204, 1, 21, 0, 7, 0, 82, 6, 7, 0, 75, 11, 7, 0, 55, 0,205, 1, 3, 0, 7, 0, 76, 11, 4, 0, 77, 11, - 4, 0, 78, 11,206, 1, 7, 0, 4, 0, 79, 11, 4, 0, 80, 11, 4, 0, 81, 11, 7, 0, 82, 11, 7, 0, 83, 11, 7, 0, 84, 11, - 7, 0, 55, 0,207, 1, 8, 0,207, 1, 0, 0,207, 1, 1, 0, 27, 0, 43, 0, 4, 0, 3, 1, 2, 0, 18, 0, 2, 0, 87, 1, - 7, 0,245, 2, 7, 0, 65, 9,208, 1, 7, 0,208, 1, 0, 0,208, 1, 1, 0, 27, 0, 43, 0, 2, 0,230, 2, 2, 0, 18, 0, - 2, 0, 17, 2, 2, 0, 55, 0,209, 1, 17, 0,202, 1, 13, 4,202, 1, 85, 11,201, 1, 86, 11,202, 1, 48, 9,203, 1, 87, 11, - 4, 0, 81, 0, 7, 0,245, 2, 7, 0, 12, 3, 7, 0, 88, 11, 4, 0, 79, 11, 4, 0, 89, 11, 7, 0, 83, 11, 7, 0, 84, 11, - 7, 0,107, 0, 4, 0, 90, 11, 2, 0, 18, 0, 2, 0, 91, 11,210, 1, 15, 0, 7, 0,255, 0, 7, 0, 92, 11, 7, 0, 76, 11, - 7, 0, 93, 11, 7, 0, 94, 11, 7, 0, 95, 11, 7, 0, 96, 11, 7, 0, 97, 11, 7, 0, 98, 11, 7, 0, 99, 11, 7, 0,100, 11, - 7, 0,101, 11, 7, 0,102, 11, 4, 0, 18, 0, 4, 0,103, 11,211, 1,128, 0, 22, 0, 32, 0, 34, 0, 74, 0,212, 1,104, 11, -210, 1,105, 11,188, 0,159, 4, 4, 0, 18, 0, 4, 0, 55, 0, 2, 0, 16, 0, 2, 0, 67, 10, 2, 0,106, 11, 2, 0,124, 1, - 2, 0,107, 11, 2, 0,237, 3, 2, 0,108, 11, 2, 0,109, 11, 2, 0,110, 11, 2, 0,111, 11, 2, 0,112, 11, 2, 0,113, 11, - 2, 0,114, 11, 2, 0,115, 11, 2, 0,116, 11, 2, 0,232, 5, 2, 0,117, 11, 2, 0,118, 11, 2, 0,119, 11, 2, 0,120, 11, - 2, 0,121, 11, 2, 0, 32, 2, 2, 0, 41, 9, 2, 0, 16, 9, 2, 0,122, 11, 2, 0,123, 11, 2, 0, 30, 4, 2, 0, 31, 4, - 2, 0,124, 11, 2, 0,125, 11, 2, 0,126, 11, 2, 0,127, 11, 7, 0,128, 11, 7, 0,129, 11, 7, 0,130, 11, 7, 0,131, 11, - 7, 0,132, 11, 7, 0,133, 11, 7, 0,134, 11, 2, 0,161, 5, 2, 0,135, 11, 7, 0,136, 11, 7, 0,137, 11, 7, 0,138, 11, - 7, 0, 23, 9, 7, 0, 90, 0, 7, 0, 12, 3, 7, 0, 29, 9, 7, 0,139, 11, 7, 0,140, 11, 7, 0,141, 11, 7, 0,142, 11, - 7, 0,143, 11, 7, 0,144, 11, 4, 0, 24, 9, 4, 0, 22, 9, 4, 0,145, 11, 4, 0,146, 11, 2, 0,147, 11, 2, 0,148, 11, - 7, 0, 25, 9, 7, 0, 26, 9, 7, 0, 27, 9, 7, 0,149, 11, 7, 0,150, 11, 7, 0,151, 11, 7, 0,152, 11, 7, 0,153, 11, - 7, 0,154, 11, 7, 0,155, 11, 7, 0,156, 11, 7, 0,157, 11, 7, 0,227, 3, 7, 0,107, 0, 7, 0,158, 11, 7, 0,159, 11, - 7, 0,160, 11, 7, 0,161, 11, 7, 0,213, 0, 7, 0,162, 11, 4, 0,163, 11, 4, 0,164, 11, 7, 0,165, 11, 7, 0,166, 11, - 7, 0,167, 11, 7, 0,168, 11, 7, 0,169, 11, 7, 0,212, 0, 7, 0,170, 11, 7, 0, 57, 4, 7, 0, 55, 4, 7, 0, 56, 4, - 7, 0,171, 11, 7, 0,172, 11, 7, 0,173, 11, 7, 0,174, 11, 7, 0,175, 11, 7, 0,176, 11, 7, 0,177, 11, 7, 0,178, 11, - 7, 0,179, 11, 7, 0,180, 11, 7, 0,181, 11, 7, 0,182, 11, 7, 0,183, 11, 7, 0,184, 11, 7, 0,185, 11, 7, 0,186, 11, - 7, 0,187, 11, 7, 0,188, 11, 4, 0,189, 11, 4, 0,190, 11, 46, 0,143, 1, 64, 0, 5, 4, 14, 0,191, 11, 64, 0,192, 11, - 27, 0,193, 11, 27, 0,194, 11, 31, 0, 79, 0,183, 0, 73, 1,183, 0,195, 11,151, 0, 52, 0,151, 0, 0, 0,151, 0, 1, 0, -211, 1,196, 11,209, 1,197, 11,206, 1,226, 9,191, 0, 85, 4, 11, 0, 86, 4,213, 1,198, 11,213, 1,199, 11, 14, 0,200, 11, - 14, 0,201, 11,136, 0,202, 11,144, 0,203, 11,144, 0,204, 11, 27, 0,205, 11, 27, 0,206, 11, 27, 0, 37, 0, 14, 0, 34, 10, - 0, 0, 19, 0, 7, 0,244, 0, 7, 0, 41, 3, 7, 0,207, 11, 7, 0,208, 11, 4, 0,219, 2, 4, 0,209, 11, 4, 0, 18, 0, - 4, 0, 24, 9, 4, 0,210, 11, 4, 0,211, 11, 4, 0,212, 11, 4, 0,213, 11, 2, 0,251, 0, 2, 0,214, 11, 2, 0,215, 11, - 2, 0,216, 11, 0, 0,217, 11, 2, 0,218, 11, 2, 0,219, 11, 2, 0,220, 11, 11, 0,221, 11,140, 0,158, 4, 14, 0, 26, 3, - 14, 0,222, 11,205, 1,223, 11, 4, 0,224, 11, 4, 0,225, 11,214, 1,226, 11,142, 0, 38, 3,215, 1,227, 11, 7, 0,228, 11, - 7, 0,229, 11, 7, 0,230, 11,138, 0, 38, 0,216, 1,160, 9, 7, 0,128, 4, 7, 0,231, 11, 7, 0,232, 11, 7, 0, 82, 6, - 7, 0,241, 3, 7, 0,227, 3, 7, 0,233, 11, 7, 0, 95, 2, 7, 0,234, 11, 7, 0,235, 11, 7, 0,236, 11, 7, 0,237, 11, - 7, 0,238, 11, 7, 0,239, 11, 7, 0,129, 4, 7, 0,240, 11, 7, 0,241, 11, 7, 0,242, 11, 7, 0,130, 4, 7, 0,126, 4, - 7, 0,127, 4, 7, 0,243, 11, 7, 0,244, 11, 7, 0,245, 11, 4, 0,246, 11, 4, 0, 91, 0, 4, 0,247, 11, 4, 0,248, 11, - 2, 0,249, 11, 2, 0,250, 11, 2, 0,251, 11, 2, 0,252, 11, 2, 0,253, 11, 2, 0,254, 11, 2, 0,255, 11, 2, 0, 27, 0, -188, 0,159, 4,139, 0, 11, 0,216, 1, 0, 12, 7, 0, 1, 12, 7, 0, 2, 12, 7, 0,254, 1, 7, 0, 3, 12, 7, 0, 4, 12, - 7, 0, 5, 12, 4, 0, 91, 0, 2, 0, 6, 12, 2, 0, 7, 12, 64, 0,253, 1,217, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, - 7, 0, 7, 0, 7, 0, 8, 12,218, 1, 6, 0,218, 1, 0, 0,218, 1, 1, 0,217, 1,202, 9, 4, 0, 1, 1, 2, 0, 9, 12, - 2, 0, 18, 0,219, 1, 5, 0,219, 1, 0, 0,219, 1, 1, 0, 14, 0, 10, 12, 4, 0, 11, 12, 4, 0, 18, 0,220, 1, 9, 0, -220, 1, 0, 0,220, 1, 1, 0, 14, 0,126, 0,219, 1, 12, 12, 4, 0, 18, 0, 2, 0, 9, 12, 2, 0, 13, 12, 7, 0, 92, 0, - 0, 0, 14, 12,179, 0, 6, 0, 22, 0, 32, 0, 14, 0,130, 5, 4, 0, 18, 0, 2, 0, 15, 12, 2, 0, 16, 12, 11, 0, 17, 12, -221, 1, 6, 0, 14, 0, 18, 12, 4, 0, 19, 12, 4, 0, 20, 12, 4, 0, 18, 0, 4, 0, 27, 0,238, 0, 21, 12,222, 1, 19, 0, - 22, 0, 32, 0,223, 1, 22, 12,223, 1, 23, 12, 14, 0, 24, 12, 4, 0, 25, 12, 2, 0, 26, 12, 2, 0, 27, 12, 14, 0, 28, 12, - 14, 0, 29, 12,221, 1, 30, 12, 14, 0, 31, 12, 14, 0, 32, 12, 14, 0, 33, 12, 14, 0, 34, 12,224, 1, 35, 12,224, 1, 36, 12, -224, 1, 37, 12, 14, 0, 38, 12,238, 0, 39, 12,223, 1, 32, 0,223, 1, 0, 0,223, 1, 1, 0, 11, 0, 40, 12, 4, 0,128, 8, - 2, 0, 41, 12, 2, 0, 27, 0, 28, 1, 42, 12, 28, 1, 43, 12, 0, 0, 44, 12, 2, 0, 45, 12, 2, 0, 46, 12, 2, 0,150, 8, - 2, 0,151, 8, 2, 0, 47, 12, 2, 0, 48, 12, 2, 0, 20, 4, 2, 0, 60, 7, 2, 0, 49, 12, 2, 0, 50, 12, 2, 0, 51, 12, - 2, 0, 30, 0,225, 1, 52, 12,226, 1, 53, 12,227, 1, 54, 12, 4, 0, 55, 12, 4, 0, 56, 12, 11, 0, 57, 12, 14, 0, 29, 12, - 14, 0,170, 8, 14, 0, 58, 12, 14, 0, 59, 12, 14, 0, 60, 12,228, 1, 18, 0,228, 1, 0, 0,228, 1, 1, 0, 0, 0, 61, 12, - 21, 0, 31, 0, 0, 0, 62, 12, 2, 0, 63, 12, 2, 0, 16, 0, 2, 0, 14, 0, 2, 0, 64, 12, 2, 0, 65, 12, 2, 0, 66, 12, - 2, 0, 67, 12, 2, 0, 68, 12, 2, 0, 18, 0, 2, 0, 69, 12, 2, 0, 32, 0, 2, 0, 27, 0,229, 1, 70, 12,230, 1, 4, 0, -230, 1, 0, 0,230, 1, 1, 0,228, 1, 71, 12,228, 1, 72, 12,231, 1, 11, 0,231, 1, 0, 0,231, 1, 1, 0, 14, 0, 73, 12, - 14, 0, 74, 12, 0, 0, 61, 12, 2, 0, 75, 12, 2, 0, 76, 12, 2, 0, 18, 0, 2, 0, 77, 12, 4, 0, 78, 12, 11, 0, 79, 12, -224, 1, 7, 0,224, 1, 0, 0,224, 1, 1, 0, 0, 0, 61, 12, 0, 0, 80, 12, 14, 0, 68, 8, 4, 0, 81, 12, 4, 0, 18, 0, -250, 0, 14, 0,250, 0, 0, 0,250, 0, 1, 0, 0, 0, 61, 12, 21, 0, 31, 0,232, 1,144, 8, 11, 0, 82, 12, 11, 0, 83, 12, -229, 1, 70, 12,221, 1, 84, 12, 14, 0, 85, 12,250, 0, 86, 12, 33, 1,246, 6, 2, 0, 18, 0, 2, 0, 86, 1,233, 1, 12, 0, -233, 1, 0, 0,233, 1, 1, 0, 11, 0, 2, 0, 11, 0, 87, 12, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 7, 0,148, 9, - 7, 0,128, 0, 7, 0,137, 4, 7, 0, 98, 9, 7, 0, 90, 10,234, 1, 5, 0, 7, 0, 88, 12, 4, 0, 89, 12, 4, 0, 90, 12, - 4, 0, 87, 1, 4, 0, 18, 0,235, 1, 6, 0, 7, 0, 91, 12, 7, 0, 92, 12, 7, 0, 93, 12, 7, 0, 94, 12, 4, 0, 16, 0, - 4, 0, 18, 0,236, 1, 5, 0, 7, 0,126, 9, 7, 0,127, 9, 7, 0,245, 2, 2, 0, 46, 2, 2, 0, 47, 2,237, 1, 5, 0, -236, 1, 2, 0, 4, 0, 52, 0, 7, 0, 95, 12, 7, 0,126, 9, 7, 0,127, 9,238, 1, 4, 0, 2, 0, 96, 12, 2, 0, 97, 12, - 2, 0, 98, 12, 2, 0, 99, 12,239, 1, 2, 0, 37, 0, 44, 7, 21, 0,166, 9,240, 1, 3, 0, 19, 0,100, 12, 4, 0, 18, 0, - 4, 0, 27, 0,241, 1, 6, 0, 7, 0,107, 0, 7, 0,214, 2, 7, 0,101, 12, 7, 0, 27, 0, 2, 0,250, 0, 2, 0,102, 12, -242, 1, 5, 0, 7, 0,103, 12, 7, 0,127, 0, 7, 0,203, 9, 7, 0,204, 9, 4, 0, 18, 0,243, 1, 6, 0, 22, 0, 49, 7, - 0, 0,104, 12, 0, 0,105, 12, 2, 0,106, 12, 2, 0, 18, 0, 4, 0,107, 12,244, 1, 7, 0,244, 1, 0, 0,244, 1, 1, 0, - 0, 0, 19, 0,243, 1,108, 12, 2, 0,109, 12, 2, 0, 16, 0, 7, 0, 59, 0,245, 1, 7, 0, 14, 0,110, 12, 0, 0,111, 12, - 11, 0,112, 12, 7, 0, 59, 0, 7, 0,148, 9, 4, 0, 16, 0, 4, 0, 18, 0,246, 1, 3, 0, 7, 0,113, 12, 4, 0, 18, 0, - 4, 0, 27, 0,247, 1, 15, 0,247, 1, 0, 0,247, 1, 1, 0,107, 1, 21, 10,245, 1, 60, 0, 14, 0,193, 3, 30, 0, 48, 0, -246, 1,114, 12, 4, 0, 52, 0, 7, 0, 59, 0, 2, 0, 18, 0, 2, 0, 22, 1, 4, 0,115, 12, 0, 0,104, 12, 4, 0,116, 12, - 7, 0,118, 10,248, 1, 2, 0, 0, 0,117, 12, 0, 0,118, 12,249, 1, 4, 0,249, 1, 0, 0,249, 1, 1, 0,177, 0, 75, 3, - 14, 0,119, 12,250, 1, 25, 0,250, 1, 0, 0,250, 1, 1, 0, 14, 0,120, 12,177, 0, 96, 9,249, 1,121, 12, 14, 0,122, 12, - 14, 0,193, 3, 0, 0, 19, 0, 7, 0,148, 9, 7, 0,123, 12, 7, 0, 89, 0, 7, 0, 90, 0, 7, 0, 86, 10, 7, 0, 87, 10, - 7, 0, 2, 3, 7, 0,153, 3, 7, 0, 98, 9, 7, 0, 90, 10, 2, 0,124, 12, 2, 0,125, 12, 2, 0, 66, 0, 2, 0, 16, 0, - 11, 0,126, 12, 4, 0, 18, 0, 4, 0, 30, 0,251, 1, 6, 0,251, 1, 0, 0,251, 1, 1, 0, 14, 0,120, 12, 4, 0, 18, 0, - 4, 0, 17, 2, 0, 0, 19, 0,252, 1, 11, 0,252, 1, 0, 0,252, 1, 1, 0, 22, 0, 49, 7, 0, 0,127, 12, 4, 0,107, 12, - 2, 0,128, 12, 2, 0, 27, 0, 0, 0,104, 12, 4, 0,115, 12, 2, 0, 18, 0, 2, 0,129, 12,253, 1, 10, 0,253, 1, 0, 0, -253, 1, 1, 0, 14, 0,130, 12, 0, 0, 61, 12, 0, 0, 19, 0, 0, 0,131, 12, 0, 0,132, 12, 2, 0, 18, 0, 2, 0,129, 12, - 4, 0,133, 12,254, 1, 5, 0,254, 1, 0, 0,254, 1, 1, 0, 0, 0,104, 12, 4, 0,115, 12, 7, 0,235, 2, 34, 0, 12, 0, -177, 0,184, 3,177, 0,134, 12,249, 1,121, 12, 14, 0,135, 12,250, 1,136, 12, 14, 0,137, 12, 14, 0,138, 12, 4, 0, 18, 0, - 4, 0,251, 0, 2, 0,139, 12, 2, 0,140, 12, 7, 0,141, 12,255, 1, 2, 0, 22, 0, 32, 0, 34, 0, 74, 0, 0, 2, 5, 0, - 0, 2, 0, 0, 0, 2, 1, 0, 4, 0, 16, 0, 4, 0, 18, 0, 0, 0,179, 5, 1, 2, 6, 0, 0, 2,142, 12, 27, 0, 43, 0, - 4, 0,143, 12, 7, 0,144, 12, 4, 0,145, 12, 4, 0, 7, 10, 2, 2, 3, 0, 0, 2,142, 12, 4, 0,143, 12, 7, 0,146, 12, - 3, 2, 8, 0, 0, 2,142, 12, 27, 0, 43, 0, 7, 0, 77, 1, 7, 0,147, 12, 7, 0, 41, 3, 7, 0,159, 9, 4, 0,143, 12, - 4, 0,148, 12, 4, 2, 5, 0, 0, 2,142, 12, 7, 0,149, 12, 7, 0,181, 2, 7, 0, 8, 3, 7, 0, 55, 0, 5, 2, 3, 0, - 0, 2,142, 12, 7, 0,159, 9, 7, 0,150, 12,204, 1, 4, 0, 7, 0,151, 12, 7, 0,159, 11, 2, 0,152, 12, 2, 0, 87, 1, - 6, 2, 14, 0, 6, 2, 0, 0, 6, 2, 1, 0, 14, 0,153, 12, 14, 0,154, 12, 14, 0,155, 12, 0, 0,179, 5, 4, 0, 32, 0, - 4, 0, 18, 0, 4, 0,156, 12, 7, 0,157, 12, 4, 0,145, 12, 4, 0, 7, 10, 7, 0, 89, 4, 7, 0, 10, 3,212, 1, 23, 0, - 4, 0,143, 12, 4, 0,158, 12, 7, 0,159, 12, 7, 0, 6, 3, 7, 0,160, 12, 7, 0,239, 8, 7, 0,151, 12, 7, 0,161, 12, - 7, 0,214, 2, 7, 0, 22, 11, 7, 0,222, 4, 7, 0,162, 12, 7, 0,163, 12, 7, 0,164, 12, 7, 0,165, 12, 7, 0,166, 12, - 7, 0,167, 12, 7, 0,168, 12, 7, 0,169, 12, 7, 0,170, 12, 7, 0,171, 12, 7, 0,172, 12, 14, 0,173, 12,124, 0, 40, 0, -123, 0,174, 12, 7, 2,105, 11, 64, 0,175, 12, 64, 0,192, 11, 64, 0,176, 12, 8, 2,177, 12, 43, 0,168, 0, 43, 0,178, 12, - 43, 0,179, 12, 7, 0,180, 12, 7, 0,181, 12, 7, 0,182, 12, 7, 0,183, 12, 7, 0,184, 12, 7, 0,127, 8, 7, 0,185, 12, - 7, 0,181, 1, 7, 0,186, 12, 4, 0,187, 12, 4, 0,188, 12, 4, 0,189, 12, 4, 0, 91, 0, 4, 0, 27, 0, 4, 0,190, 12, - 2, 0,191, 12, 2, 0,192, 12, 4, 0,193, 12, 7, 0,214, 2, 4, 0,194, 12, 7, 0,195, 12, 4, 0,196, 12, 4, 0,197, 12, - 4, 0,198, 12,140, 0,199, 12, 14, 0,200, 12,188, 0,159, 4, 4, 0,201, 12, 7, 0,202, 12, 7, 0,203, 12, 4, 0, 30, 0, -125, 0, 12, 0,123, 0,174, 12,151, 0, 61, 3, 7, 0,146, 1, 7, 0,127, 8, 7, 0,204, 12, 7, 0,205, 12, 7, 0,206, 12, - 2, 0,207, 12, 2, 0,208, 12, 2, 0,209, 12, 2, 0, 16, 0, 4, 0, 91, 0,126, 0, 15, 0,123, 0,174, 12,142, 0, 38, 3, - 7, 0,202, 9, 7, 0,210, 12, 7, 0,211, 12, 4, 0,212, 12, 7, 0, 79, 1, 7, 0,213, 12, 4, 0, 43, 10, 4, 0, 34, 3, - 4, 0,214, 12, 7, 0,183, 12, 2, 0, 16, 0, 2, 0, 27, 0, 4, 0, 30, 0, 9, 2, 15, 0, 22, 0, 32, 0, 34, 0, 74, 0, - 47, 1,237, 8, 7, 0,215, 12, 7, 0,216, 12, 7, 0,217, 12, 7, 0,218, 12, 7, 0,158, 9, 7, 0,219, 12, 7, 0,220, 12, - 7, 0,221, 12, 7, 0, 89, 4, 7, 0,239, 8, 2, 0, 18, 0, 2, 0,122, 9,232, 0, 3, 0, 4, 0,125, 0, 2, 0,222, 6, - 2, 0,222, 12, 10, 2, 5, 0, 0, 0,203, 8, 2, 0,204, 8, 2, 0, 79, 5, 2, 0,223, 12, 2, 0,224, 12,230, 0, 16, 0, - 22, 0, 32, 0, 34, 0, 74, 0, 0, 0, 35, 0, 4, 0,142, 0, 4, 0,143, 0, 4, 0,225, 12, 7, 0,161, 0, 7, 0,162, 0, - 44, 0,137, 0, 11, 2,160, 9,179, 0,187, 3, 12, 2,226, 12, 11, 0,227, 12, 10, 2,228, 12, 4, 0, 18, 0, 4, 0, 22, 0, - 14, 1, 10, 0, 4, 0,131, 0, 4, 0,229, 12, 52, 0,230, 12, 7, 0,231, 12, 2, 0,232, 12, 0, 0,186, 2, 4, 0,125, 0, - 13, 2,180, 3, 14, 2,233, 12, 7, 0,234, 12, 15, 2, 3, 0, 4, 0,125, 0, 7, 0,235, 12, 7, 0, 79, 1, 16, 2, 11, 0, - 11, 0,236, 12, 7, 0,237, 12, 7, 0,238, 12, 7, 0, 27, 0, 7, 0,239, 12, 2, 0,240, 12, 2, 0, 66, 0, 7, 0,241, 12, - 7, 0,242, 12, 7, 0,243, 12, 7, 0,244, 12, 14, 2, 3, 0, 7, 0,245, 12, 4, 0,125, 0, 4, 0, 18, 0, 13, 2, 24, 0, - 13, 2, 0, 0, 13, 2, 1, 0, 0, 0, 19, 0, 7, 0,246, 12, 7, 0,247, 12, 7, 0,248, 12, 7, 0,249, 12, 7, 0, 36, 11, - 4, 0,250, 12, 4, 0,251, 12, 14, 2,252, 12, 7, 0,253, 12, 7, 0,235, 12, 4, 0, 18, 0, 4, 0,254, 12, 4, 0,255, 12, - 7, 0,118, 10, 2, 0, 0, 13, 2, 0,232, 3, 2, 0, 1, 13, 2, 0, 2, 13, 2, 0, 3, 13, 2, 0, 30, 0, 7, 0, 4, 13, - 17, 2, 22, 0, 4, 0, 18, 0, 2, 0, 5, 13, 2, 0, 6, 13, 7, 0, 7, 13, 2, 0, 8, 13, 2, 0, 9, 13, 2, 0, 10, 13, - 2, 0, 11, 13, 2, 0, 12, 13, 2, 0, 13, 13, 2, 0, 14, 13, 2, 0, 8, 3, 4, 0, 15, 13, 4, 0, 16, 13, 2, 0, 17, 13, - 2, 0, 30, 0, 7, 0, 94, 1, 4, 0, 18, 13, 4, 0, 19, 13, 7, 0, 20, 13, 7, 0, 21, 13, 4, 0,250, 1, 18, 2, 12, 0, - 4, 0, 18, 0, 4, 0, 22, 13, 4, 0, 23, 13, 7, 0, 24, 13, 13, 2, 25, 13, 7, 0, 26, 13, 7, 0, 27, 13, 7, 0, 28, 13, - 4, 0,193, 1, 4, 0,131, 0, 7, 0,153, 3, 52, 0, 29, 13, 19, 2, 5, 0, 4, 0, 18, 0, 7, 0,235, 12, 4, 0, 30, 13, - 4, 0, 31, 13, 15, 2, 32, 13, 20, 2, 7, 0, 20, 2, 0, 0, 20, 2, 1, 0, 0, 0, 19, 0, 4, 0, 18, 0, 7, 0,153, 3, - 14, 0, 33, 13, 19, 2, 34, 13, 21, 2, 1, 0, 0, 0, 35, 13, 22, 2, 8, 0, 22, 2, 0, 0, 22, 2, 1, 0, 13, 2,180, 3, - 4, 0, 27, 0, 4, 0, 36, 13, 4, 0, 37, 13, 4, 0, 38, 13, 4, 0, 39, 13, 23, 2, 6, 0, 4, 0,131, 0, 4, 0, 27, 0, - 14, 0, 7, 10, 4, 0, 40, 13, 2, 0, 41, 13, 2, 0, 42, 13, 12, 2, 11, 0, 17, 2, 43, 13, 16, 2, 44, 13, 14, 0, 33, 13, - 19, 2, 34, 13, 18, 2, 45, 13, 13, 2, 46, 13, 14, 0, 47, 13, 4, 0, 48, 13, 4, 0, 49, 13, 21, 2, 97, 6, 23, 2, 50, 13, - 24, 2, 48, 0, 24, 2, 0, 0, 24, 2, 1, 0,170, 0,150, 3, 25, 2, 2, 0, 64, 0, 51, 13,188, 0,159, 4,140, 0,158, 4, - 14, 0, 26, 3, 4, 0, 52, 13, 0, 0, 19, 0, 2, 0,193, 10, 2, 0, 16, 0, 2, 0, 53, 13, 2, 0, 54, 13, 2, 0, 55, 13, - 2, 0, 56, 13, 2, 0, 57, 13, 2, 0, 58, 13, 4, 0, 91, 0, 4, 0,191, 3, 4, 0, 59, 13, 4, 0, 60, 13, 4, 0,203, 9, - 4, 0,204, 9, 4, 0, 27, 0, 7, 0, 61, 13, 47, 0, 62, 13, 0, 0, 63, 13, 4, 0, 64, 13, 4, 0,193, 12, 7, 0, 65, 13, - 7, 0, 66, 13, 7, 0, 67, 13, 7, 0, 68, 13, 7, 0, 69, 13, 7, 0, 70, 13, 7, 0, 71, 13, 7, 0, 72, 13, 7, 0, 73, 13, - 7, 0, 74, 13, 7, 0, 75, 13, 7, 0, 76, 13, 7, 0, 77, 13, 7, 0, 78, 13, 0, 0,207, 2, 0, 0, 79, 13, 0, 0, 80, 13, - 0, 0, 81, 13,170, 0, 7, 0,169, 0, 82, 13,144, 0, 40, 3, 14, 0, 83, 13, 2, 0, 84, 13, 2, 0, 91, 0, 4, 0, 27, 0, - 0, 0, 85, 13,171, 0, 24, 0,169, 0, 82, 13,144, 0, 40, 3,151, 0, 61, 3, 63, 0, 29, 2, 4, 0, 91, 0, 4, 0, 86, 13, - 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,181, 1, 7, 0, 87, 13, 7, 0, 88, 13, 7, 0, 89, 13, 7, 0, 90, 13, - 50, 0, 91, 13, 50, 0, 92, 13, 2, 0, 93, 13, 2, 0,253, 10, 2, 0, 94, 13, 2, 0, 27, 0, 7, 0, 95, 13, 7, 0, 96, 13, - 7, 0, 97, 13, 7, 0, 98, 13, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0,141, 1, 7, 0,142, 1, 2, 0,143, 1, 2, 0,144, 1, 2, 0,145, 1, 2, 0,146, 1, 7, 0,147, 1, 7, 0,148, 1, + 7, 0,149, 1, 7, 0,150, 1, 61, 0, 4, 0, 4, 0, 18, 0, 4, 0,151, 1, 4, 0,152, 1, 4, 0, 66, 0, 62, 0,126, 0, + 22, 0, 32, 0, 34, 0, 74, 0, 2, 0,153, 1, 2, 0, 18, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,154, 1, + 7, 0,155, 1, 7, 0,156, 1, 7, 0,157, 1, 7, 0,158, 1, 7, 0,159, 1, 7, 0,160, 1, 7, 0,161, 1, 7, 0,162, 1, + 7, 0,163, 1, 7, 0,164, 1, 7, 0,165, 1, 7, 0,166, 1, 7, 0,167, 1, 7, 0,168, 1, 7, 0,169, 1, 7, 0,170, 1, + 7, 0,171, 1, 7, 0,172, 1, 7, 0,173, 1, 60, 0,174, 1, 61, 0,175, 1, 7, 0,176, 1, 7, 0,177, 1, 7, 0,178, 1, + 7, 0,179, 1, 7, 0,180, 1, 7, 0,181, 1, 7, 0,182, 1, 2, 0,183, 1, 2, 0,184, 1, 2, 0,185, 1, 0, 0,186, 1, + 0, 0,187, 1, 7, 0,188, 1, 7, 0,189, 1, 2, 0,190, 1, 2, 0,191, 1, 7, 0,192, 1, 7, 0,193, 1, 7, 0,194, 1, + 7, 0,195, 1, 2, 0,196, 1, 2, 0,197, 1, 4, 0, 74, 1, 4, 0,198, 1, 2, 0,199, 1, 2, 0,200, 1, 2, 0,201, 1, + 2, 0,202, 1, 7, 0,203, 1, 7, 0,204, 1, 7, 0,205, 1, 7, 0,206, 1, 7, 0,207, 1, 7, 0,208, 1, 7, 0,209, 1, + 7, 0,210, 1, 7, 0,211, 1, 7, 0,212, 1, 0, 0,213, 1, 7, 0,214, 1, 7, 0,215, 1, 7, 0,216, 1, 4, 0,217, 1, + 0, 0,218, 1, 0, 0,111, 1, 0, 0,219, 1, 0, 0, 63, 1, 2, 0,220, 1, 2, 0,221, 1, 2, 0,131, 1, 2, 0,222, 1, + 2, 0,223, 1, 2, 0,224, 1, 7, 0,225, 1, 7, 0,226, 1, 7, 0,227, 1, 7, 0,228, 1, 7, 0,229, 1, 2, 0,163, 0, + 2, 0,164, 0, 49, 0,230, 1, 49, 0,231, 1, 0, 0,232, 1, 0, 0,233, 1, 0, 0,234, 1, 0, 0,235, 1, 2, 0,236, 1, + 2, 0,237, 1, 7, 0,238, 1, 7, 0,239, 1, 46, 0,130, 1, 56, 0, 58, 1, 31, 0, 79, 0, 63, 0,240, 1, 25, 0,153, 0, + 7, 0,241, 1, 7, 0,242, 1, 7, 0,243, 1, 7, 0,244, 1, 7, 0,245, 1, 2, 0,246, 1, 2, 0, 30, 0, 7, 0,247, 1, + 7, 0,248, 1, 7, 0,249, 1, 7, 0,250, 1, 7, 0,251, 1, 7, 0,252, 1, 7, 0,253, 1, 7, 0,254, 1, 7, 0,255, 1, + 2, 0, 0, 2, 2, 0, 1, 2, 4, 0, 2, 2, 2, 0, 3, 2, 2, 0, 4, 2, 14, 0, 5, 2, 64, 0, 4, 0, 22, 0, 32, 0, + 0, 0, 35, 0, 65, 0, 2, 0, 38, 0,152, 0, 66, 0, 20, 0, 66, 0, 0, 0, 66, 0, 1, 0, 67, 0, 6, 2, 2, 0, 16, 0, + 2, 0, 18, 0, 2, 0, 7, 2, 2, 0, 8, 2, 7, 0, 5, 0, 7, 0, 6, 0, 7, 0, 7, 0, 7, 0, 9, 2, 7, 0, 10, 2, + 7, 0, 11, 2, 7, 0, 12, 2, 7, 0, 13, 2, 7, 0, 14, 2, 7, 0, 15, 2, 7, 0, 22, 0, 7, 0, 16, 2, 7, 0, 17, 2, + 68, 0, 20, 0, 22, 0, 32, 0, 34, 0, 74, 0, 67, 0, 6, 2, 14, 0, 18, 2, 14, 0, 19, 2, 14, 0, 20, 2, 31, 0, 79, 0, + 62, 0, 21, 2, 0, 0, 18, 0, 0, 0, 22, 2, 2, 0, 23, 2, 2, 0,177, 0, 2, 0, 27, 0, 7, 0, 64, 1, 7, 0,175, 0, + 7, 0, 65, 1, 7, 0, 24, 2, 7, 0, 25, 2, 7, 0, 26, 2, 66, 0, 27, 2, 30, 0, 11, 0, 7, 0, 28, 2, 7, 0, 29, 2, + 7, 0, 30, 2, 7, 0,243, 0, 2, 0, 53, 0, 0, 0, 31, 2, 0, 0, 32, 2, 0, 0, 33, 2, 0, 0, 34, 2, 0, 0, 35, 2, + 0, 0, 36, 2, 29, 0, 7, 0, 7, 0, 37, 2, 7, 0, 29, 2, 7, 0, 30, 2, 2, 0, 33, 2, 2, 0, 36, 2, 7, 0,243, 0, + 7, 0, 27, 0, 69, 0, 21, 0, 69, 0, 0, 0, 69, 0, 1, 0, 2, 0, 16, 0, 2, 0, 38, 2, 2, 0, 36, 2, 2, 0, 18, 0, + 2, 0, 39, 2, 2, 0, 40, 2, 2, 0, 41, 2, 2, 0, 42, 2, 2, 0, 43, 2, 2, 0, 44, 2, 2, 0, 45, 2, 2, 0, 46, 2, + 7, 0, 47, 2, 7, 0, 48, 2, 29, 0, 47, 0, 30, 0, 48, 0, 2, 0, 49, 2, 2, 0, 50, 2, 4, 0, 51, 2, 70, 0, 5, 0, + 2, 0, 52, 2, 2, 0, 38, 2, 0, 0, 18, 0, 0, 0, 27, 0, 2, 0, 30, 0, 71, 0, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, + 7, 0, 53, 2, 7, 0, 54, 2, 72, 0, 4, 0, 14, 0, 55, 2, 73, 0, 56, 2, 4, 0, 57, 2, 0, 0, 93, 0, 74, 0, 70, 0, + 22, 0, 32, 0, 34, 0, 74, 0, 67, 0, 6, 2, 14, 0, 58, 2, 14, 0, 19, 2, 72, 0, 59, 2, 27, 0, 60, 2, 27, 0, 61, 2, + 27, 0, 62, 2, 31, 0, 79, 0, 75, 0, 63, 2, 33, 0, 64, 2, 62, 0, 21, 2, 14, 0, 65, 2, 7, 0, 64, 1, 7, 0,175, 0, + 7, 0, 65, 1, 2, 0, 16, 0, 2, 0,177, 0, 2, 0, 66, 2, 2, 0, 67, 2, 7, 0, 68, 2, 7, 0, 69, 2, 4, 0, 70, 2, + 2, 0, 27, 0, 2, 0, 23, 2, 2, 0, 18, 0, 2, 0, 71, 2, 7, 0, 72, 2, 7, 0, 73, 2, 7, 0, 74, 2, 2, 0, 41, 2, + 2, 0, 42, 2, 2, 0, 75, 2, 2, 0, 76, 2, 4, 0, 77, 2, 11, 0, 78, 2, 2, 0, 22, 0, 2, 0, 96, 0, 2, 0, 65, 0, + 2, 0, 79, 2, 7, 0, 80, 2, 7, 0, 81, 2, 7, 0, 82, 2, 7, 0, 83, 2, 7, 0, 84, 2, 7, 0, 85, 2, 7, 0, 86, 2, + 7, 0, 87, 2, 7, 0, 88, 2, 7, 0, 89, 2, 0, 0, 90, 2, 76, 0, 91, 2, 77, 0, 92, 2, 0, 0, 93, 2, 64, 0, 94, 2, + 64, 0, 95, 2, 64, 0, 96, 2, 64, 0, 97, 2, 4, 0, 98, 2, 7, 0, 83, 0, 4, 0, 99, 2, 4, 0,100, 2, 71, 0,101, 2, + 4, 0,102, 2, 4, 0,103, 2, 70, 0,104, 2, 70, 0,105, 2, 7, 0,106, 2, 7, 0,107, 2, 78, 0, 47, 0, 22, 0, 32, 0, + 34, 0, 74, 0, 67, 0, 6, 2, 31, 0, 79, 0, 33, 0, 64, 2, 62, 0, 21, 2, 79, 0,108, 2, 80, 0,109, 2, 81, 0,110, 2, + 82, 0,111, 2, 83, 0,112, 2, 84, 0,113, 2, 85, 0,114, 2, 86, 0,115, 2, 87, 0,116, 2, 88, 0,117, 2, 89, 0,118, 2, + 90, 0,119, 2, 91, 0,120, 2, 92, 0,121, 2, 78, 0,122, 2, 93, 0,123, 2, 94, 0,124, 2, 94, 0,125, 2, 94, 0,126, 2, + 94, 0,127, 2, 94, 0,128, 2, 4, 0, 52, 0, 4, 0,129, 2, 4, 0,130, 2, 4, 0,131, 2, 4, 0,132, 2, 4, 0,133, 2, + 4, 0,134, 2, 7, 0, 64, 1, 7, 0,175, 0, 7, 0, 65, 1, 2, 0,177, 0, 2, 0, 66, 2, 2, 0,135, 2, 2, 0, 18, 0, + 2, 0,136, 2, 2, 0,137, 2, 0, 0,138, 2, 0, 0,139, 2, 2, 0, 23, 2, 95, 0,140, 2, 87, 0, 8, 0, 11, 0,141, 2, + 7, 0,142, 2, 4, 0,143, 2, 0, 0, 18, 0, 0, 0,144, 2, 2, 0, 74, 1, 2, 0,145, 2, 2, 0,146, 2, 85, 0, 7, 0, + 4, 0,147, 2, 4, 0,148, 2, 4, 0,149, 2, 4, 0,150, 2, 2, 0, 38, 2, 0, 0,151, 2, 0, 0, 18, 0, 89, 0, 5, 0, + 4, 0,147, 2, 4, 0,148, 2, 0, 0,152, 2, 0, 0,153, 2, 2, 0, 18, 0, 96, 0, 2, 0, 4, 0,154, 2, 7, 0, 30, 2, + 90, 0, 3, 0, 96, 0,155, 2, 4, 0,156, 2, 4, 0, 18, 0, 88, 0, 4, 0, 7, 0,157, 2, 2, 0,158, 2, 0, 0, 18, 0, + 0, 0,153, 2, 91, 0, 4, 0, 0, 0,226, 0, 0, 0,184, 0, 0, 0,185, 0, 0, 0,186, 0, 80, 0, 5, 0, 4, 0,159, 2, + 4, 0,133, 2, 2, 0, 38, 2, 0, 0, 18, 0, 0, 0, 27, 0, 82, 0, 2, 0, 4, 0,160, 2, 4, 0,161, 2, 81, 0, 6, 0, + 42, 0,141, 2, 0, 0, 18, 0, 0, 0,144, 2, 2, 0, 74, 1, 2, 0,145, 2, 2, 0,146, 2, 83, 0, 2, 0, 7, 0,162, 2, + 4, 0, 18, 0, 84, 0, 4, 0, 0, 0,184, 0, 0, 0,185, 0, 0, 0,186, 0, 0, 0,226, 0, 92, 0, 1, 0, 7, 0,163, 2, + 79, 0, 2, 0, 4, 0, 4, 2, 4, 0, 16, 0, 86, 0, 7, 0, 7, 0,142, 2, 42, 0,141, 2, 0, 0, 18, 0, 0, 0,144, 2, + 2, 0, 74, 1, 2, 0,145, 2, 2, 0,146, 2, 97, 0, 1, 0, 7, 0,164, 2, 98, 0, 1, 0, 4, 0,165, 2, 99, 0, 1, 0, + 0, 0,166, 2,100, 0, 1, 0, 7, 0,142, 2,101, 0, 1, 0, 7, 0,162, 2,102, 0, 4, 0, 4, 0,167, 2, 4, 0,168, 2, + 7, 0,169, 2, 4, 0,170, 2,103, 0, 4, 0, 7, 0,226, 0, 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0,104, 0, 1, 0, +103, 0,143, 2,105, 0, 5, 0, 4, 0,171, 2, 4, 0,172, 2, 0, 0, 18, 0, 0, 0, 38, 2, 0, 0,173, 2,106, 0, 2, 0, + 4, 0,174, 2, 4, 0,172, 2,107, 0, 10, 0,107, 0, 0, 0,107, 0, 1, 0,105, 0,175, 2,104, 0,176, 2,106, 0,177, 2, + 4, 0, 52, 0, 4, 0,130, 2, 4, 0,129, 2, 4, 0, 27, 0, 88, 0,178, 2, 95, 0, 14, 0, 14, 0,179, 2, 88, 0,178, 2, + 0, 0,180, 2, 0, 0,181, 2, 0, 0,182, 2, 0, 0,183, 2, 0, 0,184, 2, 0, 0,185, 2, 0, 0,186, 2, 0, 0, 18, 0, + 94, 0,124, 2, 94, 0,126, 2, 2, 0,187, 2, 0, 0,188, 2,108, 0, 1, 0, 4, 0,165, 2,109, 0, 3, 0, 7, 0, 2, 0, + 4, 0,168, 2, 4, 0, 27, 0,110, 0, 2, 0, 7, 0,189, 2, 4, 0, 18, 0,111, 0, 9, 0,111, 0, 0, 0,111, 0, 1, 0, + 4, 0, 16, 0, 4, 0, 74, 1, 4, 0,190, 2, 4, 0, 27, 0, 0, 0, 19, 0, 41, 0,124, 0, 0, 0,191, 2,112, 0, 6, 0, +111, 0,192, 2, 47, 0,193, 2, 27, 0,194, 2, 0, 0,195, 2, 4, 0,196, 2, 4, 0,197, 2,113, 0, 7, 0,111, 0,192, 2, + 2, 0,198, 2, 2, 0,179, 2, 2, 0,199, 2, 2, 0, 91, 0, 11, 0,200, 2, 11, 0,201, 2,114, 0, 5, 0,111, 0,192, 2, + 27, 0,167, 0, 0, 0, 19, 0, 7, 0,202, 2, 0, 0, 93, 0,115, 0, 5, 0,111, 0,192, 2, 27, 0,167, 0, 0, 0, 19, 0, + 2, 0,203, 2, 0, 0,204, 2,116, 0, 5, 0,111, 0,192, 2, 7, 0, 89, 0, 7, 0,205, 2, 4, 0,206, 2, 4, 0,207, 2, +117, 0, 5, 0,111, 0,192, 2, 27, 0,208, 2, 0, 0, 71, 0, 4, 0, 74, 1, 4, 0, 18, 0,118, 0, 13, 0,111, 0,192, 2, + 27, 0,209, 2, 27, 0,210, 2, 27, 0,211, 2, 27, 0,212, 2, 7, 0,213, 2, 7, 0,214, 2, 7, 0,205, 2, 7, 0,215, 2, + 4, 0,216, 2, 4, 0,217, 2, 4, 0, 91, 0, 4, 0,218, 2,119, 0, 5, 0,111, 0,192, 2, 2, 0,219, 2, 2, 0, 18, 0, + 7, 0,220, 2, 27, 0,221, 2,120, 0, 3, 0,111, 0,192, 2, 7, 0,222, 2, 4, 0, 91, 0,121, 0, 10, 0,111, 0,192, 2, + 7, 0,223, 2, 4, 0,224, 2, 4, 0, 27, 0, 2, 0, 91, 0, 2, 0,225, 2, 2, 0,226, 2, 2, 0,227, 2, 7, 0,228, 2, + 0, 0,229, 2,122, 0, 3, 0,111, 0,192, 2, 7, 0, 27, 0, 4, 0, 16, 0,123, 0, 6, 0,111, 0,192, 2,124, 0,230, 2, +125, 0,231, 2,126, 0,232, 2, 7, 0,233, 2, 4, 0, 16, 0,127, 0, 11, 0,111, 0,192, 2, 47, 0,193, 2, 27, 0,194, 2, + 0, 0,195, 2, 4, 0,196, 2, 4, 0,197, 2, 7, 0,202, 2, 4, 0,234, 2, 0, 0,229, 2, 7, 0,235, 2, 4, 0, 27, 0, +128, 0, 12, 0,111, 0,192, 2, 27, 0,236, 2, 42, 0,237, 2, 4, 0, 91, 0, 4, 0,238, 2, 7, 0,239, 2, 7, 0,240, 2, + 7, 0,241, 2, 7, 0,242, 2, 0, 0,195, 2, 4, 0,196, 2, 4, 0, 27, 0,129, 0, 3, 0,111, 0,192, 2, 7, 0,243, 2, + 4, 0,244, 2,130, 0, 5, 0,111, 0,192, 2, 7, 0,245, 2, 0, 0,229, 2, 2, 0, 18, 0, 2, 0,246, 2,131, 0, 8, 0, +111, 0,192, 2, 27, 0,167, 0, 7, 0,245, 2, 7, 0,243, 0, 7, 0,107, 0, 0, 0,229, 2, 2, 0, 18, 0, 2, 0, 16, 0, +132, 0, 21, 0,111, 0,192, 2, 47, 0,193, 2, 27, 0,194, 2, 0, 0,195, 2, 4, 0,196, 2, 4, 0,197, 2, 27, 0,247, 2, + 0, 0,229, 2, 2, 0, 18, 0, 2, 0, 27, 0, 7, 0,248, 2, 7, 0,249, 2, 7, 0,250, 2, 7, 0, 72, 2, 7, 0,251, 2, + 7, 0,252, 2, 7, 0,253, 2, 7, 0,254, 2, 7, 0,255, 2, 7, 0, 0, 3, 7, 0, 66, 0,133, 0, 7, 0,111, 0,192, 2, + 2, 0, 1, 3, 2, 0, 2, 3, 4, 0, 30, 0, 27, 0,167, 0, 7, 0, 3, 3, 0, 0,229, 2,134, 0, 10, 0,111, 0,192, 2, + 27, 0,167, 0, 0, 0, 4, 3, 7, 0, 5, 3, 7, 0, 6, 3, 7, 0,254, 2, 4, 0, 7, 3, 4, 0, 8, 3, 7, 0, 9, 3, + 0, 0, 19, 0,135, 0, 1, 0,111, 0,192, 2,136, 0, 7, 0,111, 0,192, 2, 41, 0,124, 0,137, 0, 10, 3,138, 0, 11, 3, +139, 0, 12, 3,140, 0, 13, 3, 14, 0, 14, 3,141, 0, 13, 0,111, 0,192, 2, 88, 0, 15, 3, 88, 0, 16, 3, 88, 0, 17, 3, + 88, 0, 18, 3, 88, 0, 19, 3, 88, 0, 20, 3, 85, 0, 21, 3, 4, 0, 22, 3, 4, 0, 23, 3, 7, 0, 24, 3, 7, 0, 25, 3, +142, 0, 26, 3,143, 0, 7, 0,111, 0,192, 2, 88, 0, 15, 3, 88, 0, 27, 3,144, 0, 28, 3,145, 0, 26, 3, 4, 0, 29, 3, + 4, 0, 22, 3,146, 0, 4, 0,111, 0,192, 2, 27, 0,167, 0, 4, 0, 30, 3, 4, 0, 27, 0,147, 0, 2, 0, 4, 0, 31, 3, + 7, 0, 30, 2,148, 0, 2, 0, 4, 0,127, 0, 4, 0, 32, 3,149, 0, 24, 0,111, 0,192, 2, 27, 0,167, 0, 0, 0,229, 2, + 2, 0, 33, 3, 2, 0, 18, 0, 2, 0, 74, 1, 2, 0, 27, 0,147, 0, 34, 3, 4, 0, 35, 3, 7, 0, 36, 3, 4, 0, 52, 0, + 4, 0, 37, 3,148, 0, 38, 3,147, 0, 39, 3, 4, 0, 40, 3, 4, 0, 41, 3, 4, 0, 42, 3, 4, 0, 32, 3, 7, 0, 43, 3, + 7, 0, 44, 3, 7, 0, 45, 3, 7, 0, 46, 3, 7, 0, 47, 3, 11, 0, 48, 3,150, 0, 8, 0,111, 0,192, 2,151, 0, 49, 3, +144, 0, 28, 3, 4, 0, 50, 3, 4, 0, 51, 3, 4, 0, 52, 3, 2, 0, 18, 0, 2, 0, 55, 0,152, 0, 8, 0,111, 0,192, 2, + 27, 0, 43, 0, 2, 0,247, 0, 2, 0, 18, 0, 2, 0,219, 2, 2, 0, 55, 0, 7, 0, 53, 3, 7, 0, 54, 3,153, 0, 6, 0, +111, 0,192, 2, 4, 0, 55, 3, 2, 0, 18, 0, 2, 0, 56, 3, 7, 0, 57, 3, 0, 0,169, 0,154, 0, 8, 0,111, 0,192, 2, + 0, 0, 58, 3, 0, 0, 59, 3, 0, 0,185, 2, 0, 0, 60, 3, 0, 0, 61, 3, 0, 0, 91, 0, 0, 0,173, 2,155, 0, 3, 0, +111, 0,192, 2,156, 0, 62, 3,140, 0, 13, 3,157, 0, 10, 0,111, 0,192, 2, 27, 0, 63, 3, 27, 0, 64, 3, 0, 0, 65, 3, + 7, 0, 66, 3, 2, 0, 67, 3, 2, 0, 68, 3, 0, 0, 69, 3, 0, 0, 70, 3, 0, 0,204, 2,158, 0, 9, 0,111, 0,192, 2, + 27, 0, 71, 3, 0, 0, 65, 3, 7, 0, 72, 3, 7, 0, 73, 3, 0, 0, 74, 1, 0, 0,219, 2, 0, 0, 74, 3, 0, 0, 27, 0, +159, 0, 1, 0,111, 0,192, 2,160, 0, 11, 0,111, 0,192, 2, 0, 0,229, 2, 7, 0,127, 0, 7, 0, 75, 3, 7, 0, 76, 3, + 7, 0, 77, 3, 7, 0, 78, 3, 7, 0, 79, 3, 4, 0, 18, 0, 2, 0, 80, 3, 2, 0, 81, 3,161, 0, 9, 0,111, 0,192, 2, + 27, 0, 82, 3, 4, 0, 83, 3, 4, 0, 84, 3, 4, 0, 85, 3, 7, 0, 86, 3, 7, 0, 87, 3, 2, 0,219, 2, 2, 0, 18, 0, +162, 0, 29, 0,111, 0,192, 2,163, 0, 88, 3,164, 0, 89, 3, 4, 0, 90, 3, 4, 0, 91, 3, 7, 0, 92, 3, 7, 0,253, 2, + 7, 0, 93, 3, 7, 0,238, 0, 7, 0, 94, 3, 7, 0, 95, 3, 7, 0, 96, 3, 7, 0, 97, 3, 7, 0, 98, 3, 7, 0,233, 2, + 4, 0, 99, 3, 4, 0,100, 3, 0, 0,101, 3, 0, 0,102, 3, 0, 0,103, 3, 0, 0,104, 3, 0, 0, 18, 0, 0, 0,105, 3, + 2, 0,106, 3, 2, 0,107, 3, 4, 0,207, 2, 7, 0,107, 0, 7, 0,108, 3, 4, 0, 27, 0,165, 0, 15, 0,111, 0,192, 2, + 47, 0,193, 2, 27, 0,194, 2, 0, 0,195, 2, 4, 0,196, 2, 4, 0,197, 2, 27, 0,109, 3, 27, 0,110, 3, 53, 0, 87, 1, + 0, 0,229, 2, 7, 0,202, 2, 7, 0,111, 3, 0, 0, 18, 0, 0, 0,241, 0, 0, 0,204, 2,166, 0, 16, 0,111, 0,192, 2, + 0, 0,229, 2, 2, 0,112, 3, 2, 0,241, 0, 7, 0,113, 3, 53, 0,114, 3, 7, 0,115, 3, 7, 0,116, 3, 7, 0,117, 3, + 0, 0,118, 3, 4, 0,119, 3, 47, 0,120, 3, 27, 0,121, 3, 4, 0,122, 3, 0, 0,123, 3, 4, 0,124, 3,167, 0, 16, 0, +111, 0,192, 2, 0, 0,125, 3, 0, 0,126, 3, 7, 0,127, 3, 7, 0,128, 3, 0, 0,129, 3, 0, 0,130, 3, 0, 0,131, 3, + 7, 0,117, 3, 0, 0,118, 3, 4, 0,119, 3, 47, 0,120, 3, 27, 0,121, 3, 4, 0,122, 3, 0, 0,123, 3, 4, 0,124, 3, +168, 0, 16, 0,111, 0,192, 2, 0, 0,229, 2, 4, 0,132, 3, 4, 0,133, 3, 27, 0,134, 3, 7, 0,117, 3, 0, 0,118, 3, + 4, 0,119, 3, 47, 0,120, 3, 27, 0,121, 3, 4, 0,122, 3, 0, 0,123, 3, 7, 0,135, 3, 7, 0,136, 3, 2, 0,241, 0, + 2, 0,137, 3,169, 0, 5, 0,111, 0,192, 2,170, 0,138, 3,171, 0,139, 3, 4, 0, 16, 0, 4, 0, 27, 0,172, 0, 8, 0, +111, 0,192, 2, 7, 0,140, 3, 7, 0,141, 3, 7, 0,142, 3, 0, 0,238, 0, 0, 0, 18, 0, 0, 0, 74, 1, 0, 0, 27, 0, +173, 0, 5, 0,111, 0,192, 2, 7, 0,143, 3, 0, 0, 18, 0, 0, 0,144, 3, 0, 0,173, 2,174, 0, 3, 0,175, 0,145, 3, + 4, 0, 57, 2, 0, 0, 93, 0,175, 0, 29, 0, 22, 0, 32, 0, 34, 0, 74, 0, 2, 0, 39, 2, 2, 0, 40, 2, 2, 0,146, 3, + 2, 0, 18, 0, 2, 0,147, 3, 2, 0,148, 3, 2, 0,149, 3, 2, 0, 30, 0, 0, 0,150, 3, 0, 0,151, 3, 0, 0,152, 3, + 0, 0,237, 1, 4, 0, 27, 0, 7, 0,153, 3, 7, 0,154, 3, 7, 0,155, 3, 7, 0,156, 3, 7, 0,157, 3, 7, 0,158, 3, + 29, 0,159, 3, 31, 0, 79, 0, 33, 0, 64, 2, 90, 0,119, 2, 0, 0, 71, 0, 7, 0,160, 3, 7, 0,161, 3,174, 0,162, 3, +176, 0, 5, 0,176, 0, 0, 0,176, 0, 1, 0, 0, 0, 19, 0, 0, 0, 18, 0, 0, 0,123, 0, 67, 0, 3, 0, 7, 0,163, 3, + 4, 0, 18, 0, 4, 0, 27, 0, 27, 0,132, 0, 22, 0, 32, 0, 34, 0, 74, 0,177, 0,164, 3, 2, 0, 16, 0, 2, 0,165, 3, + 4, 0,166, 3, 4, 0,167, 3, 4, 0,168, 3, 0, 0,169, 3, 27, 0, 37, 0, 27, 0,170, 3, 27, 0,171, 3, 27, 0,172, 3, + 27, 0,173, 3, 31, 0, 79, 0, 67, 0, 6, 2,178, 0,174, 3,178, 0,175, 3,179, 0,176, 3, 11, 0, 2, 0,180, 0,177, 3, +181, 0,178, 3,182, 0,179, 3, 14, 0,180, 3, 14, 0,181, 3, 14, 0, 19, 2, 14, 0,182, 3, 14, 0,183, 3, 4, 0, 74, 1, + 4, 0,184, 3, 62, 0, 21, 2, 0, 0,185, 3, 4, 0, 23, 2, 4, 0,186, 3, 7, 0, 64, 1, 7, 0,187, 3, 7, 0,188, 3, + 7, 0,175, 0, 7, 0,189, 3, 7, 0,190, 3, 7, 0, 65, 1, 7, 0,191, 3, 7, 0, 9, 2, 7, 0,192, 3, 7, 0,193, 3, + 7, 0,194, 3, 7, 0,195, 3, 7, 0,196, 3, 7, 0,197, 3, 7, 0, 5, 3, 7, 0,198, 3, 7, 0,232, 0, 7, 0,199, 3, + 4, 0,200, 3, 4, 0,201, 3, 2, 0, 18, 0, 2, 0,202, 3, 2, 0,203, 3, 2, 0,204, 3, 2, 0,205, 3, 2, 0,206, 3, + 2, 0,207, 3, 2, 0,208, 3, 2, 0,209, 3, 0, 0,210, 3, 0, 0,211, 3, 4, 0,212, 3, 4, 0,213, 3, 4, 0,214, 3, + 4, 0,215, 3, 7, 0,216, 3, 7, 0, 83, 0, 7, 0,217, 3, 7, 0,218, 3, 7, 0,219, 3, 7, 0,220, 3, 7, 0,221, 3, + 7, 0,219, 0, 7, 0,222, 3, 7, 0,223, 3, 7, 0,224, 3, 7, 0,225, 3, 7, 0,226, 3, 7, 0,227, 3, 7, 0,228, 3, + 7, 0,229, 3, 0, 0,230, 3, 2, 0,231, 3, 0, 0,232, 3, 0, 0,233, 3, 0, 0,234, 3, 0, 0,235, 3, 0, 0,109, 0, + 0, 0,236, 3, 7, 0,237, 3, 7, 0,238, 3, 14, 0,239, 3, 14, 0,240, 3, 14, 0,241, 3, 14, 0,242, 3, 7, 0,243, 3, + 2, 0, 4, 2, 2, 0,244, 3, 7, 0,143, 2, 4, 0,245, 3, 4, 0,246, 3,183, 0,247, 3, 2, 0,248, 3, 2, 0,239, 0, + 7, 0,249, 3, 14, 0,250, 3, 14, 0,251, 3, 14, 0,252, 3, 14, 0,253, 3,184, 0, 60, 1,185, 0,254, 3, 63, 0,255, 3, + 0, 0, 0, 4, 0, 0, 1, 4, 2, 0, 57, 2, 7, 0,135, 2,156, 0, 2, 4,144, 0, 3, 4,144, 0, 4, 4, 10, 0, 5, 4, + 10, 0, 6, 4, 4, 0, 7, 4, 4, 0, 8, 4, 14, 0, 9, 4, 14, 0, 10, 4, 14, 0, 11, 4, 7, 0, 12, 4,186, 0, 14, 0, +186, 0, 0, 0,186, 0, 1, 0, 27, 0, 37, 0, 7, 0, 5, 3, 7, 0, 66, 1, 7, 0, 6, 3, 7, 0,254, 2, 0, 0, 19, 0, + 4, 0, 7, 3, 4, 0, 8, 3, 4, 0, 13, 4, 2, 0, 16, 0, 2, 0, 14, 4, 7, 0, 9, 3,187, 0, 12, 0,187, 0, 0, 0, +187, 0, 1, 0, 27, 0, 43, 0, 4, 0, 15, 4, 4, 0, 4, 2, 7, 0, 66, 1, 7, 0, 16, 4, 7, 0, 17, 4, 7, 0,162, 2, + 2, 0, 16, 0, 0, 0, 18, 4, 0, 0, 19, 4,184, 0, 40, 0, 4, 0, 18, 0, 2, 0, 20, 4, 2, 0, 21, 4, 2, 0,254, 2, + 2, 0, 22, 4, 2, 0, 23, 4, 2, 0, 24, 4, 2, 0, 25, 4, 2, 0, 26, 4, 7, 0, 27, 4, 7, 0, 28, 4, 7, 0, 29, 4, + 7, 0, 30, 4, 7, 0, 31, 4, 7, 0, 32, 4, 7, 0, 33, 4, 7, 0, 34, 4, 7, 0, 35, 4, 7, 0, 36, 4, 7, 0, 37, 4, + 7, 0, 38, 4, 7, 0, 39, 4, 7, 0, 40, 4, 7, 0, 41, 4, 7, 0, 42, 4, 7, 0, 43, 4, 7, 0, 44, 4, 7, 0, 45, 4, + 7, 0, 46, 4, 7, 0, 47, 4, 7, 0, 48, 4, 7, 0, 49, 4, 7, 0, 50, 4, 7, 0, 51, 4, 7, 0, 52, 4, 7, 0, 53, 4, + 47, 0,168, 0,188, 0, 54, 4, 7, 0, 55, 4, 4, 0,207, 2,189, 0, 5, 0, 63, 0,240, 1, 7, 0, 56, 4, 7, 0, 57, 4, + 2, 0, 18, 0, 2, 0, 58, 4,190, 0, 5, 0,190, 0, 0, 0,190, 0, 1, 0, 4, 0, 16, 0, 4, 0, 59, 4, 11, 0, 2, 0, +191, 0, 9, 0,191, 0, 0, 0,191, 0, 1, 0, 4, 0, 60, 4, 4, 0, 61, 4, 4, 0, 62, 4, 4, 0, 18, 0, 11, 0, 63, 4, + 11, 0, 64, 4, 14, 0, 65, 4,140, 0, 23, 0,140, 0, 0, 0,140, 0, 1, 0, 4, 0, 18, 0, 4, 0, 66, 4, 4, 0, 67, 4, + 4, 0, 68, 4, 4, 0, 69, 4, 4, 0, 70, 4, 4, 0, 71, 4, 4, 0, 72, 4, 4, 0, 27, 0, 4, 0, 61, 4, 4, 0, 4, 2, + 2, 0, 73, 4, 2, 0, 55, 0, 0, 0, 19, 0, 0, 0, 74, 4, 0, 0, 75, 4, 0, 0, 76, 4, 0, 0, 77, 4, 14, 0, 78, 4, +192, 0, 79, 4, 11, 0, 80, 4,193, 0, 1, 0, 7, 0, 37, 2,183, 0, 30, 0, 4, 0, 18, 0, 7, 0, 81, 4, 7, 0, 82, 4, + 7, 0, 83, 4, 4, 0, 84, 4, 4, 0, 85, 4, 4, 0, 86, 4, 4, 0, 87, 4, 7, 0, 88, 4, 7, 0, 89, 4, 7, 0, 90, 4, + 7, 0, 91, 4, 7, 0, 92, 4, 7, 0, 93, 4, 7, 0, 94, 4, 7, 0, 95, 4, 7, 0, 96, 4, 7, 0, 97, 4, 7, 0, 98, 4, + 7, 0, 99, 4, 7, 0,100, 4, 7, 0,101, 4, 7, 0,102, 4, 7, 0,103, 4, 7, 0,104, 4, 7, 0,105, 4, 4, 0,106, 4, + 4, 0,107, 4, 7, 0,108, 4, 7, 0,222, 3,185, 0, 54, 0, 4, 0, 61, 4, 4, 0,109, 4,194, 0,110, 4,195, 0,111, 4, + 0, 0, 27, 0, 0, 0,112, 4, 2, 0,113, 4, 7, 0,114, 4, 0, 0,115, 4, 7, 0,116, 4, 7, 0,117, 4, 7, 0,118, 4, + 7, 0,119, 4, 7, 0,120, 4, 7, 0,121, 4, 7, 0,122, 4, 7, 0,123, 4, 7, 0,124, 4, 2, 0,125, 4, 0, 0,126, 4, + 2, 0,127, 4, 7, 0,128, 4, 7, 0,129, 4, 0, 0,130, 4, 4, 0,128, 0, 4, 0,131, 4, 4, 0,132, 4, 2, 0,133, 4, + 2, 0,134, 4,193, 0,135, 4, 4, 0,136, 4, 4, 0, 81, 0, 7, 0,137, 4, 7, 0,138, 4, 7, 0,139, 4, 7, 0,140, 4, + 2, 0,141, 4, 2, 0,142, 4, 2, 0,143, 4, 2, 0,144, 4, 2, 0,145, 4, 2, 0,146, 4, 2, 0,147, 4, 2, 0,148, 4, +196, 0,149, 4, 7, 0,150, 4, 7, 0,151, 4,140, 0,152, 4, 14, 0, 14, 3,189, 0,153, 4, 7, 0,154, 4, 7, 0,155, 4, + 7, 0,156, 4, 4, 0,157, 4,197, 0, 1, 0, 7, 0,158, 4,156, 0, 52, 0,155, 0,159, 4, 2, 0, 16, 0, 2, 0,160, 4, + 2, 0,161, 4, 2, 0,162, 4, 7, 0,163, 4, 2, 0,164, 4, 2, 0,165, 4, 7, 0,166, 4, 2, 0,167, 4, 2, 0,168, 4, + 7, 0,169, 4, 7, 0,170, 4, 7, 0,171, 4, 4, 0,172, 4, 4, 0,173, 4, 4, 0,174, 4, 4, 0, 27, 0, 7, 0,175, 4, + 4, 0,176, 4, 7, 0,177, 4, 7, 0,178, 4, 7, 0,179, 4, 78, 0,180, 4, 78, 0,181, 4, 0, 0,182, 4, 7, 0,183, 4, + 7, 0,184, 4, 31, 0, 79, 0, 2, 0,185, 4, 0, 0,186, 4, 0, 0,187, 4, 7, 0,188, 4, 4, 0,189, 4, 7, 0,190, 4, + 7, 0,191, 4, 4, 0,192, 4, 4, 0, 18, 0, 7, 0,193, 4, 7, 0,194, 4, 7, 0,195, 4,197, 0,196, 4, 4, 0, 52, 0, + 7, 0,197, 4, 7, 0,198, 4, 7, 0,199, 4, 7, 0,200, 4, 7, 0,201, 4, 7, 0,202, 4, 7, 0,203, 4, 4, 0,204, 4, + 7, 0,205, 4,198, 0, 78, 0, 22, 0, 32, 0, 34, 0, 74, 0, 2, 0,178, 0, 2, 0, 75, 1, 2, 0,111, 1, 2, 0,206, 4, + 7, 0,207, 4, 7, 0,208, 4, 7, 0,209, 4, 7, 0,210, 4, 7, 0,211, 4, 7, 0,212, 4, 7, 0,160, 1, 7, 0,162, 1, + 7, 0,161, 1, 7, 0, 30, 0, 4, 0,213, 4, 7, 0,214, 4, 7, 0,215, 4, 7, 0,216, 4, 7, 0,217, 4, 7, 0,218, 4, + 7, 0,219, 4, 7, 0,220, 4, 2, 0,221, 4, 2, 0, 74, 1, 2, 0,222, 4, 2, 0,223, 4, 2, 0,224, 4, 2, 0,225, 4, + 2, 0,226, 4, 2, 0,227, 4, 7, 0,228, 4, 7, 0,229, 4, 7, 0,230, 4, 7, 0,231, 4, 7, 0,232, 4, 7, 0,233, 4, + 7, 0,234, 4, 7, 0,235, 4, 7, 0,236, 4, 7, 0,237, 4, 7, 0,238, 4, 7, 0,239, 4, 2, 0,240, 4, 2, 0,241, 4, + 2, 0,242, 4, 2, 0,243, 4, 7, 0,244, 4, 7, 0,245, 4, 7, 0,246, 4, 7, 0,247, 4, 2, 0,248, 4, 2, 0,249, 4, + 2, 0,250, 4, 2, 0,251, 4, 7, 0,252, 4, 7, 0,253, 4, 7, 0,254, 4, 7, 0,255, 4, 7, 0, 0, 5, 7, 0, 1, 5, + 7, 0, 2, 5, 2, 0, 3, 5, 2, 0, 4, 5, 2, 0, 5, 5, 2, 0, 6, 5, 2, 0, 7, 5, 2, 0, 18, 0, 7, 0, 8, 5, + 7, 0, 9, 5, 31, 0, 79, 0, 46, 0,130, 1, 2, 0,131, 1, 2, 0, 63, 1, 2, 0,173, 2, 25, 0,153, 0, 56, 0, 58, 1, +199, 0, 8, 0,199, 0, 0, 0,199, 0, 1, 0, 4, 0,200, 3, 4, 0, 10, 5, 4, 0, 18, 0, 2, 0, 11, 5, 2, 0, 12, 5, + 27, 0,167, 0,200, 0, 13, 0, 11, 0, 13, 5, 11, 0, 14, 5, 4, 0, 15, 5, 4, 0, 16, 5, 4, 0, 17, 5, 4, 0, 18, 5, + 4, 0, 19, 5, 4, 0, 20, 5, 4, 0, 21, 5, 4, 0, 22, 5, 4, 0, 23, 5, 4, 0, 27, 0, 0, 0, 24, 5,201, 0, 5, 0, + 11, 0, 25, 5, 11, 0, 26, 5, 4, 0, 27, 5, 4, 0, 30, 0, 0, 0, 28, 5,202, 0, 17, 0, 4, 0, 29, 5, 4, 0, 30, 5, + 4, 0, 31, 5, 4, 0, 32, 5, 4, 0, 33, 5, 4, 0, 34, 5, 4, 0, 35, 5, 4, 0, 36, 5, 4, 0, 37, 5, 4, 0, 38, 5, + 4, 0, 39, 5, 4, 0, 40, 5, 2, 0, 41, 5, 2, 0, 42, 5, 4, 0, 43, 5, 4, 0, 44, 5, 4, 0, 66, 0,203, 0, 17, 0, + 4, 0, 16, 0, 4, 0, 31, 5, 4, 0, 45, 5, 4, 0, 46, 5, 4, 0, 47, 5, 4, 0, 48, 5, 4, 0, 49, 5, 4, 0, 50, 5, + 7, 0, 51, 5, 4, 0, 52, 5, 4, 0, 91, 0, 4, 0, 53, 5, 4, 0, 54, 5, 4, 0, 55, 5, 4, 0, 56, 5, 4, 0, 57, 5, + 21, 0, 31, 0,204, 0, 9, 0, 4, 0, 58, 5, 7, 0, 59, 5, 7, 0, 60, 5, 7, 0, 61, 5, 4, 0, 62, 5, 2, 0, 18, 0, + 2, 0, 27, 0, 7, 0, 83, 4, 7, 0, 30, 0,205, 0, 13, 0,205, 0, 0, 0,205, 0, 1, 0, 0, 0, 19, 0, 62, 0, 63, 5, + 63, 0, 64, 5, 4, 0,200, 3, 4, 0, 65, 5, 4, 0, 66, 5, 4, 0, 67, 5, 4, 0, 68, 5, 4, 0, 69, 5, 4, 0, 70, 5, + 4, 0, 27, 0,206, 0, 13, 0, 0, 0, 71, 5, 0, 0,238, 0, 0, 0, 72, 5, 0, 0, 18, 0, 0, 0, 73, 5, 0, 0, 74, 5, + 0, 0, 75, 5, 0, 0, 76, 5, 2, 0, 77, 5, 2, 0, 78, 5, 7, 0, 79, 5, 0, 0, 80, 5, 0, 0,123, 0,207, 0,106, 0, +206, 0, 81, 5,200, 0, 82, 5,201, 0, 83, 5,202, 0, 84, 5,203, 0, 85, 5, 4, 0, 29, 3, 4, 0,128, 0, 4, 0,131, 4, + 7, 0, 86, 5, 4, 0, 87, 5, 4, 0, 88, 5, 4, 0, 89, 5, 4, 0, 90, 5, 2, 0, 18, 0, 2, 0, 91, 5, 7, 0, 92, 5, + 7, 0, 93, 5, 7, 0, 94, 5, 7, 0, 95, 5, 7, 0, 96, 5, 2, 0, 97, 5, 2, 0, 98, 5, 2, 0, 99, 5, 2, 0,100, 5, + 2, 0,238, 0, 2, 0,101, 5, 4, 0,102, 5, 2, 0,103, 5, 2, 0,104, 5, 2, 0, 97, 1, 2, 0,107, 0, 2, 0,105, 5, + 2, 0,106, 5, 2, 0,107, 5, 2, 0,108, 5, 2, 0,109, 5, 2, 0, 72, 5, 2, 0, 71, 5, 2, 0,110, 5, 2, 0, 73, 5, + 2, 0,111, 5, 4, 0,112, 5, 4, 0, 74, 1, 4, 0,113, 5, 2, 0,114, 5, 2, 0, 66, 0, 2, 0,115, 5, 2, 0,116, 5, + 2, 0,117, 5, 2, 0,118, 5, 2, 0,119, 5, 2, 0,120, 5, 19, 0,121, 5, 19, 0,122, 5, 18, 0,123, 5, 14, 0,124, 5, + 2, 0,125, 5, 2, 0,126, 5, 7, 0,127, 5, 7, 0,128, 5, 7, 0,129, 5, 7, 0,130, 5, 4, 0,131, 5, 7, 0,132, 5, + 7, 0,133, 5, 7, 0,134, 5, 7, 0,135, 5, 2, 0,136, 5, 2, 0,137, 5, 2, 0,138, 5, 2, 0,139, 5, 2, 0,140, 5, + 2, 0,141, 5, 7, 0,142, 5, 7, 0,143, 5, 7, 0,144, 5, 0, 0,145, 5, 4, 0,146, 5, 2, 0,147, 5, 2, 0,237, 1, + 0, 0,148, 5, 7, 0,149, 5, 7, 0,150, 5, 0, 0,151, 5, 0, 0,152, 5, 0, 0,153, 5, 0, 0,154, 5, 4, 0,155, 5, + 2, 0,156, 5, 2, 0,157, 5, 7, 0,158, 5, 7, 0,159, 5, 2, 0,160, 5, 2, 0,161, 5, 7, 0,162, 5, 2, 0,163, 5, + 2, 0,164, 5, 4, 0,165, 5, 2, 0,166, 5, 2, 0,167, 5, 2, 0,168, 5, 2, 0,169, 5, 7, 0,170, 5, 7, 0, 30, 0, + 37, 0,171, 5, 0, 0,172, 5,208, 0, 9, 0,208, 0, 0, 0,208, 0, 1, 0, 0, 0,173, 5, 2, 0,174, 5, 2, 0,175, 5, + 2, 0,176, 5, 2, 0, 66, 0, 7, 0,177, 5, 7, 0, 30, 0,209, 0, 7, 0, 2, 0,224, 2, 2, 0, 74, 1, 2, 0, 87, 3, + 2, 0,178, 5, 7, 0,179, 5, 7, 0, 30, 0, 37, 0,180, 5,210, 0, 5, 0, 7, 0,181, 5, 0, 0, 16, 0, 0, 0, 66, 0, + 0, 0, 30, 0, 0, 0,237, 1,211, 0, 15, 0, 7, 0,182, 5, 7, 0,183, 5, 7, 0,184, 5, 7, 0,185, 5, 7, 0,186, 5, + 7, 0,187, 5, 7, 0,188, 5, 7, 0,189, 5, 7, 0,190, 5, 7, 0,191, 5, 4, 0,192, 5, 7, 0,193, 5, 7, 0,194, 5, + 2, 0, 66, 0, 2, 0, 30, 0,212, 0, 36, 0,210, 0,195, 5, 2, 0,196, 5, 2, 0, 98, 5, 2, 0, 99, 5, 2, 0,100, 5, + 2, 0,238, 0, 2, 0,101, 5, 2, 0,197, 5, 2, 0,198, 5, 2, 0,199, 5, 2, 0,200, 5,209, 0,201, 5, 2, 0,202, 5, + 2, 0,103, 5, 7, 0,203, 5,211, 0,204, 5, 7, 0,219, 4, 7, 0,220, 4, 4, 0, 18, 0, 2, 0, 74, 1, 2, 0,205, 5, + 2, 0,222, 4, 2, 0,223, 4, 2, 0,206, 5, 2, 0, 27, 0, 2, 0,224, 4, 2, 0,225, 4, 2, 0,226, 4, 2, 0,227, 4, + 2, 0,207, 5, 2, 0, 66, 0, 7, 0,208, 5, 7, 0,209, 5, 7, 0,210, 5, 7, 0,211, 5, 7, 0, 30, 0,213, 0, 6, 0, +213, 0, 0, 0,213, 0, 1, 0, 4, 0, 60, 4, 0, 0, 19, 0, 4, 0, 18, 0, 27, 0,212, 5,214, 0, 6, 0,215, 0,139, 3, + 11, 0,213, 5, 0, 0,214, 5, 4, 0, 91, 0, 4, 0,215, 5, 4, 0, 27, 0,216, 0, 8, 0,214, 0,216, 5, 2, 0, 18, 0, + 2, 0, 27, 0, 2, 0,217, 5, 2, 0,218, 5, 2, 0,219, 5, 4, 0, 66, 0, 11, 0,220, 5,217, 0, 6, 0, 2, 0,107, 0, + 2, 0, 66, 4, 2, 0,221, 5, 2, 0,218, 2, 4, 0, 18, 0, 7, 0,202, 2,218, 0, 14, 0, 2, 0, 18, 0, 2, 0,222, 5, + 2, 0,223, 5, 2, 0,224, 5,217, 0,225, 5, 11, 0,220, 5, 7, 0,226, 5, 7, 0, 55, 0, 4, 0,227, 5, 4, 0,228, 5, + 4, 0,229, 5, 4, 0,230, 5, 41, 0,124, 0, 27, 0,167, 0,219, 0, 14, 0,214, 0,216, 5, 4, 0, 91, 0, 4, 0,231, 5, + 7, 0,232, 5, 7, 0,233, 5, 7, 0,234, 5, 4, 0,235, 5, 4, 0,236, 5, 7, 0,237, 5, 7, 0,238, 5, 4, 0,239, 5, + 7, 0,240, 5, 7, 0,241, 5, 4, 0, 27, 0,220, 0, 1, 0,214, 0,216, 5,221, 0, 7, 0,214, 0,216, 5, 2, 0, 18, 0, + 2, 0, 27, 0, 4, 0,227, 0, 4, 0,242, 5, 90, 0,243, 5, 11, 0,220, 5,222, 0, 5, 0,222, 0, 0, 0,222, 0, 1, 0, + 0, 0, 19, 0, 7, 0,244, 5, 4, 0, 27, 0,223, 0, 6, 0, 4, 0,107, 0, 7, 0,245, 5, 7, 0,168, 1, 7, 0, 30, 2, + 4, 0, 18, 0, 4, 0, 27, 0,224, 0, 85, 0,221, 0,246, 5,221, 0,247, 5,219, 0,164, 3,220, 0,248, 5, 7, 0,249, 5, + 2, 0,250, 5, 2, 0,237, 1, 7, 0,251, 5, 7, 0,252, 5, 2, 0, 66, 4, 2, 0,253, 5, 7, 0,254, 5, 7, 0,255, 5, + 7, 0, 0, 6, 2, 0, 1, 6, 2, 0,227, 5, 2, 0, 2, 6, 2, 0, 3, 6, 2, 0, 4, 6, 2, 0, 5, 6, 7, 0, 6, 6, + 7, 0, 7, 6, 7, 0, 8, 6, 2, 0, 9, 6, 2, 0, 10, 6, 2, 0, 11, 6, 2, 0, 12, 6, 2, 0, 13, 6, 2, 0, 14, 6, + 2, 0, 15, 6, 2, 0, 16, 6,216, 0, 17, 6,218, 0, 18, 6, 7, 0, 19, 6, 7, 0, 20, 6, 7, 0, 21, 6, 2, 0, 22, 6, + 2, 0, 23, 6, 0, 0, 24, 6, 0, 0, 25, 6, 2, 0, 26, 6, 7, 0, 27, 6, 7, 0, 28, 6, 7, 0, 29, 6, 7, 0, 30, 6, + 7, 0, 31, 6, 7, 0, 32, 6, 7, 0, 33, 6, 7, 0, 34, 6, 7, 0, 35, 6, 7, 0, 36, 6, 2, 0, 37, 6, 0, 0, 38, 6, + 0, 0, 39, 6, 0, 0, 40, 6, 0, 0, 41, 6, 27, 0, 42, 6, 0, 0, 43, 6, 0, 0, 44, 6, 0, 0, 45, 6, 0, 0, 46, 6, + 0, 0, 47, 6, 0, 0, 48, 6, 0, 0, 49, 6, 0, 0, 50, 6, 0, 0, 51, 6, 0, 0, 52, 6, 2, 0, 53, 6, 2, 0, 54, 6, + 2, 0, 55, 6, 2, 0, 56, 6, 0, 0, 57, 6, 0, 0, 58, 6, 0, 0, 59, 6, 0, 0, 60, 6, 4, 0, 61, 6, 4, 0, 62, 6, + 4, 0, 63, 6, 4, 0, 64, 6, 2, 0, 65, 6, 2, 0, 66, 0, 4, 0, 66, 6, 7, 0, 67, 6, 7, 0, 68, 6,223, 0, 69, 6, +225, 0, 8, 0, 4, 0, 70, 6, 4, 0, 71, 6, 4, 0, 72, 6, 4, 0, 73, 6, 4, 0, 74, 6, 4, 0, 75, 6, 4, 0, 52, 0, + 4, 0,130, 2,226, 0, 4, 0, 7, 0, 76, 6, 0, 0, 77, 6, 0, 0, 78, 6, 2, 0, 18, 0,227, 0, 4, 0, 7, 0, 79, 6, + 4, 0, 18, 0, 4, 0, 80, 6, 4, 0, 55, 0, 41, 0, 46, 0, 22, 0, 32, 0, 34, 0, 74, 0, 27, 0,212, 5,198, 0, 81, 6, + 41, 0, 82, 6, 14, 0, 83, 6,199, 0, 84, 6, 27, 0, 85, 6, 7, 0, 86, 6, 7, 0, 87, 6, 7, 0, 88, 6, 7, 0, 89, 6, + 4, 0,200, 3, 4, 0, 90, 6, 4, 0, 91, 6, 2, 0, 18, 0, 2, 0, 63, 1, 56, 0, 58, 1,228, 0, 92, 6,224, 0, 93, 6, +229, 0, 94, 6,207, 0,184, 0,204, 0, 95, 6, 14, 0,101, 0, 14, 0, 96, 6, 11, 0, 97, 6, 11, 0, 98, 6, 11, 0, 99, 6, + 11, 0,100, 6, 11, 0,101, 6,230, 0,102, 6, 2, 0,103, 6, 2, 0,104, 6, 2, 0,239, 0, 2, 0,201, 3, 4, 0,211, 3, + 4, 0,105, 6, 14, 0,106, 6,210, 0,195, 5,212, 0,107, 6,226, 0,108, 6,180, 0,177, 3,227, 0,109, 6,231, 0,110, 6, + 10, 0, 6, 4, 10, 0,111, 6,232, 0, 14, 0,232, 0, 0, 0,232, 0, 1, 0, 42, 0,230, 0, 40, 0, 57, 1,231, 0,110, 6, +233, 0,112, 6, 7, 0, 87, 2, 7, 0, 88, 2, 7, 0,107, 0, 7, 0,113, 6, 2, 0,114, 6, 2, 0, 18, 0, 2, 0,142, 0, + 2, 0, 27, 0,234, 0, 39, 0, 7, 0,115, 6, 7, 0,116, 6, 7, 0,117, 6, 7, 0,118, 6, 7, 0,119, 6, 7, 0,120, 6, + 7, 0,121, 6, 7, 0,122, 6, 7, 0,123, 6, 67, 0,124, 6,180, 0,177, 3,234, 0,125, 6,235, 0,126, 6,236, 0,127, 6, +237, 0,128, 6,238, 0,129, 6,239, 0,130, 6, 7, 0,131, 6, 7, 0,132, 6, 7, 0, 81, 1, 7, 0,133, 6, 7, 0,134, 6, + 7, 0,135, 6, 7, 0,136, 6, 7, 0,174, 0, 7, 0,137, 6, 0, 0,138, 6, 0, 0,139, 6, 0, 0,114, 6, 0, 0,140, 6, + 2, 0,141, 6, 2, 0,142, 6, 7, 0,143, 6, 2, 0,144, 6, 2, 0,145, 6, 7, 0,146, 6, 7, 0,147, 6, 7, 0,148, 6, + 7, 0,149, 6,240, 0, 51, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 7, 0,152, 6, 2, 0,153, 6, + 7, 0,132, 6, 7, 0, 81, 1, 7, 0,154, 6, 2, 0,155, 6, 0, 0,204, 2, 4, 0,156, 6, 2, 0,139, 6, 2, 0,114, 6, + 27, 0,212, 5, 27, 0,157, 6, 14, 0,158, 6,232, 0,159, 6,240, 0,125, 6, 0, 0,160, 6, 4, 0,200, 3, 4, 0, 90, 6, + 2, 0,161, 6, 2, 0,162, 6, 2, 0,163, 6, 2, 0,164, 6, 2, 0, 18, 0, 2, 0, 22, 2, 7, 0,113, 0, 7, 0,165, 6, + 7, 0,166, 6, 7, 0,167, 6, 7, 0,174, 0, 7, 0, 86, 6, 2, 0,168, 6, 2, 0,169, 6, 2, 0,170, 6, 0, 0,171, 6, + 0, 0,172, 6, 0, 0,173, 6, 0, 0,174, 6, 0, 0,175, 6, 14, 0,176, 6, 14, 0,177, 6, 14, 0,178, 6, 2, 0,179, 6, + 2, 0,144, 2, 2, 0,180, 6, 0, 0,181, 6, 11, 0,182, 6,180, 0,177, 3,242, 0, 24, 0, 19, 0,227, 0, 19, 0, 62, 0, + 18, 0,183, 6, 18, 0,184, 6, 18, 0,185, 6, 7, 0,186, 6, 7, 0,187, 6, 7, 0,188, 6, 7, 0,189, 6, 2, 0,190, 6, + 2, 0,191, 6, 2, 0,192, 6, 2, 0,193, 6, 2, 0,194, 6, 2, 0, 18, 0, 2, 0,195, 6, 2, 0,196, 6, 2, 0,197, 6, + 2, 0,198, 6, 2, 0,199, 6, 2, 0,164, 6, 7, 0,200, 6, 4, 0,201, 6, 4, 0,202, 6,241, 0, 6, 0,241, 0, 0, 0, +241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 7, 0,152, 6, 2, 0,153, 6,243, 0, 8, 0,241, 0, 0, 0,241, 0, 1, 0, + 14, 0,150, 6, 4, 0,151, 6, 7, 0,152, 6, 2, 0,153, 6, 0, 0,203, 6, 0, 0,123, 0,244, 0, 21, 0,241, 0, 0, 0, +241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 7, 0,152, 6, 2, 0,153, 6,242, 0,204, 6, 2, 0,205, 6, 2, 0,206, 6, + 2, 0,207, 6, 2, 0,208, 6, 2, 0,195, 6, 2, 0,209, 6, 2, 0,210, 6, 0, 0, 18, 0, 0, 0, 27, 0, 11, 0, 63, 2, + 4, 0,211, 6, 4, 0,212, 6, 22, 0,213, 6, 11, 0,214, 6,245, 0, 15, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, + 4, 0,151, 6, 7, 0,152, 6, 2, 0,153, 6,242, 0,204, 6, 14, 0,215, 6,246, 0,216, 6, 0, 0,217, 6,247, 0,218, 6, + 2, 0, 18, 0, 2, 0,219, 6, 2, 0,220, 6, 2, 0,221, 6,248, 0, 14, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, + 4, 0,151, 6, 7, 0,152, 6, 2, 0,153, 6,242, 0,204, 6,249, 0,222, 6, 14, 0,223, 6, 2, 0, 74, 1, 2, 0,224, 6, + 4, 0, 18, 0, 7, 0,225, 6, 4, 0,164, 6,250, 0, 11, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, + 7, 0,152, 6, 2, 0,153, 6, 2, 0,224, 6, 2, 0, 18, 0, 4, 0, 27, 0,249, 0,222, 6,242, 0,204, 6,251, 0, 3, 0, +251, 0, 0, 0,251, 0, 1, 0, 7, 0,226, 6,252, 0, 9, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, + 7, 0,152, 6,242, 0,204, 6, 14, 0,227, 6, 4, 0,228, 6, 4, 0, 18, 0,253, 0, 18, 0,241, 0, 0, 0,241, 0, 1, 0, + 14, 0,150, 6, 4, 0,151, 6, 7, 0,152, 6, 2, 0,153, 6,242, 0,204, 6, 7, 0, 87, 2, 7, 0, 88, 2, 2, 0,205, 6, + 2, 0,229, 6, 2, 0,230, 6, 2, 0,231, 6, 4, 0, 18, 0, 7, 0,232, 6, 4, 0,114, 6, 4, 0, 27, 0,180, 0,177, 3, +254, 0, 16, 0, 0, 0,233, 6, 0, 0,234, 6, 0, 0,235, 6, 0, 0,236, 6, 0, 0,237, 6, 0, 0,238, 6, 4, 0,239, 6, + 4, 0,240, 6, 4, 0,241, 6, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0,242, 6, 2, 0,243, 6, 2, 0,180, 1, 2, 0,244, 6, + 0, 0,245, 6,255, 0, 16, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 4, 0,246, 6,254, 0,247, 6, + 0, 1,248, 6, 14, 0,249, 6, 14, 0,250, 6, 1, 1,251, 6,239, 0,252, 6, 2, 1,253, 6, 2, 0,254, 6, 2, 0,255, 6, + 2, 0, 0, 7, 2, 0, 30, 0, 3, 1, 25, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 4, 0, 18, 0, + 42, 0,237, 2, 40, 0, 57, 1, 53, 0, 1, 7, 4, 1, 2, 7, 5, 1, 3, 7,180, 0,177, 3, 7, 0, 4, 7, 7, 0, 87, 2, + 7, 0, 88, 2, 7, 0,232, 6, 7, 0, 5, 7, 7, 0, 6, 7, 2, 0, 7, 7, 2, 0, 27, 0, 2, 0, 8, 7, 2, 0, 9, 7, + 0, 0, 10, 7, 0, 0, 11, 7, 0, 0, 12, 7, 0, 0,164, 6, 6, 1, 31, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, + 4, 0,151, 6, 7, 0,152, 6, 2, 0,153, 6, 37, 0, 13, 7, 4, 0, 14, 7, 4, 0, 15, 7, 2, 0, 91, 0, 2, 0, 16, 7, + 2, 0, 17, 7, 0, 0, 18, 7, 0, 0, 19, 7, 4, 0, 20, 7, 4, 0, 21, 7, 4, 0, 22, 7, 2, 0, 23, 7, 2, 0, 24, 7, + 2, 0, 25, 7, 2, 0, 26, 7, 7, 0, 27, 7, 18, 0, 28, 7, 18, 0, 29, 7, 4, 0, 30, 7, 4, 0, 31, 7, 0, 0, 32, 7, + 0, 0, 33, 7, 2, 0, 34, 7, 0, 0,204, 2, 11, 0, 35, 7, 7, 1, 10, 0, 22, 0, 32, 0, 11, 0, 36, 7, 11, 0, 37, 7, + 11, 0, 38, 7, 11, 0, 39, 7, 11, 0, 40, 7, 4, 0, 91, 0, 4, 0, 41, 7, 0, 0, 42, 7, 0, 0, 43, 7, 8, 1, 10, 0, +241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 7, 0,152, 6, 7, 1, 44, 7, 2, 0, 91, 0, 2, 0, 16, 7, + 4, 0, 66, 0, 11, 0, 45, 7, 9, 1, 27, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 7, 0,152, 6, + 2, 0,153, 6,242, 0,204, 6, 22, 0, 46, 7, 22, 0, 80, 0, 2, 0, 18, 0, 2, 0, 66, 0, 7, 0, 47, 7, 7, 0, 87, 2, + 7, 0, 88, 2, 7, 0,232, 6, 7, 0, 48, 7, 7, 0, 49, 7, 7, 0, 50, 7, 56, 0, 58, 1, 56, 0, 51, 7, 4, 0, 52, 7, + 2, 0, 53, 7, 2, 0, 54, 7, 2, 0,239, 0, 2, 0, 73, 1, 14, 0, 55, 7,180, 0,177, 3, 10, 1, 10, 0,241, 0, 0, 0, +241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 7, 0,152, 6, 2, 0,153, 6, 2, 0, 18, 0, 2, 0,209, 3, 4, 0, 27, 0, +180, 0,177, 3, 11, 1, 7, 0, 11, 1, 0, 0, 11, 1, 1, 0, 4, 0, 56, 7, 4, 0, 22, 0, 0, 0, 85, 0, 4, 0, 57, 7, + 4, 0, 16, 0, 12, 1, 14, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 7, 0,152, 6, 2, 0,153, 6, + 4, 0, 17, 7, 4, 0, 27, 0, 14, 0, 58, 7, 14, 0, 59, 7, 0, 0, 60, 7, 0, 0, 61, 7, 4, 0, 62, 7, 4, 0, 63, 7, + 13, 1, 6, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 4, 0, 27, 0, 0, 0, 64, 7, 14, 1, 28, 0, +241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 7, 0, 87, 2, 7, 0, 88, 2, 7, 0, 65, 7, 7, 0, 66, 7, + 7, 0,232, 6,233, 0, 67, 7,231, 0,110, 6, 15, 1, 2, 7, 4, 0, 18, 0, 2, 0, 74, 1, 2, 0,114, 6, 4, 0, 68, 7, + 7, 0, 69, 7, 7, 0,141, 3, 7, 0, 87, 3, 4, 0, 27, 0, 7, 0, 70, 7, 7, 0, 71, 7, 4, 0, 72, 7, 4, 0, 30, 0, + 11, 0, 73, 7, 2, 0, 74, 7, 2, 0, 75, 7, 4, 0,237, 1, 16, 1, 7, 0, 16, 1, 0, 0, 16, 1, 1, 0, 0, 0, 76, 7, + 2, 0, 77, 7, 2, 0, 78, 7, 2, 0, 79, 7, 2, 0, 27, 0, 17, 1, 12, 0, 2, 0, 78, 7, 2, 0, 80, 7, 2, 0, 81, 7, + 0, 0,204, 2, 2, 0, 82, 7, 2, 0, 83, 7, 2, 0, 84, 7, 2, 0, 85, 7, 2, 0, 86, 7, 2, 0,195, 6, 7, 0, 87, 7, + 7, 0, 88, 7, 18, 1, 18, 0, 18, 1, 0, 0, 18, 1, 1, 0, 0, 0, 19, 0, 17, 1, 89, 7, 17, 1, 90, 7, 17, 1, 91, 7, + 17, 1, 92, 7, 7, 0, 93, 7, 2, 0, 94, 7, 2, 0, 95, 7, 2, 0, 96, 7, 2, 0, 97, 7, 2, 0, 98, 7, 2, 0, 99, 7, + 2, 0,100, 7, 2, 0,101, 7, 2, 0,102, 7, 2, 0, 27, 0, 19, 1, 10, 0, 0, 0,103, 7, 0, 0,104, 7, 0, 0,105, 7, + 0, 0,106, 7, 0, 0,107, 7, 0, 0,108, 7, 2, 0,109, 7, 2, 0,110, 7, 2, 0,111, 7, 2, 0,112, 7, 20, 1, 8, 0, + 0, 0,113, 7, 0, 0,114, 7, 0, 0,115, 7, 0, 0,116, 7, 0, 0,117, 7, 0, 0,118, 7, 7, 0,113, 6, 7, 0, 27, 0, + 21, 1, 3, 0, 0, 0,119, 7, 2, 0,120, 7, 2, 0, 27, 0, 22, 1, 22, 0, 19, 1,121, 7, 19, 1,122, 7, 19, 1,123, 7, + 19, 1,124, 7, 19, 1,125, 7, 19, 1,126, 7, 19, 1,127, 7, 19, 1,128, 7, 19, 1,129, 7, 19, 1,130, 7, 19, 1,131, 7, + 19, 1,132, 7, 19, 1,133, 7, 19, 1,134, 7, 19, 1,135, 7, 19, 1,136, 7, 19, 1,137, 7, 20, 1,138, 7, 21, 1,139, 7, + 0, 0,140, 7, 7, 0,141, 7, 7, 0, 27, 0, 23, 1,124, 0, 0, 0,142, 7, 0, 0,143, 7, 0, 0,107, 7, 0, 0,144, 7, + 0, 0,119, 7, 0, 0,145, 7, 0, 0,146, 7, 0, 0,147, 7, 0, 0,148, 7, 0, 0,149, 7, 0, 0,150, 7, 0, 0,151, 7, + 0, 0,152, 7, 0, 0,153, 7, 0, 0,154, 7, 0, 0,155, 7, 0, 0,156, 7, 0, 0,157, 7, 0, 0,158, 7, 0, 0,159, 7, + 0, 0,160, 7, 0, 0,161, 7, 0, 0,162, 7, 0, 0,163, 7, 0, 0,164, 7, 0, 0,165, 7, 0, 0,166, 7, 0, 0,167, 7, + 0, 0,168, 7, 0, 0,169, 7, 0, 0,170, 7, 0, 0,171, 7, 0, 0,172, 7, 0, 0,173, 7, 0, 0,174, 7, 0, 0,175, 7, + 0, 0,176, 7, 0, 0,177, 7, 0, 0,178, 7, 0, 0,179, 7, 0, 0,180, 7, 0, 0,181, 7, 0, 0,182, 7, 0, 0,183, 7, + 0, 0,184, 7, 0, 0,185, 7, 0, 0,186, 7, 0, 0,187, 7, 0, 0,188, 7, 0, 0,189, 7, 0, 0,190, 7, 0, 0,191, 7, + 0, 0,192, 7, 0, 0,193, 7, 0, 0,194, 7, 0, 0,195, 7, 0, 0,196, 7, 0, 0,197, 7, 0, 0,198, 7, 0, 0,199, 7, + 0, 0,200, 7, 0, 0,201, 7, 0, 0,202, 7, 0, 0,203, 7, 0, 0,204, 7, 0, 0,205, 7, 0, 0,206, 7, 0, 0,207, 7, + 0, 0,208, 7, 0, 0,209, 7, 0, 0,210, 7, 0, 0,211, 7, 0, 0,212, 7, 0, 0,213, 7, 0, 0,214, 7, 0, 0,215, 7, + 0, 0,216, 7, 0, 0,217, 7, 0, 0,218, 7, 0, 0,219, 7, 0, 0,220, 7, 0, 0,221, 7, 0, 0,222, 7, 0, 0,223, 7, + 0, 0,224, 7, 0, 0,225, 7, 0, 0,226, 7, 0, 0,227, 7, 0, 0,228, 7, 0, 0,229, 7, 0, 0,230, 7, 0, 0,231, 7, + 0, 0,232, 7, 0, 0,233, 7, 0, 0,234, 7, 0, 0,235, 7, 0, 0,236, 7, 0, 0,237, 7, 0, 0,238, 7, 0, 0,239, 7, + 0, 0,240, 7, 0, 0,241, 7, 0, 0,242, 7, 0, 0,243, 7, 0, 0,244, 7, 0, 0,245, 7, 0, 0,246, 7, 0, 0,247, 7, + 0, 0,248, 7, 0, 0,249, 7, 0, 0,250, 7, 0, 0,251, 7, 0, 0,252, 7, 0, 0,253, 7, 0, 0,254, 7, 0, 0,255, 7, + 0, 0, 0, 8, 0, 0, 1, 8, 0, 0, 2, 8, 0, 0, 3, 8, 0, 0, 4, 8, 0, 0, 5, 8, 0, 0, 6, 8, 4, 0,116, 5, + 24, 1, 5, 0, 0, 0, 7, 8, 0, 0,165, 7, 0, 0,171, 7, 2, 0, 18, 0, 2, 0, 27, 0, 25, 1, 24, 0, 25, 1, 0, 0, + 25, 1, 1, 0, 0, 0,173, 5, 22, 1, 8, 8, 23, 1, 9, 8, 23, 1, 10, 8, 23, 1, 11, 8, 23, 1, 12, 8, 23, 1, 13, 8, + 23, 1, 14, 8, 23, 1, 15, 8, 23, 1, 16, 8, 23, 1, 17, 8, 23, 1, 18, 8, 23, 1, 19, 8, 23, 1, 20, 8, 23, 1, 21, 8, + 23, 1, 22, 8, 23, 1, 23, 8, 23, 1, 24, 8, 23, 1, 25, 8, 24, 1, 26, 8, 4, 0, 27, 8, 4, 0, 27, 0, 26, 1, 3, 0, + 26, 1, 0, 0, 26, 1, 1, 0, 0, 0, 28, 8, 27, 1, 5, 0, 4, 0, 18, 0, 4, 0, 27, 0, 7, 0,143, 2, 7, 0, 29, 8, + 7, 0, 37, 2, 28, 1, 93, 0, 4, 0, 18, 0, 4, 0, 30, 8, 4, 0, 31, 8, 0, 0, 32, 8, 0, 0, 33, 8, 0, 0, 34, 8, + 0, 0, 35, 8, 0, 0, 36, 8, 0, 0, 37, 8, 0, 0, 38, 8, 0, 0, 39, 8, 4, 0, 40, 8, 2, 0, 41, 8, 2, 0, 42, 8, + 2, 0, 43, 8, 2, 0, 44, 8, 4, 0, 45, 8, 4, 0, 46, 8, 4, 0, 47, 8, 4, 0, 48, 8, 2, 0, 49, 8, 2, 0, 50, 8, + 4, 0, 51, 8, 4, 0, 52, 8, 4, 0, 53, 8, 4, 0, 54, 8, 4, 0, 55, 8, 4, 0, 58, 7, 4, 0, 56, 8, 2, 0, 57, 8, + 2, 0, 58, 8, 2, 0, 59, 8, 2, 0, 60, 8, 14, 0, 61, 8, 14, 0, 62, 8, 14, 0, 63, 8, 14, 0, 64, 8, 14, 0, 65, 8, + 14, 0, 66, 8, 0, 0, 67, 8, 2, 0, 68, 8, 2, 0, 69, 8, 2, 0, 70, 8, 2, 0, 71, 8, 2, 0, 72, 8, 2, 0, 73, 8, + 2, 0, 74, 8, 2, 0, 75, 8, 27, 1, 76, 8, 2, 0, 77, 8, 2, 0, 78, 8, 2, 0, 79, 8, 2, 0, 80, 8, 2, 0, 81, 8, + 2, 0, 82, 8, 2, 0, 83, 8, 2, 0, 84, 8, 4, 0, 85, 8, 4, 0, 86, 8, 2, 0, 87, 8, 2, 0, 88, 8, 2, 0, 89, 8, + 2, 0, 90, 8, 2, 0, 91, 8, 2, 0, 92, 8, 2, 0, 93, 8, 2, 0, 94, 8, 2, 0, 95, 8, 2, 0, 96, 8, 2, 0, 97, 8, + 2, 0, 98, 8, 2, 0, 99, 8, 2, 0,100, 8, 2, 0,101, 8, 2, 0,102, 8, 2, 0,103, 8, 2, 0,104, 8, 7, 0,105, 8, + 4, 0,106, 8, 7, 0,107, 8, 2, 0, 22, 6, 2, 0, 23, 6, 2, 0,108, 8, 2, 0,109, 8, 49, 0,110, 8, 7, 0,111, 8, + 2, 0,112, 8, 2, 0,237, 1, 0, 0,113, 8, 4, 0,114, 8, 4, 0,115, 8, 7, 0,116, 8, 7, 0, 27, 0, 29, 1, 24, 0, + 22, 0, 32, 0, 14, 0,117, 8, 14, 0,118, 8, 14, 0,119, 8, 14, 0,150, 6, 41, 0,124, 0, 41, 0,120, 8, 4, 0,121, 8, + 4, 0, 66, 0, 2, 0,122, 8, 2, 0,123, 8, 2, 0,124, 8, 2, 0,125, 8, 2, 0,126, 8, 2, 0,127, 8, 2, 0,128, 8, + 2, 0,129, 8, 2, 0,130, 8, 2, 0,131, 8, 2, 0,132, 8, 2, 0, 27, 0,239, 0,133, 8, 11, 0,134, 8, 2, 0,135, 8, + 30, 1, 5, 0, 30, 1, 0, 0, 30, 1, 1, 0, 30, 1,136, 8, 15, 0,137, 8, 4, 0, 18, 0, 31, 1, 7, 0, 31, 1, 0, 0, + 31, 1, 1, 0, 30, 1,138, 8, 30, 1,139, 8, 2, 0,122, 5, 2, 0, 18, 0, 4, 0, 27, 0, 32, 1, 25, 0, 32, 1, 0, 0, + 32, 1, 1, 0, 33, 1,140, 8, 34, 1,253, 6, 0, 0,141, 8, 0, 0,142, 8, 0, 0,143, 8, 2, 0,144, 8, 2, 0,145, 8, + 2, 0,146, 8, 2, 0,147, 8, 2, 0,148, 8, 2, 0, 27, 0, 2, 0, 18, 0, 2, 0,149, 8, 2, 0,150, 8, 2, 0,151, 8, + 4, 0,152, 8, 32, 1,153, 8, 11, 0,154, 8, 4, 0,155, 8, 4, 0,156, 8, 4, 0,157, 8, 4, 0,158, 8, 0, 0,159, 8, + 35, 1, 22, 0, 35, 1, 0, 0, 35, 1, 1, 0, 30, 1,138, 8, 30, 1,139, 8, 30, 1,160, 8, 30, 1,161, 8, 29, 1,162, 8, + 18, 0, 50, 0, 0, 0,151, 6, 0, 0,163, 8, 2, 0,196, 6, 2, 0,197, 6, 2, 0,164, 8, 2, 0, 27, 0, 2, 0,126, 8, + 2, 0, 57, 7, 2, 0, 18, 0, 36, 1,140, 8, 14, 0,165, 8, 14, 0,150, 6, 14, 0,166, 8, 14, 0,167, 8, 37, 1, 24, 0, + 37, 1, 0, 0, 37, 1, 1, 0,242, 0,204, 6, 18, 0,168, 8, 18, 0,169, 8, 2, 0,196, 6, 2, 0,197, 6, 2, 0,170, 8, + 2, 0,171, 8, 2, 0,172, 8, 2, 0, 18, 0, 7, 0, 83, 2, 2, 0,146, 8, 2, 0,147, 8, 2, 0,125, 8, 2, 0,173, 8, + 2, 0,130, 8, 2, 0, 73, 1, 38, 1,140, 8, 14, 0,174, 8, 14, 0,175, 8, 14, 0,166, 8, 0, 0,176, 8, 11, 0,177, 8, + 39, 1, 14, 0, 0, 0,178, 8, 2, 0,179, 8, 2, 0,180, 8, 2, 0,181, 8, 2, 0,182, 8, 2, 0,111, 5, 2, 0,183, 8, + 29, 1,184, 8, 41, 0,185, 8, 4, 0,186, 8, 4, 0,187, 8, 4, 0,188, 8, 4, 0, 27, 0, 0, 0, 76, 7, 40, 1, 3, 0, + 0, 0,189, 8, 4, 0,190, 8, 4, 0,191, 8, 41, 1, 4, 0, 4, 0, 14, 7, 4, 0,192, 8, 4, 0, 20, 7, 4, 0,193, 8, + 42, 1, 2, 0, 4, 0,194, 8, 4, 0,195, 8, 43, 1, 5, 0, 7, 0,196, 8, 7, 0,197, 8, 7, 0,198, 8, 4, 0, 18, 0, + 4, 0, 27, 0, 44, 1, 7, 0, 0, 0,199, 8, 0, 0,235, 6, 44, 0,137, 0, 2, 0,200, 8, 2, 0, 73, 5, 2, 0,201, 8, + 2, 0,202, 8, 45, 1, 12, 0, 45, 1, 0, 0, 45, 1, 1, 0, 4, 0, 28, 0, 4, 0,203, 8, 4, 0,204, 8, 4, 0,205, 8, + 40, 1,206, 8, 0, 0,199, 8, 44, 1,171, 3, 41, 1,207, 8, 42, 1,208, 8, 43, 1,209, 8, 46, 1, 49, 0, 46, 1, 0, 0, + 46, 1, 1, 0, 11, 0,210, 8, 11, 0, 25, 0, 0, 0, 19, 0, 4, 0, 18, 0, 4, 0, 16, 0, 4, 0, 22, 0, 4, 0, 89, 0, + 4, 0,211, 8, 4, 0,212, 8, 4, 0,204, 8, 4, 0,205, 8, 4, 0,213, 8, 4, 0,238, 0, 4, 0,214, 8, 4, 0,215, 8, + 7, 0,216, 8, 7, 0,217, 8, 7, 0,218, 8, 2, 0,219, 8, 2, 0,220, 8, 4, 0,221, 8, 4, 0,222, 8, 45, 1,223, 8, + 31, 0, 79, 0, 41, 0,124, 0, 27, 0,224, 8, 44, 0,137, 0,231, 0,110, 6, 7, 0,225, 8, 7, 0,226, 8, 46, 1,227, 8, + 46, 1,228, 8, 46, 1,229, 8, 14, 0,230, 8, 47, 1,231, 8, 11, 0,232, 8, 7, 0, 83, 4, 7, 0,233, 8, 7, 0,234, 8, + 7, 0,235, 8, 11, 0,236, 8, 4, 0,237, 8, 4, 0,238, 8, 4, 0,239, 8, 7, 0,240, 8, 4, 0,128, 0, 4, 0, 27, 0, + 48, 1, 4, 0, 48, 1, 0, 0, 48, 1, 1, 0, 14, 0,241, 8, 46, 1,242, 8,228, 0, 11, 0, 14, 0,243, 8, 14, 0,230, 8, + 14, 0,244, 8, 46, 1,245, 8, 0, 0,246, 8, 0, 0,247, 8, 4, 0,248, 8, 4, 0,249, 8, 4, 0,250, 8, 4, 0, 27, 0, + 19, 0,251, 8, 49, 1, 4, 0, 7, 0,252, 8, 7, 0, 87, 3, 2, 0,253, 8, 2, 0,254, 8, 50, 1, 6, 0, 7, 0,255, 8, + 7, 0, 0, 9, 7, 0, 1, 9, 7, 0, 2, 9, 4, 0, 3, 9, 4, 0, 4, 9, 51, 1, 8, 0, 7, 0, 5, 9, 7, 0, 6, 9, + 7, 0, 7, 9, 7, 0, 8, 9, 7, 0, 9, 9, 4, 0,243, 2, 4, 0, 10, 9, 4, 0, 11, 9, 52, 1, 2, 0, 7, 0,181, 5, + 7, 0, 27, 0, 53, 1, 5, 0, 7, 0, 12, 9, 7, 0, 13, 9, 4, 0, 91, 0, 4, 0,205, 2, 4, 0, 14, 9, 54, 1, 6, 0, + 54, 1, 0, 0, 54, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 15, 9, 2, 0, 55, 0, 55, 1, 8, 0, 55, 1, 0, 0, + 55, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 15, 9, 2, 0, 55, 0, 7, 0, 22, 0, 7, 0,128, 0, 56, 1, 45, 0, + 56, 1, 0, 0, 56, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 15, 9, 2, 0,234, 0, 2, 0,125, 4, 2, 0, 16, 9, + 7, 0, 17, 9, 7, 0, 90, 0, 7, 0, 0, 3, 4, 0, 18, 9, 4, 0, 81, 0, 4, 0,207, 2, 7, 0, 19, 9, 7, 0, 20, 9, + 7, 0, 21, 9, 7, 0, 22, 9, 7, 0, 23, 9, 7, 0, 24, 9, 7, 0,253, 2, 7, 0, 56, 1, 7, 0, 25, 9, 7, 0, 26, 9, + 7, 0, 27, 0, 7, 0, 27, 9, 7, 0, 28, 9, 7, 0, 29, 9, 2, 0, 30, 9, 2, 0, 31, 9, 2, 0, 32, 9, 2, 0, 33, 9, + 2, 0, 34, 9, 2, 0, 35, 9, 2, 0, 36, 9, 2, 0, 37, 9, 2, 0, 22, 2, 2, 0, 38, 9, 2, 0, 19, 2, 2, 0, 39, 9, + 0, 0, 40, 9, 0, 0, 41, 9, 7, 0,232, 0, 57, 1, 42, 9, 63, 0,240, 1, 58, 1, 16, 0, 58, 1, 0, 0, 58, 1, 1, 0, + 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 15, 9, 2, 0,234, 0, 7, 0,248, 2, 7, 0,249, 2, 7, 0,250, 2, 7, 0, 72, 2, + 7, 0,251, 2, 7, 0,252, 2, 7, 0, 43, 9, 7, 0,253, 2, 7, 0,255, 2, 7, 0, 0, 3,247, 0, 5, 0, 2, 0, 16, 0, + 2, 0, 44, 9, 2, 0, 18, 0, 2, 0, 45, 9, 22, 0, 46, 7,246, 0, 3, 0, 4, 0, 68, 0, 4, 0, 46, 9,247, 0, 2, 0, + 59, 1, 7, 0, 59, 1, 0, 0, 59, 1, 1, 0, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 4, 0, 21, 0, 11, 0, 47, 9, + 60, 1, 5, 0, 0, 0, 19, 0, 7, 0, 81, 1, 7, 0, 48, 9, 4, 0, 49, 9, 4, 0, 27, 0, 61, 1, 4, 0, 2, 0, 16, 0, + 2, 0, 18, 0, 2, 0, 66, 0, 2, 0, 30, 0, 62, 1, 4, 0, 0, 0, 19, 0, 62, 0, 50, 9, 7, 0, 81, 1, 7, 0, 27, 0, + 63, 1, 6, 0, 2, 0, 51, 9, 2, 0, 52, 9, 2, 0, 16, 0, 2, 0, 53, 9, 0, 0, 54, 9, 0, 0, 55, 9, 64, 1, 5, 0, + 4, 0, 16, 0, 4, 0, 27, 0, 0, 0, 19, 0, 0, 0, 56, 9, 0, 0, 57, 9, 65, 1, 3, 0, 4, 0, 16, 0, 4, 0, 27, 0, + 0, 0, 19, 0, 66, 1, 4, 0, 2, 0, 58, 9, 2, 0, 59, 9, 2, 0, 18, 0, 2, 0, 27, 0, 67, 1, 6, 0, 0, 0, 19, 0, + 0, 0, 60, 9, 2, 0, 61, 9, 2, 0,253, 2, 2, 0, 74, 1, 2, 0, 30, 0, 68, 1, 5, 0, 0, 0, 19, 0, 7, 0, 87, 3, + 7, 0,216, 4, 2, 0, 18, 0, 2, 0,219, 2, 69, 1, 3, 0, 0, 0, 19, 0, 4, 0,207, 2, 4, 0, 58, 9, 70, 1, 7, 0, + 0, 0, 19, 0, 7, 0,216, 4, 0, 0, 62, 9, 0, 0, 63, 9, 2, 0, 74, 1, 2, 0, 66, 0, 4, 0, 64, 9, 71, 1, 4, 0, + 0, 0, 65, 9, 0, 0, 66, 9, 4, 0, 16, 0, 7, 0,223, 2, 72, 1, 3, 0, 27, 0, 67, 9, 0, 0, 68, 9, 0, 0, 69, 9, + 73, 1, 18, 0, 73, 1, 0, 0, 73, 1, 1, 0, 2, 0, 16, 0, 2, 0, 70, 9, 2, 0, 18, 0, 2, 0, 71, 9, 2, 0, 72, 9, + 2, 0, 73, 9, 2, 0, 66, 0, 2, 0, 30, 0, 0, 0, 19, 0, 11, 0, 2, 0, 74, 1, 74, 9, 27, 0, 43, 0, 2, 0,221, 5, + 2, 0,168, 2, 2, 0, 75, 9, 2, 0, 27, 0, 75, 1, 11, 0, 0, 0, 19, 0, 0, 0, 16, 0, 0, 0, 76, 9, 2, 0, 18, 0, + 2, 0,219, 2, 2, 0, 77, 9, 4, 0, 78, 9, 4, 0, 79, 9, 4, 0, 80, 9, 4, 0, 81, 9, 4, 0, 82, 9, 76, 1, 1, 0, + 0, 0, 83, 9, 77, 1, 4, 0, 37, 0, 13, 7, 0, 0, 28, 8, 4, 0, 74, 1, 4, 0, 18, 0, 74, 1, 18, 0, 74, 1, 0, 0, + 74, 1, 1, 0, 74, 1, 84, 9, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 85, 9, 2, 0, 73, 9, 2, 0, 70, 9, 2, 0, 86, 9, + 2, 0, 30, 0, 2, 0,237, 1, 0, 0, 19, 0, 11, 0, 2, 0, 78, 1, 74, 9, 73, 1, 87, 9, 2, 0, 14, 0, 2, 0, 88, 9, + 4, 0, 89, 9, 79, 1, 3, 0, 4, 0,233, 2, 4, 0, 27, 0, 27, 0, 43, 0, 80, 1, 15, 0,178, 0, 90, 9, 2, 0, 16, 0, + 2, 0, 18, 0, 7, 0, 17, 9, 7, 0, 90, 0, 0, 0, 19, 0, 0, 0, 91, 9, 2, 0, 92, 9, 2, 0, 93, 9, 2, 0,133, 0, + 2, 0, 94, 9, 2, 0, 95, 9, 2, 0, 27, 0, 7, 0, 96, 9, 7, 0, 97, 9, 81, 1, 8, 0, 7, 0, 98, 9, 7, 0, 99, 9, + 7, 0,100, 9, 7, 0,101, 9, 7, 0,102, 9, 7, 0,103, 9, 7, 0,104, 9, 7, 0,105, 9, 82, 1, 13, 0, 2, 0, 18, 0, + 2, 0,106, 9, 4, 0, 66, 0, 4, 0, 30, 0, 2, 0,181, 6, 7, 0, 83, 4, 7, 0,233, 8, 47, 1,231, 8, 81, 1,107, 9, + 2, 0, 16, 0, 2, 0,116, 5, 2, 0,211, 3, 2, 0,108, 9, 83, 1, 11, 0, 4, 0,233, 2, 2, 0, 16, 0, 2, 0, 18, 0, + 27, 0, 43, 0, 78, 0,109, 9, 0, 0, 19, 0, 7, 0,110, 9, 7, 0,111, 9, 7, 0,217, 3, 2, 0,112, 9, 2, 0,113, 9, + 84, 1, 5, 0, 2, 0, 16, 0, 2, 0, 66, 0, 4, 0, 27, 0, 41, 0,124, 0, 27, 0,212, 5, 85, 1, 5, 0, 4, 0, 27, 0, + 4, 0, 16, 0, 0, 0, 19, 0, 0, 0, 56, 9, 27, 0, 43, 0, 86, 1, 13, 0, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0, 70, 9, + 2, 0,218, 3, 7, 0,114, 9, 7, 0,115, 9, 7, 0, 73, 1, 7, 0,116, 9, 7, 0,187, 3, 7, 0,191, 3, 7, 0,117, 9, + 7, 0,118, 9, 27, 0,119, 9, 87, 1, 10, 0, 2, 0, 18, 0, 2, 0, 16, 0, 7, 0, 17, 9, 7, 0, 90, 0, 0, 0, 19, 0, + 0, 0, 91, 9, 2, 0, 66, 0, 2, 0, 30, 0, 2, 0,237, 1, 2, 0,116, 5, 88, 1, 8, 0, 27, 0, 43, 0, 7, 0,250, 2, + 7, 0,120, 9, 7, 0,121, 9, 7, 0,218, 3, 2, 0, 66, 0, 2, 0,219, 2, 7, 0, 30, 0, 89, 1, 12, 0, 2, 0, 16, 0, + 2, 0, 74, 1, 2, 0, 18, 0, 2, 0,253, 2, 2, 0,233, 2, 2, 0,122, 9, 4, 0, 27, 0, 7, 0,123, 9, 7, 0,124, 9, + 7, 0,125, 9, 7, 0,126, 9, 0, 0,127, 9, 90, 1, 9, 0, 2, 0, 18, 0, 2, 0, 16, 0, 4, 0, 17, 9, 4, 0, 90, 0, + 0, 0, 19, 0, 2, 0, 73, 1, 2, 0, 62, 0, 2, 0,128, 9, 2, 0,129, 9, 91, 1, 7, 0, 4, 0,207, 2, 4, 0,130, 9, + 4, 0,131, 9, 4, 0,132, 9, 7, 0,133, 9, 7, 0,134, 9, 0, 0, 62, 9, 92, 1, 7, 0, 0, 0,135, 9, 27, 0,136, 9, + 0, 0, 68, 9, 2, 0,137, 9, 2, 0, 66, 0, 4, 0, 30, 0, 0, 0, 69, 9, 93, 1, 6, 0, 2, 0, 18, 0, 2, 0, 16, 0, + 4, 0, 17, 9, 4, 0, 90, 0, 0, 0,138, 9, 0, 0,139, 9, 94, 1, 1, 0, 4, 0, 18, 0, 95, 1, 6, 0, 0, 0, 93, 0, + 2, 0, 16, 0, 2, 0, 18, 0, 4, 0,140, 9, 7, 0,141, 9, 37, 0, 13, 7, 96, 1, 4, 0, 0, 0,173, 2, 2, 0, 18, 0, + 4, 0, 16, 0, 27, 0, 43, 0, 97, 1, 2, 0, 4, 0, 16, 0, 4, 0,185, 6, 98, 1, 8, 0, 0, 0, 65, 9, 0, 0, 66, 9, + 4, 0, 16, 0, 7, 0, 30, 2, 7, 0,142, 9, 7, 0, 27, 0, 27, 0, 63, 3, 27, 0,143, 9, 99, 1, 11, 0, 0, 0, 58, 6, + 0, 0, 18, 0, 2, 0,144, 9, 4, 0, 16, 0, 7, 0, 81, 1, 7, 0,145, 9, 7, 0,146, 9, 7, 0,147, 9, 4, 0,148, 9, + 27, 0, 63, 3, 27, 0,149, 9, 78, 1, 10, 0, 78, 1, 0, 0, 78, 1, 1, 0, 78, 1, 84, 9, 2, 0, 16, 0, 2, 0, 18, 0, + 2, 0, 70, 9, 2, 0,150, 9, 0, 0, 19, 0, 11, 0, 2, 0, 27, 0, 43, 0, 47, 1, 17, 0, 22, 0, 32, 0, 0, 0, 35, 0, + 38, 0,152, 0, 11, 0,151, 9, 38, 0,152, 9, 31, 0, 79, 0, 7, 0, 83, 4, 7, 0,153, 9, 7, 0,233, 8, 7, 0, 98, 9, + 7, 0, 99, 9, 7, 0,154, 9, 4, 0, 91, 0, 4, 0, 27, 0, 11, 0,155, 9, 11, 0,156, 9, 11, 0,157, 9,100, 1, 6, 0, +100, 1, 0, 0,100, 1, 1, 0, 27, 0, 43, 0, 11, 0,158, 9, 2, 0,239, 0, 0, 0,204, 2, 63, 0, 4, 0, 22, 0, 32, 0, + 14, 0,159, 9, 4, 0,133, 0, 7, 0,160, 9,101, 1, 28, 0,101, 1, 0, 0,101, 1, 1, 0, 21, 0,161, 9,101, 1, 37, 0, + 14, 0,162, 9, 0, 0, 19, 0, 7, 0,163, 9, 7, 0,164, 9, 7, 0,165, 9, 7, 0,166, 9, 4, 0, 18, 0, 7, 0,167, 9, + 7, 0,168, 9, 7, 0,169, 9, 7, 0,170, 9, 7, 0, 81, 1, 7, 0, 30, 2, 7, 0,171, 9, 7, 0,205, 2, 7, 0,172, 9, + 7, 0,173, 9, 7, 0,174, 9, 7, 0,175, 9, 7, 0,176, 9, 7, 0,175, 0, 4, 0,133, 0, 2, 0, 2, 6, 2, 0,177, 9, +102, 1, 27, 0, 22, 0, 32, 0, 34, 0, 74, 0, 14, 0,178, 9, 14, 0,179, 9, 14, 0,180, 9,101, 1,181, 9, 11, 0,182, 9, + 11, 0,183, 9, 4, 0, 18, 0, 4, 0,161, 6, 4, 0,184, 9, 4, 0, 27, 0, 2, 0, 1, 3, 2, 0,211, 6, 4, 0,185, 9, + 4, 0,133, 0, 4, 0,186, 9, 2, 0,187, 9, 2, 0,188, 9, 2, 0,189, 9, 2, 0,190, 9, 4, 0,191, 9, 4, 0,192, 9, + 4, 0,193, 9, 4, 0,194, 9, 4, 0,195, 9, 4, 0,196, 9,103, 1, 2, 0, 7, 0,157, 2, 4, 0, 18, 0,182, 0, 5, 0, +103, 1,197, 9, 4, 0,205, 2, 4, 0,198, 9, 4, 0,199, 9, 4, 0, 18, 0,181, 0, 16, 0, 4, 0,200, 9, 4, 0,201, 9, + 4, 0,202, 9, 4, 0,203, 9, 2, 0,204, 9, 2, 0,205, 9, 2, 0,206, 9, 2, 0,239, 0, 2, 0,207, 9, 2, 0,208, 9, + 2, 0,209, 9, 2, 0,210, 9, 4, 0,211, 9, 4, 0,212, 9, 4, 0,213, 9, 4, 0,214, 9,104, 1, 40, 0,104, 1, 0, 0, +104, 1, 1, 0, 21, 0,161, 9, 14, 0,250, 3, 0, 0, 19, 0, 2, 0, 18, 0, 2, 0,215, 9, 2, 0,204, 3, 2, 0,216, 9, + 0, 0,217, 9, 0, 0,218, 9, 0, 0,219, 9,101, 1,220, 9,104, 1, 37, 0,104, 1,221, 9, 14, 0,222, 9, 14, 0,223, 9, +182, 0,179, 3, 27, 0,224, 9,104, 1,225, 9, 7, 0, 64, 1, 7, 0,175, 0, 7, 0,226, 9, 7, 0, 9, 2, 7, 0,193, 3, + 7, 0,195, 3, 2, 0,231, 3, 2, 0, 27, 0, 7, 0,227, 9, 7, 0,228, 9, 7, 0,198, 3, 7, 0,229, 9, 7, 0,230, 9, + 7, 0,231, 9, 7, 0,232, 9, 7, 0,233, 9, 7, 0,234, 9, 7, 0,235, 9, 7, 0,236, 9, 11, 0,237, 9,179, 0, 16, 0, + 14, 0,238, 9, 73, 0,239, 9, 2, 0, 18, 0, 2, 0, 27, 0, 4, 0,240, 9, 4, 0, 66, 0, 7, 0, 83, 0, 7, 0,241, 9, + 7, 0,242, 9, 14, 0,243, 9, 4, 0,244, 9, 4, 0,245, 9, 11, 0,246, 9, 11, 0,247, 9,181, 0,178, 3, 0, 0,248, 9, +105, 1, 1, 0, 4, 0,245, 9,106, 1, 12, 0, 4, 0,245, 9, 7, 0, 82, 9, 2, 0,249, 9, 2, 0,250, 9, 7, 0,251, 9, + 7, 0,252, 9, 2, 0,253, 9, 2, 0, 18, 0, 7, 0,254, 9, 7, 0,255, 9, 7, 0, 0, 10, 7, 0, 1, 10,107, 1, 7, 0, +107, 1, 0, 0,107, 1, 1, 0, 14, 0, 2, 10, 4, 0, 18, 0, 4, 0, 3, 10, 0, 0, 19, 0, 24, 1, 4, 10,178, 0, 9, 0, + 22, 0, 32, 0, 14, 0, 5, 10, 14, 0,238, 9, 14, 0, 6, 10, 14, 0,101, 0, 4, 0, 18, 0, 4, 0, 7, 10, 4, 0, 8, 10, + 4, 0, 27, 0,249, 0, 8, 0, 22, 0, 9, 10, 14, 0,238, 9, 63, 0, 10, 10, 0, 0, 11, 10, 4, 0, 12, 10, 4, 0, 18, 0, + 4, 0, 13, 10, 4, 0, 27, 0,108, 1, 13, 0,241, 0, 0, 0,241, 0, 1, 0, 14, 0,150, 6, 4, 0,151, 6, 7, 0,152, 6, + 2, 0,153, 6,242, 0,204, 6,178, 0,174, 3,249, 0, 14, 10, 0, 0, 74, 1, 0, 0,224, 6, 2, 0, 18, 0, 7, 0, 15, 10, +109, 1, 8, 0,109, 1, 0, 0,109, 1, 1, 0,107, 1, 16, 10, 31, 0, 79, 0, 14, 0,180, 3, 4, 0, 18, 0, 0, 0, 19, 0, + 4, 0,123, 8,110, 1, 5, 0,110, 1, 0, 0,110, 1, 1, 0, 31, 0, 79, 0, 2, 0, 18, 0, 0, 0, 17, 10,111, 1, 14, 0, +111, 1, 0, 0,111, 1, 1, 0, 11, 0, 2, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 18, 10, 0, 0, 19, 10, 0, 0, 19, 0, + 2, 0, 27, 0, 7, 0, 20, 10, 7, 0, 21, 10, 31, 0, 79, 0, 7, 0, 22, 10, 7, 0, 23, 10,112, 1, 9, 0,112, 1, 0, 0, +112, 1, 1, 0, 27, 0, 24, 10, 0, 0, 4, 3, 7, 0, 25, 10, 2, 0, 26, 10, 2, 0, 18, 0, 2, 0, 16, 0, 2, 0, 27, 10, +113, 1, 7, 0, 37, 0, 13, 7, 21, 0,161, 9, 4, 0, 18, 0, 4, 0, 28, 10, 14, 0, 29, 10, 27, 0, 24, 10, 0, 0, 4, 3, +114, 1, 15, 0, 27, 0, 24, 10, 2, 0, 30, 10, 2, 0, 18, 0, 2, 0, 31, 10, 2, 0, 32, 10, 0, 0, 4, 3, 27, 0, 33, 10, + 0, 0, 34, 10, 7, 0, 35, 10, 7, 0, 30, 2, 7, 0, 36, 10, 7, 0, 37, 10, 2, 0, 16, 0, 2, 0, 74, 1, 7, 0, 81, 1, +115, 1, 6, 0, 27, 0, 24, 10, 7, 0,197, 9, 2, 0, 38, 10, 2, 0, 39, 10, 2, 0, 18, 0, 2, 0, 40, 10,116, 1, 6, 0, + 27, 0, 24, 10, 4, 0, 41, 10, 4, 0, 42, 10, 4, 0, 91, 0, 4, 0, 27, 0, 0, 0, 4, 3,117, 1, 4, 0, 27, 0, 24, 10, + 4, 0, 18, 0, 4, 0, 41, 10, 0, 0, 4, 3,118, 1, 4, 0, 27, 0, 24, 10, 4, 0, 18, 0, 4, 0, 41, 10, 0, 0, 4, 3, +119, 1, 4, 0, 27, 0, 24, 10, 4, 0, 18, 0, 4, 0, 41, 10, 0, 0, 4, 3,120, 1, 2, 0, 4, 0, 18, 0, 7, 0, 83, 4, +121, 1, 2, 0, 27, 0, 24, 10, 0, 0, 4, 3,122, 1, 10, 0, 27, 0, 24, 10, 4, 0, 43, 10, 7, 0,127, 0, 4, 0, 18, 0, + 2, 0, 11, 7, 2, 0, 44, 10, 2, 0, 66, 0, 2, 0, 30, 0, 7, 0, 45, 10, 0, 0, 4, 3,123, 1, 10, 0, 27, 0, 24, 10, + 2, 0, 16, 0, 2, 0,133, 4, 4, 0, 89, 0, 4, 0, 90, 0, 7, 0,120, 9, 7, 0,121, 9, 4, 0, 27, 0,178, 0, 90, 9, + 0, 0, 4, 3,124, 1, 4, 0, 27, 0, 24, 10, 4, 0,205, 3, 4, 0, 46, 10, 0, 0, 4, 3,125, 1, 4, 0, 27, 0, 24, 10, + 4, 0,205, 3, 4, 0, 27, 0, 0, 0, 4, 3,126, 1, 6, 0, 27, 0, 24, 10, 7, 0,127, 0, 7, 0, 75, 3, 4, 0, 47, 10, + 2, 0,205, 3, 2, 0,206, 3,127, 1, 6, 0, 27, 0, 24, 10, 4, 0, 48, 10, 4, 0, 49, 10, 7, 0, 50, 10, 7, 0, 51, 10, + 0, 0, 4, 3,128, 1, 16, 0, 27, 0, 24, 10, 27, 0,221, 9, 4, 0, 16, 0, 7, 0, 52, 10, 7, 0, 53, 10, 7, 0, 54, 10, + 7, 0, 55, 10, 7, 0, 56, 10, 7, 0, 57, 10, 7, 0, 58, 10, 7, 0, 59, 10, 7, 0, 60, 10, 2, 0, 18, 0, 2, 0, 27, 0, + 2, 0, 66, 0, 2, 0, 30, 0,129, 1, 3, 0, 27, 0, 24, 10, 4, 0, 18, 0, 4, 0, 22, 2,130, 1, 5, 0, 27, 0, 24, 10, + 4, 0, 18, 0, 4, 0, 27, 0, 7, 0, 61, 10, 0, 0, 4, 3,131, 1, 10, 0, 27, 0, 24, 10, 0, 0, 4, 3, 2, 0, 62, 10, + 2, 0, 63, 10, 0, 0, 64, 10, 0, 0, 65, 10, 7, 0, 66, 10, 7, 0, 67, 10, 7, 0, 68, 10, 7, 0, 69, 10,132, 1, 5, 0, + 27, 0, 24, 10, 0, 0, 4, 3, 7, 0,213, 2, 2, 0, 70, 10, 2, 0, 18, 0,133, 1, 8, 0, 7, 0, 8, 0, 7, 0, 9, 0, + 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 71, 10, 7, 0, 72, 10, 2, 0, 18, 0, 2, 0, 22, 2,134, 1, 8, 0, 7, 0, 8, 0, + 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 71, 10, 7, 0, 72, 10, 2, 0, 18, 0, 2, 0, 22, 2,135, 1, 8, 0, + 7, 0, 8, 0, 7, 0, 9, 0, 7, 0, 10, 0, 7, 0, 11, 0, 7, 0, 71, 10, 7, 0, 72, 10, 2, 0, 18, 0, 2, 0, 22, 2, +136, 1, 7, 0, 27, 0, 24, 10, 0, 0, 4, 3, 7, 0, 81, 1, 7, 0, 90, 1, 2, 0, 18, 0, 2, 0, 74, 1, 4, 0, 27, 0, +137, 1, 5, 0, 27, 0, 63, 3, 7, 0, 81, 1, 2, 0, 67, 3, 0, 0, 69, 3, 0, 0, 73, 10,138, 1, 7, 0,231, 0,110, 6, + 0, 0, 74, 10, 4, 0, 18, 0, 4, 0, 27, 0, 0, 0, 75, 10, 27, 0,212, 5, 27, 0, 76, 10,139, 1, 3, 0,231, 0,110, 6, + 4, 0, 18, 0, 4, 0, 27, 0,140, 1, 6, 0,231, 0,110, 6, 4, 0, 18, 0, 4, 0, 27, 0, 0, 0, 75, 10, 7, 0, 61, 10, + 27, 0,212, 5,141, 1, 10, 0,141, 1, 0, 0,141, 1, 1, 0, 2, 0, 16, 0, 2, 0, 18, 0, 0, 0, 77, 10, 7, 0, 19, 1, + 7, 0, 20, 1, 2, 0, 2, 10, 2, 0, 78, 10, 27, 0, 43, 0,142, 1, 22, 0,142, 1, 0, 0,142, 1, 1, 0, 2, 0, 18, 0, + 2, 0, 74, 1, 2, 0, 79, 10, 2, 0, 80, 10, 31, 0, 79, 0,178, 0, 90, 9, 27, 0,167, 0, 7, 0, 89, 0, 7, 0, 90, 0, + 7, 0, 81, 10, 7, 0, 82, 10, 7, 0, 83, 10, 7, 0, 84, 10, 7, 0,246, 2, 7, 0,141, 3, 7, 0, 92, 9, 7, 0, 85, 10, + 0, 0, 86, 10, 0, 0, 87, 10, 14, 0,183, 3,143, 1, 11, 0, 7, 0, 37, 2, 7, 0,120, 9, 7, 0,121, 9, 11, 0, 2, 0, + 2, 0, 88, 10, 2, 0, 89, 10, 2, 0, 90, 10, 2, 0, 91, 10, 2, 0, 92, 10, 2, 0, 93, 10, 2, 0,173, 2,144, 1, 21, 0, +144, 1, 0, 0,144, 1, 1, 0,144, 1, 94, 10, 0, 0, 19, 0, 11, 0, 95, 10, 2, 0, 16, 0, 2, 0, 18, 0, 2, 0, 96, 10, + 2, 0, 66, 0, 7, 0, 97, 10, 7, 0, 98, 10, 11, 0, 99, 10, 2, 0,100, 10, 2, 0,101, 10, 4, 0,102, 10, 11, 0,155, 9, + 4, 0,103, 10, 4, 0,104, 10,144, 1,105, 10,145, 1,106, 10,143, 1,107, 10,146, 1, 4, 0, 0, 0,108, 10, 2, 0,109, 10, + 2, 0,110, 10, 4, 0, 27, 0,147, 1, 41, 0,147, 1, 0, 0,147, 1, 1, 0,147, 1,111, 10, 0, 0, 19, 0, 4, 0, 18, 0, + 2, 0, 16, 0, 2, 0, 30, 0, 2, 0,203, 8, 2, 0,168, 2, 2, 0,112, 10, 2, 0, 16, 7, 2, 0,100, 10, 2, 0, 44, 9, + 7, 0,113, 10, 14, 0, 85, 9, 14, 0,114, 10,147, 1, 37, 0, 22, 0, 46, 7, 11, 0, 95, 10, 7, 0, 97, 10, 7, 0, 98, 10, + 7, 0, 72, 2, 7, 0,250, 2, 7, 0,115, 10, 7, 0,116, 10, 7, 0,117, 10, 4, 0,118, 10, 0, 0,119, 10, 2, 0,120, 10, + 2, 0,121, 10, 7, 0,122, 10, 7, 0,123, 10, 2, 0,124, 10, 2, 0,125, 10, 11, 0,126, 10, 19, 0,127, 10, 19, 0,128, 10, + 19, 0,129, 10,146, 1,153, 0,148, 1,130, 10,149, 1,131, 10,145, 1, 8, 0,145, 1, 0, 0,145, 1, 1, 0,147, 1,132, 10, +147, 1,133, 10,144, 1,134, 10,144, 1,135, 10, 4, 0, 18, 0, 4, 0, 27, 0, 56, 0, 23, 0, 22, 0, 32, 0, 34, 0, 74, 0, +180, 0,177, 3, 14, 0,136, 10, 14, 0,137, 10, 4, 0, 16, 0, 4, 0,138, 10, 4, 0,139, 10, 4, 0, 18, 0, 4, 0,118, 10, + 4, 0,140, 10, 2, 0,141, 10, 2, 0,142, 10, 4, 0,143, 10, 14, 0, 85, 9, 14, 0,114, 10,150, 1,144, 10, 11, 0,145, 10, + 11, 0,146, 10, 4, 0,147, 10, 11, 0,148, 10, 11, 0,149, 10, 11, 0,150, 10,151, 1, 4, 0, 4, 0, 17, 0, 4, 0,223, 2, + 4, 0,120, 9, 4, 0,121, 9,152, 1, 4, 0, 4, 0, 17, 0, 7, 0,223, 2, 7, 0,120, 9, 7, 0,121, 9,153, 1, 2, 0, + 0, 0,223, 2, 0, 0, 73, 1,154, 1, 4, 0, 4, 0, 17, 0, 7, 0,151, 10, 7, 0,120, 9, 7, 0,121, 9,155, 1, 1, 0, + 7, 0,152, 10,156, 1, 2, 0, 2, 0, 18, 0, 2, 0,153, 10,157, 1, 6, 0, 4, 0,126, 0, 4, 0,128, 0, 4, 0, 44, 9, + 0, 0,154, 10, 0, 0,155, 10, 2, 0, 27, 0,158, 1, 6, 0, 7, 0, 23, 1, 7, 0, 22, 1, 7, 0,156, 10, 7, 0,157, 10, + 7, 0,158, 10, 4, 0, 27, 0,159, 1, 6, 0,158, 1,159, 10,158, 1,160, 10,158, 1,161, 10,158, 1,162, 10, 7, 0,163, 10, + 7, 0,164, 10,160, 1, 5, 0, 7, 0, 87, 3, 4, 0,165, 10, 7, 0,166, 10, 7, 0,167, 10, 7, 0,168, 10,161, 1, 6, 0, + 7, 0, 5, 0, 7, 0, 6, 0, 7, 0,169, 10, 7, 0,250, 2, 7, 0, 72, 2, 4, 0, 27, 0,162, 1, 6, 0, 7, 0, 5, 0, + 7, 0, 6, 0, 7, 0,169, 10, 7, 0,250, 2, 7, 0, 72, 2, 4, 0, 27, 0,163, 1, 2, 0, 4, 0,170, 10, 4, 0,171, 10, +164, 1, 16, 0, 2, 0,146, 8, 2, 0,147, 8, 2, 0, 70, 5, 2, 0,172, 10, 2, 0,173, 10, 2, 0, 67, 0, 2, 0, 47, 7, + 2, 0,174, 10, 7, 0,245, 2, 7, 0,175, 10, 7, 0,176, 10, 2, 0, 97, 1, 0, 0,177, 10, 0, 0,156, 10, 4, 0,178, 10, + 4, 0,179, 10,165, 1, 9, 0, 7, 0,180, 10, 7, 0,181, 10, 7, 0,154, 9, 7, 0, 87, 3, 7, 0,182, 10, 7, 0,232, 6, + 2, 0, 85, 3, 0, 0,183, 10, 0, 0, 27, 0,166, 1, 4, 0, 7, 0,184, 10, 7, 0,185, 10, 2, 0, 85, 3, 2, 0, 27, 0, +167, 1, 3, 0, 7, 0,186, 10, 7, 0,216, 8, 7, 0, 14, 0,168, 1, 4, 0, 0, 0, 35, 0,206, 0, 81, 5, 4, 0,128, 0, + 4, 0,131, 4,169, 1, 6, 0, 0, 0,187, 10,206, 0,188, 10, 4, 0,128, 0, 4, 0,131, 4, 4, 0,189, 10, 4, 0, 27, 0, +170, 1, 7, 0, 2, 0,190, 10, 2, 0,191, 10, 4, 0, 66, 0, 0, 0, 76, 4,206, 0,188, 10, 0, 0,192, 10, 0, 0,175, 6, +171, 1, 9, 0, 7, 0,193, 10, 7, 0,194, 10, 7, 0,195, 10, 7, 0, 83, 2, 7, 0,196, 10, 7, 0,197, 10, 7, 0,198, 10, + 2, 0,199, 10, 2, 0,200, 10,172, 1, 8, 0, 2, 0,201, 10, 2, 0,202, 10, 2, 0,203, 10, 2, 0,204, 10, 7, 0,205, 10, + 7, 0,206, 10, 7, 0,207, 10, 7, 0,208, 10,173, 1, 2, 0, 7, 0, 5, 0, 7, 0, 6, 0,174, 1, 2, 0, 0, 0,169, 0, + 0, 0,209, 10,175, 1, 1, 0, 0, 0, 19, 0,176, 1, 12, 0, 0, 0,210, 10, 0, 0,211, 10, 0, 0,209, 6, 0, 0,212, 10, + 2, 0, 70, 5, 2, 0,213, 10, 7, 0,214, 10, 7, 0,215, 10, 7, 0,216, 10, 7, 0,141, 3, 7, 0,169, 10, 7, 0,217, 10, +177, 1, 2, 0, 11, 0,218, 10, 11, 0,219, 10,178, 1, 13, 0, 0, 0, 73, 5, 0, 0, 16, 0, 0, 0, 85, 3, 0, 0, 87, 3, + 0, 0,211, 10, 0, 0,107, 0, 0, 0,173, 2, 7, 0,220, 10, 7, 0,221, 10, 7, 0,140, 3, 7, 0,222, 10, 7, 0,223, 10, + 7, 0,217, 10,179, 1, 8, 0, 7, 0, 51, 9, 7, 0,127, 0, 7, 0,156, 10, 7, 0,164, 2, 7, 0,224, 10, 7, 0,226, 0, + 7, 0,225, 10, 4, 0, 16, 0,180, 1, 4, 0, 2, 0,226, 10, 2, 0,227, 10, 2, 0,228, 10, 2, 0, 27, 0,181, 1, 8, 0, + 7, 0,229, 10, 7, 0,213, 2, 7, 0,230, 10, 7, 0,196, 8, 7, 0,197, 8, 7, 0,198, 8, 7, 0,231, 10, 7, 0,232, 10, +182, 1, 6, 0, 2, 0,233, 10, 2, 0,234, 10, 7, 0,235, 10, 7, 0,236, 10, 7, 0,237, 10, 7, 0,238, 10,183, 1, 2, 0, + 57, 0,239, 10, 58, 0,240, 10,184, 1, 3, 0,183, 1, 83, 6, 7, 0,241, 10, 7, 0,242, 10,185, 1, 3, 0,183, 1, 83, 6, + 4, 0,243, 10, 4, 0, 27, 0,186, 1, 1, 0,183, 1, 83, 6,187, 1, 3, 0,183, 1, 83, 6, 4, 0,243, 10, 4, 0,244, 10, +188, 1, 3, 0,183, 1, 83, 6, 4, 0,245, 10, 4, 0, 27, 0,189, 1, 1, 0,183, 1, 83, 6,190, 1, 3, 0,183, 1, 83, 6, + 4, 0,246, 10, 4, 0, 27, 0,191, 1, 3, 0,183, 1, 83, 6, 4, 0,247, 10, 4, 0, 27, 0,192, 1, 3, 0,183, 1, 83, 6, + 4, 0,248, 10, 4, 0, 27, 0,193, 1, 3, 0,183, 1, 83, 6, 4, 0,238, 0, 4, 0, 27, 0,194, 1, 1, 0, 0, 0, 19, 0, +195, 1, 1, 0, 0, 0, 19, 0,196, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, 2, 0, 18, 0, 2, 0,249, 10,197, 1, 10, 0, + 2, 0, 61, 4, 2, 0, 18, 0, 7, 0,216, 4, 7, 0,250, 10, 7, 0,251, 10, 7, 0,252, 10, 7, 0,253, 10,196, 1,254, 10, +196, 1,255, 10,196, 1, 0, 11, 53, 0, 11, 0, 4, 0, 18, 0, 4, 0, 62, 0, 4, 0, 1, 11, 4, 0, 2, 11, 19, 0, 3, 11, + 19, 0, 4, 11,197, 1, 5, 11, 7, 0, 6, 11, 7, 0, 7, 11, 7, 0, 8, 11, 7, 0, 9, 11, 5, 1, 10, 0, 4, 0, 2, 10, + 4, 0, 10, 11, 7, 0, 11, 11, 7, 0, 12, 11, 7, 0, 13, 11, 7, 0, 14, 11, 7, 0, 9, 0, 7, 0, 11, 0, 4, 0, 74, 1, + 4, 0,250, 2, 4, 1, 18, 0, 4, 0,131, 0, 4, 0, 15, 11, 4, 0, 16, 11, 7, 0, 17, 11, 4, 0, 18, 11, 7, 0, 19, 11, + 7, 0, 20, 11, 4, 0, 21, 11, 7, 0, 22, 11, 4, 0, 23, 11, 7, 0, 24, 11, 5, 1, 25, 11, 7, 0, 26, 11, 7, 0, 27, 11, + 7, 0, 28, 11, 7, 0, 29, 11, 4, 0, 30, 11, 4, 0, 27, 0,198, 1, 4, 0, 42, 0,237, 2, 7, 0, 31, 11, 7, 0,168, 1, + 7, 0, 27, 0,215, 0, 36, 0, 22, 0, 32, 0,198, 1, 32, 11, 53, 0,254, 10, 46, 0, 33, 11,215, 0, 34, 11, 51, 0, 35, 11, + 25, 0,153, 0, 0, 0, 36, 11, 7, 0, 37, 11, 2, 0,113, 6, 2, 0, 38, 11, 7, 0, 30, 2, 4, 0,107, 0, 4, 0, 18, 0, + 7, 0, 39, 11, 4, 0, 80, 2, 4, 0, 40, 11, 7, 0, 41, 11, 7, 0, 42, 11, 7, 0, 43, 11, 7, 0,168, 1, 4, 0, 44, 11, + 7, 0, 45, 11, 0, 0, 46, 11, 0, 0, 47, 11, 0, 0, 48, 11, 0, 0, 49, 11, 7, 0, 50, 11, 7, 0, 51, 11, 7, 0, 52, 11, + 7, 0,250, 2, 7, 0, 53, 11, 4, 0, 54, 11, 7, 0,245, 5, 7, 0, 55, 11, 7, 0, 56, 11,199, 1, 10, 0, 4, 0, 16, 0, + 4, 0,127, 0, 4, 0, 18, 0, 4, 0, 14, 4, 4, 0, 57, 11, 4, 0, 58, 11, 4, 0, 59, 11, 4, 0, 69, 0, 0, 0, 19, 0, + 11, 0, 2, 0,200, 1, 1, 0, 0, 0, 76, 7, 94, 0, 7, 0,199, 1, 60, 11, 4, 0, 61, 11, 4, 0, 62, 11, 4, 0, 63, 11, + 4, 0, 64, 11, 11, 0, 65, 11,200, 1, 66, 11,201, 1, 5, 0, 7, 0,157, 2, 7, 0,233, 2, 7, 0, 30, 2, 2, 0,139, 2, + 2, 0, 27, 0,202, 1, 5, 0, 7, 0,157, 2, 7, 0,158, 4, 7, 0, 67, 11, 7, 0, 68, 11, 7, 0,233, 2,203, 1, 5, 0, + 27, 0, 69, 11,204, 1, 21, 0, 7, 0, 79, 6, 7, 0, 70, 11, 7, 0, 55, 0,205, 1, 3, 0, 7, 0, 71, 11, 4, 0, 72, 11, + 4, 0, 73, 11,206, 1, 7, 0, 4, 0, 74, 11, 4, 0, 75, 11, 4, 0, 76, 11, 7, 0, 77, 11, 7, 0, 78, 11, 7, 0, 79, 11, + 7, 0, 55, 0,207, 1, 8, 0,207, 1, 0, 0,207, 1, 1, 0, 27, 0, 43, 0, 4, 0,247, 0, 2, 0, 18, 0, 2, 0, 74, 1, + 7, 0,233, 2, 7, 0, 59, 9,208, 1, 7, 0,208, 1, 0, 0,208, 1, 1, 0, 27, 0, 43, 0, 2, 0,218, 2, 2, 0, 18, 0, + 2, 0, 4, 2, 2, 0, 55, 0,209, 1, 17, 0,202, 1, 7, 4,202, 1, 80, 11,201, 1, 81, 11,202, 1, 42, 9,203, 1, 82, 11, + 4, 0, 81, 0, 7, 0,233, 2, 7, 0, 0, 3, 7, 0, 83, 11, 4, 0, 74, 11, 4, 0, 84, 11, 7, 0, 78, 11, 7, 0, 79, 11, + 7, 0,107, 0, 4, 0, 85, 11, 2, 0, 18, 0, 2, 0, 86, 11,210, 1, 15, 0, 7, 0,243, 0, 7, 0, 87, 11, 7, 0, 71, 11, + 7, 0, 88, 11, 7, 0, 89, 11, 7, 0, 90, 11, 7, 0, 91, 11, 7, 0, 92, 11, 7, 0, 93, 11, 7, 0, 94, 11, 7, 0, 95, 11, + 7, 0, 96, 11, 7, 0, 97, 11, 4, 0, 18, 0, 4, 0, 98, 11,211, 1,128, 0, 22, 0, 32, 0, 34, 0, 74, 0,212, 1, 99, 11, +210, 1,100, 11,189, 0,153, 4, 4, 0, 18, 0, 4, 0, 55, 0, 2, 0, 16, 0, 2, 0, 62, 10, 2, 0,101, 11, 2, 0,111, 1, + 2, 0,102, 11, 2, 0,231, 3, 2, 0,103, 11, 2, 0,104, 11, 2, 0,105, 11, 2, 0,106, 11, 2, 0,107, 11, 2, 0,108, 11, + 2, 0,109, 11, 2, 0,110, 11, 2, 0,111, 11, 2, 0,229, 5, 2, 0,112, 11, 2, 0,113, 11, 2, 0,114, 11, 2, 0,115, 11, + 2, 0,116, 11, 2, 0, 19, 2, 2, 0, 35, 9, 2, 0, 10, 9, 2, 0,117, 11, 2, 0,118, 11, 2, 0, 24, 4, 2, 0, 25, 4, + 2, 0,119, 11, 2, 0,120, 11, 2, 0,121, 11, 2, 0,122, 11, 7, 0,123, 11, 7, 0,124, 11, 7, 0,125, 11, 7, 0,126, 11, + 7, 0,127, 11, 7, 0,128, 11, 7, 0,129, 11, 2, 0,155, 5, 2, 0,130, 11, 7, 0,131, 11, 7, 0,132, 11, 7, 0,133, 11, + 7, 0, 17, 9, 7, 0, 90, 0, 7, 0, 0, 3, 7, 0, 23, 9, 7, 0,134, 11, 7, 0,135, 11, 7, 0,136, 11, 7, 0,137, 11, + 7, 0,138, 11, 7, 0,139, 11, 4, 0, 18, 9, 4, 0, 16, 9, 4, 0,140, 11, 4, 0,141, 11, 2, 0,142, 11, 2, 0,143, 11, + 7, 0, 19, 9, 7, 0, 20, 9, 7, 0, 21, 9, 7, 0,144, 11, 7, 0,145, 11, 7, 0,146, 11, 7, 0,147, 11, 7, 0,148, 11, + 7, 0,149, 11, 7, 0,150, 11, 7, 0,151, 11, 7, 0,152, 11, 7, 0,217, 3, 7, 0,107, 0, 7, 0,153, 11, 7, 0,154, 11, + 7, 0,155, 11, 7, 0,156, 11, 7, 0,213, 0, 7, 0,157, 11, 4, 0,158, 11, 4, 0,159, 11, 7, 0,160, 11, 7, 0,161, 11, + 7, 0,162, 11, 7, 0,163, 11, 7, 0,164, 11, 7, 0,212, 0, 7, 0,165, 11, 7, 0, 51, 4, 7, 0, 49, 4, 7, 0, 50, 4, + 7, 0,166, 11, 7, 0,167, 11, 7, 0,168, 11, 7, 0,169, 11, 7, 0,170, 11, 7, 0,171, 11, 7, 0,172, 11, 7, 0,173, 11, + 7, 0,174, 11, 7, 0,175, 11, 7, 0,176, 11, 7, 0,177, 11, 7, 0,178, 11, 7, 0,179, 11, 7, 0,180, 11, 7, 0,181, 11, + 7, 0,182, 11, 7, 0,183, 11, 4, 0,184, 11, 4, 0,185, 11, 46, 0,130, 1, 63, 0,255, 3, 14, 0,186, 11, 63, 0,187, 11, + 27, 0,188, 11, 27, 0,189, 11, 31, 0, 79, 0,184, 0, 60, 1,184, 0,190, 11,151, 0, 52, 0,151, 0, 0, 0,151, 0, 1, 0, +211, 1,191, 11,209, 1,192, 11,206, 1,221, 9,192, 0, 79, 4, 11, 0, 80, 4,213, 1,193, 11,213, 1,194, 11, 14, 0,195, 11, + 14, 0,196, 11,136, 0,197, 11,144, 0,198, 11,144, 0,199, 11, 27, 0,200, 11, 27, 0,201, 11, 27, 0, 37, 0, 14, 0, 29, 10, + 0, 0, 19, 0, 7, 0,232, 0, 7, 0, 29, 3, 7, 0,202, 11, 7, 0,203, 11, 4, 0,207, 2, 4, 0,204, 11, 4, 0, 18, 0, + 4, 0, 18, 9, 4, 0,205, 11, 4, 0,206, 11, 4, 0,207, 11, 4, 0,208, 11, 2, 0,239, 0, 2, 0,209, 11, 2, 0,210, 11, + 2, 0,211, 11, 0, 0,212, 11, 2, 0,213, 11, 2, 0,214, 11, 2, 0,215, 11, 11, 0,216, 11,140, 0,152, 4, 14, 0, 14, 3, + 14, 0,217, 11,205, 1,218, 11, 4, 0,219, 11, 4, 0,220, 11,214, 1,221, 11,142, 0, 26, 3,215, 1,222, 11, 7, 0,223, 11, + 7, 0,224, 11, 7, 0,225, 11,138, 0, 38, 0,216, 1,155, 9, 7, 0,122, 4, 7, 0,226, 11, 7, 0,227, 11, 7, 0, 79, 6, + 7, 0,235, 3, 7, 0,217, 3, 7, 0,228, 11, 7, 0, 82, 2, 7, 0,229, 11, 7, 0,230, 11, 7, 0,231, 11, 7, 0,232, 11, + 7, 0,233, 11, 7, 0,234, 11, 7, 0,123, 4, 7, 0,235, 11, 7, 0,236, 11, 7, 0,237, 11, 7, 0,124, 4, 7, 0,120, 4, + 7, 0,121, 4, 7, 0,238, 11, 7, 0,239, 11, 7, 0,240, 11, 4, 0,241, 11, 4, 0, 91, 0, 4, 0,242, 11, 4, 0,243, 11, + 2, 0,244, 11, 2, 0,245, 11, 2, 0,246, 11, 2, 0,247, 11, 2, 0,248, 11, 2, 0,249, 11, 2, 0,250, 11, 2, 0, 27, 0, +189, 0,153, 4,139, 0, 11, 0,216, 1,251, 11, 7, 0,252, 11, 7, 0,253, 11, 7, 0,241, 1, 7, 0,254, 11, 7, 0,255, 11, + 7, 0, 0, 12, 4, 0, 91, 0, 2, 0, 1, 12, 2, 0, 2, 12, 63, 0,240, 1,217, 1, 4, 0, 7, 0, 5, 0, 7, 0, 6, 0, + 7, 0, 7, 0, 7, 0, 3, 12,218, 1, 6, 0,218, 1, 0, 0,218, 1, 1, 0,217, 1,197, 9, 4, 0,245, 0, 2, 0, 4, 12, + 2, 0, 18, 0,219, 1, 5, 0,219, 1, 0, 0,219, 1, 1, 0, 14, 0, 5, 12, 4, 0, 6, 12, 4, 0, 18, 0,220, 1, 9, 0, +220, 1, 0, 0,220, 1, 1, 0, 14, 0,126, 0,219, 1, 7, 12, 4, 0, 18, 0, 2, 0, 4, 12, 2, 0, 8, 12, 7, 0, 92, 0, + 0, 0, 9, 12,180, 0, 6, 0, 22, 0, 32, 0, 14, 0,124, 5, 4, 0, 18, 0, 2, 0, 10, 12, 2, 0, 11, 12, 11, 0, 12, 12, +221, 1, 6, 0, 14, 0, 13, 12, 4, 0, 14, 12, 4, 0, 15, 12, 4, 0, 18, 0, 4, 0, 27, 0,239, 0, 16, 12,222, 1, 19, 0, + 22, 0, 32, 0,223, 1, 17, 12,223, 1, 18, 12, 14, 0, 19, 12, 4, 0, 20, 12, 2, 0, 21, 12, 2, 0, 22, 12, 14, 0, 23, 12, + 14, 0, 24, 12,221, 1, 25, 12, 14, 0, 26, 12, 14, 0, 27, 12, 14, 0, 28, 12, 14, 0, 29, 12,224, 1, 30, 12,224, 1, 31, 12, +224, 1, 32, 12, 14, 0, 33, 12,239, 0, 34, 12,223, 1, 32, 0,223, 1, 0, 0,223, 1, 1, 0, 11, 0, 35, 12, 4, 0,124, 8, + 2, 0, 36, 12, 2, 0, 27, 0, 29, 1, 37, 12, 29, 1, 38, 12, 0, 0, 39, 12, 2, 0, 40, 12, 2, 0, 41, 12, 2, 0,146, 8, + 2, 0,147, 8, 2, 0, 42, 12, 2, 0, 43, 12, 2, 0, 14, 4, 2, 0, 57, 7, 2, 0, 44, 12, 2, 0, 45, 12, 2, 0, 46, 12, + 2, 0, 30, 0,225, 1, 47, 12,226, 1, 48, 12,227, 1, 49, 12, 4, 0, 50, 12, 4, 0, 51, 12, 11, 0, 52, 12, 14, 0, 24, 12, + 14, 0,166, 8, 14, 0, 53, 12, 14, 0, 54, 12, 14, 0, 55, 12,228, 1, 18, 0,228, 1, 0, 0,228, 1, 1, 0, 0, 0, 56, 12, + 21, 0, 31, 0, 0, 0, 57, 12, 2, 0, 58, 12, 2, 0, 16, 0, 2, 0, 14, 0, 2, 0, 59, 12, 2, 0, 60, 12, 2, 0, 61, 12, + 2, 0, 62, 12, 2, 0, 63, 12, 2, 0, 18, 0, 2, 0, 64, 12, 2, 0, 32, 0, 2, 0, 27, 0,229, 1, 65, 12,230, 1, 4, 0, +230, 1, 0, 0,230, 1, 1, 0,228, 1, 66, 12,228, 1, 67, 12,231, 1, 11, 0,231, 1, 0, 0,231, 1, 1, 0, 14, 0, 68, 12, + 14, 0, 69, 12, 0, 0, 56, 12, 2, 0, 70, 12, 2, 0, 71, 12, 2, 0, 18, 0, 2, 0, 72, 12, 4, 0, 73, 12, 11, 0, 74, 12, +224, 1, 7, 0,224, 1, 0, 0,224, 1, 1, 0, 0, 0, 56, 12, 0, 0, 75, 12, 14, 0, 64, 8, 4, 0, 76, 12, 4, 0, 18, 0, + 1, 1, 14, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 56, 12, 21, 0, 31, 0,232, 1,140, 8, 11, 0, 77, 12, 11, 0, 78, 12, +229, 1, 65, 12,221, 1, 79, 12, 14, 0, 80, 12, 1, 1, 81, 12, 34, 1,253, 6, 2, 0, 18, 0, 2, 0, 73, 1,233, 1, 12, 0, +233, 1, 0, 0,233, 1, 1, 0, 11, 0, 2, 0, 11, 0, 82, 12, 0, 0, 19, 0, 2, 0, 16, 0, 2, 0, 18, 0, 7, 0,142, 9, + 7, 0,128, 0, 7, 0,131, 4, 7, 0, 92, 9, 7, 0, 85, 10,234, 1, 5, 0, 7, 0, 83, 12, 4, 0, 84, 12, 4, 0, 85, 12, + 4, 0, 74, 1, 4, 0, 18, 0,235, 1, 6, 0, 7, 0, 86, 12, 7, 0, 87, 12, 7, 0, 88, 12, 7, 0, 89, 12, 4, 0, 16, 0, + 4, 0, 18, 0,236, 1, 5, 0, 7, 0,120, 9, 7, 0,121, 9, 7, 0,233, 2, 2, 0, 33, 2, 2, 0, 34, 2,237, 1, 5, 0, +236, 1, 2, 0, 4, 0, 52, 0, 7, 0, 90, 12, 7, 0,120, 9, 7, 0,121, 9,238, 1, 4, 0, 2, 0, 91, 12, 2, 0, 92, 12, + 2, 0, 93, 12, 2, 0, 94, 12,239, 1, 2, 0, 37, 0, 44, 7, 21, 0,161, 9,240, 1, 3, 0, 19, 0, 95, 12, 4, 0, 18, 0, + 4, 0, 27, 0,241, 1, 6, 0, 7, 0,107, 0, 7, 0,202, 2, 7, 0, 96, 12, 7, 0, 27, 0, 2, 0,238, 0, 2, 0, 97, 12, +242, 1, 5, 0, 7, 0, 98, 12, 7, 0,127, 0, 7, 0,198, 9, 7, 0,199, 9, 4, 0, 18, 0,243, 1, 6, 0, 22, 0, 46, 7, + 0, 0, 99, 12, 0, 0,100, 12, 2, 0,101, 12, 2, 0, 18, 0, 4, 0,102, 12,244, 1, 7, 0,244, 1, 0, 0,244, 1, 1, 0, + 0, 0, 19, 0,243, 1,103, 12, 2, 0,104, 12, 2, 0, 16, 0, 7, 0, 59, 0,245, 1, 7, 0, 14, 0,105, 12, 0, 0,106, 12, + 11, 0,107, 12, 7, 0, 59, 0, 7, 0,142, 9, 4, 0, 16, 0, 4, 0, 18, 0,246, 1, 3, 0, 7, 0,108, 12, 4, 0, 18, 0, + 4, 0, 27, 0,247, 1, 15, 0,247, 1, 0, 0,247, 1, 1, 0,107, 1, 16, 10,245, 1, 60, 0, 14, 0,183, 3, 30, 0, 48, 0, +246, 1,109, 12, 4, 0, 52, 0, 7, 0, 59, 0, 2, 0, 18, 0, 2, 0, 10, 1, 4, 0,110, 12, 0, 0, 99, 12, 4, 0,111, 12, + 7, 0,113, 10,248, 1, 2, 0, 0, 0,112, 12, 0, 0,113, 12,249, 1, 4, 0,249, 1, 0, 0,249, 1, 1, 0,178, 0, 63, 3, + 14, 0,114, 12,250, 1, 25, 0,250, 1, 0, 0,250, 1, 1, 0, 14, 0,115, 12,178, 0, 90, 9,249, 1,116, 12, 14, 0,117, 12, + 14, 0,183, 3, 0, 0, 19, 0, 7, 0,142, 9, 7, 0,118, 12, 7, 0, 89, 0, 7, 0, 90, 0, 7, 0, 81, 10, 7, 0, 82, 10, + 7, 0,246, 2, 7, 0,141, 3, 7, 0, 92, 9, 7, 0, 85, 10, 2, 0,119, 12, 2, 0,120, 12, 2, 0, 66, 0, 2, 0, 16, 0, + 11, 0,121, 12, 4, 0, 18, 0, 4, 0, 30, 0,251, 1, 6, 0,251, 1, 0, 0,251, 1, 1, 0, 14, 0,115, 12, 4, 0, 18, 0, + 4, 0, 4, 2, 0, 0, 19, 0,252, 1, 11, 0,252, 1, 0, 0,252, 1, 1, 0, 22, 0, 46, 7, 0, 0,122, 12, 4, 0,102, 12, + 2, 0,123, 12, 2, 0, 27, 0, 0, 0, 99, 12, 4, 0,110, 12, 2, 0, 18, 0, 2, 0,124, 12,253, 1, 10, 0,253, 1, 0, 0, +253, 1, 1, 0, 14, 0,125, 12, 0, 0, 56, 12, 0, 0, 19, 0, 0, 0,126, 12, 0, 0,127, 12, 2, 0, 18, 0, 2, 0,124, 12, + 4, 0,128, 12,254, 1, 5, 0,254, 1, 0, 0,254, 1, 1, 0, 0, 0, 99, 12, 4, 0,110, 12, 7, 0,223, 2, 34, 0, 12, 0, +178, 0,174, 3,178, 0,129, 12,249, 1,116, 12, 14, 0,130, 12,250, 1,131, 12, 14, 0,132, 12, 14, 0,133, 12, 4, 0, 18, 0, + 4, 0,239, 0, 2, 0,134, 12, 2, 0,135, 12, 7, 0,136, 12,255, 1, 2, 0, 22, 0, 32, 0, 34, 0, 74, 0, 0, 2, 5, 0, + 0, 2, 0, 0, 0, 2, 1, 0, 4, 0, 16, 0, 4, 0, 18, 0, 0, 0,173, 5, 1, 2, 6, 0, 0, 2,137, 12, 27, 0, 43, 0, + 4, 0,138, 12, 7, 0,139, 12, 4, 0,140, 12, 4, 0, 2, 10, 2, 2, 3, 0, 0, 2,137, 12, 4, 0,138, 12, 7, 0,141, 12, + 3, 2, 8, 0, 0, 2,137, 12, 27, 0, 43, 0, 7, 0, 64, 1, 7, 0,142, 12, 7, 0, 29, 3, 7, 0,154, 9, 4, 0,138, 12, + 4, 0,143, 12, 4, 2, 5, 0, 0, 2,137, 12, 7, 0,144, 12, 7, 0,168, 2, 7, 0,252, 2, 7, 0, 55, 0, 5, 2, 3, 0, + 0, 2,137, 12, 7, 0,154, 9, 7, 0,145, 12,204, 1, 4, 0, 7, 0,146, 12, 7, 0,154, 11, 2, 0,147, 12, 2, 0, 74, 1, + 6, 2, 14, 0, 6, 2, 0, 0, 6, 2, 1, 0, 14, 0,148, 12, 14, 0,149, 12, 14, 0,150, 12, 0, 0,173, 5, 4, 0, 32, 0, + 4, 0, 18, 0, 4, 0,151, 12, 7, 0,152, 12, 4, 0,140, 12, 4, 0, 2, 10, 7, 0, 83, 4, 7, 0,254, 2,212, 1, 23, 0, + 4, 0,138, 12, 4, 0,153, 12, 7, 0,154, 12, 7, 0,250, 2, 7, 0,155, 12, 7, 0,233, 8, 7, 0,146, 12, 7, 0,156, 12, + 7, 0,202, 2, 7, 0, 17, 11, 7, 0,216, 4, 7, 0,157, 12, 7, 0,158, 12, 7, 0,159, 12, 7, 0,160, 12, 7, 0,161, 12, + 7, 0,162, 12, 7, 0,163, 12, 7, 0,164, 12, 7, 0,165, 12, 7, 0,166, 12, 7, 0,167, 12, 14, 0,168, 12,124, 0, 40, 0, +123, 0,169, 12, 7, 2,100, 11, 63, 0,170, 12, 63, 0,187, 11, 63, 0,171, 12, 8, 2,172, 12, 43, 0,168, 0, 43, 0,173, 12, + 43, 0,174, 12, 7, 0,175, 12, 7, 0,176, 12, 7, 0,177, 12, 7, 0,178, 12, 7, 0,179, 12, 7, 0,123, 8, 7, 0,180, 12, + 7, 0,168, 1, 7, 0,181, 12, 7, 0,141, 3, 4, 0,182, 12, 4, 0,183, 12, 4, 0,184, 12, 4, 0, 91, 0, 4, 0,185, 12, + 2, 0,186, 12, 2, 0,187, 12, 4, 0,188, 12, 7, 0,202, 2, 4, 0,189, 12, 7, 0,190, 12, 4, 0,191, 12, 4, 0,192, 12, + 4, 0,193, 12,140, 0,194, 12, 14, 0,195, 12,189, 0,153, 4, 4, 0,196, 12, 7, 0,197, 12, 7, 0,198, 12, 4, 0, 30, 0, +125, 0, 12, 0,123, 0,169, 12,151, 0, 49, 3, 7, 0,133, 1, 7, 0,123, 8, 7, 0,199, 12, 7, 0,200, 12, 7, 0,201, 12, + 2, 0,202, 12, 2, 0,203, 12, 2, 0,204, 12, 2, 0, 16, 0, 4, 0, 91, 0,126, 0, 15, 0,123, 0,169, 12,142, 0, 26, 3, + 7, 0,197, 9, 7, 0,205, 12, 7, 0,206, 12, 4, 0,207, 12, 7, 0, 66, 1, 7, 0,208, 12, 4, 0, 38, 10, 4, 0, 22, 3, + 4, 0,209, 12, 7, 0,178, 12, 2, 0, 16, 0, 2, 0, 27, 0, 4, 0, 30, 0, 9, 2, 15, 0, 22, 0, 32, 0, 34, 0, 74, 0, + 47, 1,231, 8, 7, 0,210, 12, 7, 0,211, 12, 7, 0,212, 12, 7, 0,213, 12, 7, 0,153, 9, 7, 0,214, 12, 7, 0,215, 12, + 7, 0,216, 12, 7, 0, 83, 4, 7, 0,233, 8, 2, 0, 18, 0, 2, 0,116, 9,233, 0, 3, 0, 4, 0,125, 0, 2, 0,229, 6, + 2, 0,217, 12, 10, 2, 5, 0, 0, 0,199, 8, 2, 0,200, 8, 2, 0, 73, 5, 2, 0,218, 12, 2, 0,219, 12,231, 0, 16, 0, + 22, 0, 32, 0, 34, 0, 74, 0, 0, 0, 35, 0, 4, 0,142, 0, 4, 0,143, 0, 4, 0,220, 12, 7, 0,161, 0, 7, 0,162, 0, + 44, 0,137, 0, 11, 2,155, 9,180, 0,177, 3, 12, 2,221, 12, 11, 0,222, 12, 10, 2,223, 12, 4, 0, 18, 0, 4, 0, 22, 0, + 15, 1, 10, 0, 4, 0,131, 0, 4, 0,224, 12, 51, 0,225, 12, 7, 0,226, 12, 2, 0,227, 12, 0, 0,173, 2, 4, 0,125, 0, + 13, 2,170, 3, 14, 2,228, 12, 7, 0,229, 12, 15, 2, 3, 0, 4, 0,125, 0, 7, 0,230, 12, 7, 0, 66, 1, 16, 2, 11, 0, + 11, 0,231, 12, 7, 0,232, 12, 7, 0,233, 12, 7, 0, 27, 0, 7, 0,234, 12, 2, 0,235, 12, 2, 0, 66, 0, 7, 0,236, 12, + 7, 0,237, 12, 7, 0,238, 12, 7, 0,239, 12, 14, 2, 3, 0, 7, 0,240, 12, 4, 0,125, 0, 4, 0, 18, 0, 13, 2, 24, 0, + 13, 2, 0, 0, 13, 2, 1, 0, 0, 0, 19, 0, 7, 0,241, 12, 7, 0,242, 12, 7, 0,243, 12, 7, 0,244, 12, 7, 0, 31, 11, + 4, 0,245, 12, 4, 0,246, 12, 14, 2,247, 12, 7, 0,248, 12, 7, 0,230, 12, 4, 0, 18, 0, 4, 0,249, 12, 4, 0,250, 12, + 7, 0,113, 10, 2, 0,251, 12, 2, 0,222, 3, 2, 0,252, 12, 2, 0,253, 12, 2, 0,254, 12, 2, 0, 30, 0, 7, 0,255, 12, + 17, 2, 22, 0, 4, 0, 18, 0, 2, 0, 0, 13, 2, 0, 1, 13, 7, 0, 2, 13, 2, 0, 3, 13, 2, 0, 4, 13, 2, 0, 5, 13, + 2, 0, 6, 13, 2, 0, 7, 13, 2, 0, 8, 13, 2, 0, 9, 13, 2, 0,252, 2, 4, 0, 10, 13, 4, 0, 11, 13, 2, 0, 12, 13, + 2, 0, 30, 0, 7, 0, 81, 1, 4, 0, 13, 13, 4, 0, 14, 13, 7, 0, 15, 13, 7, 0, 16, 13, 4, 0,237, 1, 18, 2, 12, 0, + 4, 0, 18, 0, 4, 0, 17, 13, 4, 0, 18, 13, 7, 0, 19, 13, 13, 2, 20, 13, 7, 0, 21, 13, 7, 0, 22, 13, 7, 0, 23, 13, + 4, 0,180, 1, 4, 0,131, 0, 7, 0,141, 3, 51, 0, 24, 13, 19, 2, 5, 0, 4, 0, 18, 0, 7, 0,230, 12, 4, 0, 25, 13, + 4, 0, 26, 13, 15, 2, 27, 13, 20, 2, 7, 0, 20, 2, 0, 0, 20, 2, 1, 0, 0, 0, 19, 0, 4, 0, 18, 0, 7, 0,141, 3, + 14, 0, 28, 13, 19, 2, 29, 13, 21, 2, 1, 0, 0, 0, 30, 13, 22, 2, 8, 0, 22, 2, 0, 0, 22, 2, 1, 0, 13, 2,170, 3, + 4, 0, 27, 0, 4, 0, 31, 13, 4, 0, 32, 13, 4, 0, 33, 13, 4, 0, 34, 13, 23, 2, 6, 0, 4, 0,131, 0, 4, 0, 27, 0, + 14, 0, 2, 10, 4, 0, 35, 13, 2, 0, 36, 13, 2, 0, 37, 13, 12, 2, 11, 0, 17, 2, 38, 13, 16, 2, 39, 13, 14, 0, 28, 13, + 19, 2, 29, 13, 18, 2, 40, 13, 13, 2, 41, 13, 14, 0, 42, 13, 4, 0, 43, 13, 4, 0, 44, 13, 21, 2, 94, 6, 23, 2, 45, 13, + 24, 2, 48, 0, 24, 2, 0, 0, 24, 2, 1, 0,170, 0,138, 3, 25, 2, 2, 0, 63, 0, 46, 13,189, 0,153, 4,140, 0,152, 4, + 14, 0, 14, 3, 4, 0, 47, 13, 0, 0, 19, 0, 2, 0,188, 10, 2, 0, 16, 0, 2, 0, 48, 13, 2, 0, 49, 13, 2, 0, 50, 13, + 2, 0, 51, 13, 2, 0, 52, 13, 2, 0, 53, 13, 4, 0, 91, 0, 4, 0,181, 3, 4, 0, 54, 13, 4, 0, 55, 13, 4, 0,198, 9, + 4, 0,199, 9, 4, 0, 27, 0, 7, 0, 56, 13, 47, 0, 57, 13, 0, 0, 58, 13, 4, 0, 59, 13, 4, 0,188, 12, 7, 0, 60, 13, + 7, 0, 61, 13, 7, 0, 62, 13, 7, 0, 63, 13, 7, 0, 64, 13, 7, 0, 65, 13, 7, 0, 66, 13, 7, 0, 67, 13, 7, 0, 68, 13, + 7, 0, 69, 13, 7, 0, 70, 13, 7, 0, 71, 13, 7, 0, 72, 13, 7, 0, 73, 13, 0, 0,195, 2, 0, 0, 74, 13, 0, 0, 75, 13, + 0, 0, 76, 13,170, 0, 7, 0,169, 0, 77, 13,144, 0, 28, 3, 14, 0, 78, 13, 2, 0, 79, 13, 2, 0, 91, 0, 4, 0, 27, 0, + 0, 0, 80, 13,171, 0, 24, 0,169, 0, 77, 13,144, 0, 28, 3,151, 0, 49, 3, 62, 0, 16, 2, 4, 0, 91, 0, 4, 0, 81, 13, + 7, 0,184, 0, 7, 0,185, 0, 7, 0,186, 0, 7, 0,168, 1, 7, 0, 82, 13, 7, 0, 83, 13, 7, 0, 84, 13, 7, 0, 85, 13, + 49, 0, 86, 13, 49, 0, 87, 13, 2, 0, 88, 13, 2, 0,248, 10, 2, 0, 89, 13, 2, 0, 27, 0, 7, 0, 90, 13, 7, 0, 91, 13, + 7, 0, 92, 13, 7, 0, 93, 13, 69, 78, 68, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c index 8d771f0dc58..fa555b0ddb8 100644 --- a/source/blender/editors/gpencil/drawgpencil.c +++ b/source/blender/editors/gpencil/drawgpencil.c @@ -37,10 +37,8 @@ #include "BLO_sys_types.h" -#include "IMB_imbuf_types.h" - -#include "BLI_math.h" #include "BLI_blenlib.h" +#include "BLI_math.h" #include "BLI_utildefines.h" #include "DNA_gpencil_types.h" @@ -53,8 +51,6 @@ #include "BKE_global.h" #include "BKE_gpencil.h" - - #include "WM_api.h" #include "BIF_gl.h" @@ -64,7 +60,6 @@ #include "ED_sequencer.h" #include "ED_view3d.h" - #include "gpencil_intern.h" /* ************************************************** */ @@ -225,7 +220,7 @@ static void gp_draw_stroke_3d(bGPDspoint *points, int totpoints, short thickness /* need to roll-back one point to ensure that there are no gaps in the stroke */ if (i != 0) glVertex3fv(&(pt - 1)->x); - + /* now the point we want... */ glVertex3fv(&pt->x); @@ -340,7 +335,7 @@ static void gp_draw_stroke(bGPDspoint *points, int totpoints, short thickness_s, mt[1] = m2[1] * pthick * 0.5f; sc[0] = s0[0] - (m1[0] * pthick * 0.75f); sc[1] = s0[1] - (m1[1] * pthick * 0.75f); - + t0[0] = sc[0] - mt[0]; t0[1] = sc[1] - mt[1]; t1[0] = sc[0] + mt[0]; @@ -382,7 +377,7 @@ static void gp_draw_stroke(bGPDspoint *points, int totpoints, short thickness_s, mt[1] = mb[1] * pthick; athick = len_v2(mt); dfac = pthick - (athick * 2); - + if (((athick * 2.0f) < pthick) && (IS_EQF(athick, pthick) == 0)) { mt[0] += (mb[0] * dfac); mt[1] += (mb[1] * dfac); @@ -429,7 +424,7 @@ static void gp_draw_stroke(bGPDspoint *points, int totpoints, short thickness_s, mt[1] = m2[1] * pthick * 0.5f; sc[0] = s1[0] + (m1[0] * pthick * 0.75f); sc[1] = s1[1] + (m1[1] * pthick * 0.75f); - + t0[0] = sc[0] - mt[0]; t0[1] = sc[1] - mt[1]; t1[0] = sc[0] + mt[0]; @@ -669,7 +664,7 @@ static void gp_draw_data(bGPdata *gpd, int offsx, int offsy, int winx, int winy, // ............................ /* draw grease-pencil sketches to specified 2d-view that uses ibuf corrections */ -void draw_gpencil_2dimage(bContext *C, ImBuf *ibuf) +void draw_gpencil_2dimage(const bContext *C) { ScrArea *sa = CTX_wm_area(C); ARegion *ar = CTX_wm_region(C); @@ -678,8 +673,6 @@ void draw_gpencil_2dimage(bContext *C, ImBuf *ibuf) int offsx, offsy, sizex, sizey; int dflag = GP_DRAWDATA_NOSTATUS; - /* check that we have grease-pencil stuff to draw */ - if (ELEM(NULL, sa, ibuf)) return; gpd = gpencil_data_get_active(C); // XXX if (gpd == NULL) return; @@ -701,32 +694,20 @@ void draw_gpencil_2dimage(bContext *C, ImBuf *ibuf) dflag |= GP_DRAWDATA_ONLYV2D | GP_DRAWDATA_IEDITHACK; } break; -#if 0 /* removed since 2.5x, needs to be added back */ case SPACE_SEQ: /* sequence */ { - SpaceSeq *sseq = (SpaceSeq *)sa->spacedata.first; - float zoom, zoomx, zoomy; - - /* calculate accessory values */ - zoom = (float)(SEQ_ZOOM_FAC(sseq->zoom)); - if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) { - /* XXX sequencer zoom should store it? */ - zoomx = zoom; // * (G.scene->r.xasp / G.scene->r.yasp); - zoomy = zoom; - } - else - zoomx = zoomy = zoom; - - /* calculate transforms (Note: we use ibuf here, as we have it) */ - sizex = (int)(zoomx * ibuf->x); - sizey = (int)(zoomy * ibuf->y); - offsx = (int)( (ar->winx - sizex) / 2 + sseq->xof); - offsy = (int)( (ar->winy - sizey) / 2 + sseq->yof); + /* just draw using standard scaling (settings here are currently ignored anyways) */ + offsx = 0; + offsy = 0; + sizex = ar->winx; + sizey = ar->winy; - dflag |= GP_DRAWDATA_ONLYI2D; + /* NOTE: I2D was used in 2.4x, but the old settings for that have been deprecated + * and everything moved to standard View2d + */ + dflag |= GP_DRAWDATA_ONLYV2D; } break; -#endif default: /* for spacetype not yet handled */ offsx = 0; offsy = 0; @@ -745,7 +726,7 @@ void draw_gpencil_2dimage(bContext *C, ImBuf *ibuf) /* draw grease-pencil sketches to specified 2d-view assuming that matrices are already set correctly * Note: this gets called twice - first time with onlyv2d=1 to draw 'canvas' strokes, second time with onlyv2d=0 for screen-aligned strokes */ -void draw_gpencil_view2d(bContext *C, short onlyv2d) +void draw_gpencil_view2d(const bContext *C, short onlyv2d) { ScrArea *sa = CTX_wm_area(C); ARegion *ar = CTX_wm_region(C); diff --git a/source/blender/editors/gpencil/editaction_gpencil.c b/source/blender/editors/gpencil/editaction_gpencil.c index 9cc738b016e..a7beaa74eb7 100644 --- a/source/blender/editors/gpencil/editaction_gpencil.c +++ b/source/blender/editors/gpencil/editaction_gpencil.c @@ -62,7 +62,7 @@ /* Generics - Loopers */ /* Loops over the gp-frames for a gp-layer, and applies the given callback */ -short gplayer_frames_looper(bGPDlayer *gpl, Scene *scene, short (*gpf_cb)(bGPDframe *, Scene *)) +short ED_gplayer_frames_looper(bGPDlayer *gpl, Scene *scene, short (*gpf_cb)(bGPDframe *, Scene *)) { bGPDframe *gpf; @@ -85,7 +85,7 @@ short gplayer_frames_looper(bGPDlayer *gpl, Scene *scene, short (*gpf_cb)(bGPDfr /* Data Conversion Tools */ /* make a listing all the gp-frames in a layer as cfraelems */ -void gplayer_make_cfra_list(bGPDlayer *gpl, ListBase *elems, short onlysel) +void ED_gplayer_make_cfra_list(bGPDlayer *gpl, ListBase *elems, short onlysel) { bGPDframe *gpf; CfraElem *ce; @@ -111,7 +111,7 @@ void gplayer_make_cfra_list(bGPDlayer *gpl, ListBase *elems, short onlysel) /* Selection Tools */ /* check if one of the frames in this layer is selected */ -short is_gplayer_frame_selected(bGPDlayer *gpl) +short ED_gplayer_frame_select_check(bGPDlayer *gpl) { bGPDframe *gpf; @@ -149,7 +149,7 @@ static void gpframe_select(bGPDframe *gpf, short select_mode) } /* set all/none/invert select (like above, but with SELECT_* modes) */ -void select_gpencil_frames(bGPDlayer *gpl, short select_mode) +void ED_gpencil_select_frames(bGPDlayer *gpl, short select_mode) { bGPDframe *gpf; @@ -164,36 +164,33 @@ void select_gpencil_frames(bGPDlayer *gpl, short select_mode) } /* set all/none/invert select */ -void set_gplayer_frame_selection(bGPDlayer *gpl, short mode) +void ED_gplayer_frame_select_set(bGPDlayer *gpl, short mode) { /* error checking */ if (gpl == NULL) return; /* now call the standard function */ - select_gpencil_frames(gpl, mode); + ED_gpencil_select_frames(gpl, mode); } /* select the frame in this layer that occurs on this frame (there should only be one at most) */ -void select_gpencil_frame(bGPDlayer *gpl, int selx, short select_mode) +void ED_gpencil_select_frame(bGPDlayer *gpl, int selx, short select_mode) { bGPDframe *gpf; if (gpl == NULL) return; - - /* search through frames for a match */ - for (gpf = gpl->frames.first; gpf; gpf = gpf->next) { - /* there should only be one frame with this frame-number */ - if (gpf->framenum == selx) { - gpframe_select(gpf, select_mode); - break; - } + + gpf = BKE_gpencil_layer_find_frame(gpl, selx); + + if (gpf) { + gpframe_select(gpf, select_mode); } } /* select the frames in this layer that occur within the bounds specified */ -void borderselect_gplayer_frames(bGPDlayer *gpl, float min, float max, short select_mode) +void ED_gplayer_frames_select_border(bGPDlayer *gpl, float min, float max, short select_mode) { bGPDframe *gpf; @@ -211,7 +208,7 @@ void borderselect_gplayer_frames(bGPDlayer *gpl, float min, float max, short sel /* Frame Editing Tools */ /* Delete selected frames */ -void delete_gplayer_frames(bGPDlayer *gpl) +void ED_gplayer_frames_delete(bGPDlayer *gpl) { bGPDframe *gpf, *gpfn; @@ -229,7 +226,7 @@ void delete_gplayer_frames(bGPDlayer *gpl) } /* Duplicate selected frames from given gp-layer */ -void duplicate_gplayer_frames(bGPDlayer *gpl) +void ED_gplayer_frames_duplicate(bGPDlayer *gpl) { bGPDframe *gpf, *gpfn; @@ -502,19 +499,19 @@ void snap_gplayer_frames(bGPDlayer *gpl, Scene *scene, short mode) { switch (mode) { case 1: /* snap to nearest frame */ - gplayer_frames_looper(gpl, scene, snap_gpf_nearest); + ED_gplayer_frames_looper(gpl, scene, snap_gpf_nearest); break; case 2: /* snap to current frame */ - gplayer_frames_looper(gpl, scene, snap_gpf_cframe); + ED_gplayer_frames_looper(gpl, scene, snap_gpf_cframe); break; case 3: /* snap to nearest marker */ - gplayer_frames_looper(gpl, scene, snap_gpf_nearmarker); + ED_gplayer_frames_looper(gpl, scene, snap_gpf_nearmarker); break; case 4: /* snap to nearest second */ - gplayer_frames_looper(gpl, scene, snap_gpf_nearestsec); + ED_gplayer_frames_looper(gpl, scene, snap_gpf_nearestsec); break; default: /* just in case */ - gplayer_frames_looper(gpl, scene, snap_gpf_nearest); + ED_gplayer_frames_looper(gpl, scene, snap_gpf_nearest); break; } } @@ -604,21 +601,21 @@ void mirror_gplayer_frames(bGPDlayer *gpl, Scene *scene, short mode) { switch (mode) { case 1: /* mirror over current frame */ - gplayer_frames_looper(gpl, scene, mirror_gpf_cframe); + ED_gplayer_frames_looper(gpl, scene, mirror_gpf_cframe); break; case 2: /* mirror over frame 0 */ - gplayer_frames_looper(gpl, scene, mirror_gpf_yaxis); + ED_gplayer_frames_looper(gpl, scene, mirror_gpf_yaxis); break; case 3: /* mirror over value 0 */ - gplayer_frames_looper(gpl, scene, mirror_gpf_xaxis); + ED_gplayer_frames_looper(gpl, scene, mirror_gpf_xaxis); break; case 4: /* mirror over marker */ mirror_gpf_marker(NULL, NULL); - gplayer_frames_looper(gpl, scene, mirror_gpf_marker); + ED_gplayer_frames_looper(gpl, scene, mirror_gpf_marker); mirror_gpf_marker(NULL, NULL); break; default: /* just in case */ - gplayer_frames_looper(gpl, scene, mirror_gpf_yaxis); + ED_gplayer_frames_looper(gpl, scene, mirror_gpf_yaxis); break; } } diff --git a/source/blender/editors/gpencil/gpencil_buttons.c b/source/blender/editors/gpencil/gpencil_buttons.c index 3a7e806c2ed..4c125ebe013 100644 --- a/source/blender/editors/gpencil/gpencil_buttons.c +++ b/source/blender/editors/gpencil/gpencil_buttons.c @@ -40,6 +40,7 @@ #include "DNA_gpencil_types.h" #include "DNA_screen_types.h" +#include "DNA_space_types.h" #include "BKE_context.h" #include "BKE_global.h" @@ -230,12 +231,30 @@ typedef enum eGP_Stroke_Ops { STROKE_OPTS_V3D_ON, } eGP_Stroke_Ops; +static void draw_gpencil_space_specials(const bContext *C, uiLayout *layout) +{ + uiLayout *col, *row; + SpaceClip *sc = CTX_wm_space_clip(C); + + col = uiLayoutColumn(layout, 0); + + if (sc) { + bScreen *screen = CTX_wm_screen(C); + PointerRNA sc_ptr; + + RNA_pointer_create(&screen->id, &RNA_SpaceClipEditor, sc, &sc_ptr); + row = uiLayoutRow(col, 1); + uiItemR(row, &sc_ptr, "grease_pencil_source", UI_ITEM_R_EXPAND, NULL, ICON_NONE); + } +} + /* Draw the contents for a grease-pencil panel*/ static void draw_gpencil_panel(bContext *C, uiLayout *layout, bGPdata *gpd, PointerRNA *ctx_ptr) { PointerRNA gpd_ptr; bGPDlayer *gpl; uiLayout *col, *row; + SpaceClip *sc = CTX_wm_space_clip(C); short v3d_stroke_opts = STROKE_OPTS_NORMAL; const short is_v3d = CTX_wm_view3d(C) != NULL; @@ -244,6 +263,7 @@ static void draw_gpencil_panel(bContext *C, uiLayout *layout, bGPdata *gpd, Poin /* draw gpd settings first ------------------------------------- */ col = uiLayoutColumn(layout, 0); + /* current Grease Pencil block */ /* TODO: show some info about who owns this? */ uiTemplateID(col, C, ctx_ptr, "grease_pencil", "GPENCIL_OT_data_add", NULL, "GPENCIL_OT_data_unlink"); @@ -281,14 +301,17 @@ static void draw_gpencil_panel(bContext *C, uiLayout *layout, bGPdata *gpd, Poin row = uiLayoutRow(col, 1); uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "VIEW", NULL, ICON_NONE); uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "CURSOR", NULL, ICON_NONE); - row = uiLayoutRow(col, 1); - uiLayoutSetActive(row, v3d_stroke_opts); - uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "SURFACE", NULL, ICON_NONE); - uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "STROKE", NULL, ICON_NONE); - row = uiLayoutRow(col, 0); - uiLayoutSetActive(row, v3d_stroke_opts == STROKE_OPTS_V3D_ON); - uiItemR(row, &gpd_ptr, "use_stroke_endpoints", 0, NULL, ICON_NONE); + if (sc == NULL) { + row = uiLayoutRow(col, 1); + uiLayoutSetActive(row, v3d_stroke_opts); + uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "SURFACE", NULL, ICON_NONE); + uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "STROKE", NULL, ICON_NONE); + + row = uiLayoutRow(col, 0); + uiLayoutSetActive(row, v3d_stroke_opts == STROKE_OPTS_V3D_ON); + uiItemR(row, &gpd_ptr, "use_stroke_endpoints", 0, NULL, ICON_NONE); + } } @@ -300,6 +323,8 @@ void gpencil_panel_standard(const bContext *C, Panel *pa) /* if (v3d->flag2 & V3D_DISPGP)... etc. */ + draw_gpencil_space_specials(C, pa->layout); + /* get pointer to Grease Pencil Data */ gpd_ptr = gpencil_data_get_pointers((bContext *)C, &ptr); diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index 9250d48a20c..ed530bea4bd 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -57,6 +57,7 @@ #include "BKE_library.h" #include "BKE_object.h" #include "BKE_report.h" +#include "BKE_tracking.h" #include "WM_api.h" @@ -77,8 +78,9 @@ /* Context Wrangling... */ /* Get pointer to active Grease Pencil datablock, and an RNA-pointer to trace back to whatever owns it */ -bGPdata **gpencil_data_get_pointers(bContext *C, PointerRNA *ptr) +bGPdata **gpencil_data_get_pointers(const bContext *C, PointerRNA *ptr) { + ID *screen_id = (ID *)CTX_wm_screen(C); Scene *scene = CTX_data_scene(C); ScrArea *sa = CTX_wm_area(C); @@ -121,9 +123,12 @@ bGPdata **gpencil_data_get_pointers(bContext *C, PointerRNA *ptr) case SPACE_SEQ: /* Sequencer */ { - //SpaceSeq *sseq= (SpaceSeq *)CTX_wm_space_data(C); + SpaceSeq *sseq = (SpaceSeq *)CTX_wm_space_data(C); - /* return the GP data for the active strips/image/etc. */ + /* for now, Grease Pencil data is associated with the space (actually preview region only) */ + // XXX our convention for everything else is to link to data though... + if (ptr) RNA_pointer_create(screen_id, &RNA_SpaceSequenceEditor, sseq, ptr); + return &sseq->gpd; } break; @@ -133,7 +138,7 @@ bGPdata **gpencil_data_get_pointers(bContext *C, PointerRNA *ptr) /* for now, Grease Pencil data is associated with the space... */ // XXX our convention for everything else is to link to data though... - if (ptr) RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_SpaceImageEditor, sima, ptr); + if (ptr) RNA_pointer_create(screen_id, &RNA_SpaceImageEditor, sima, ptr); return &sima->gpd; } break; @@ -142,11 +147,25 @@ bGPdata **gpencil_data_get_pointers(bContext *C, PointerRNA *ptr) { SpaceClip *sc = (SpaceClip *)CTX_wm_space_data(C); MovieClip *clip = ED_space_clip(sc); - + if (clip) { - /* for now, as long as there's a clip, default to using that in Clip Editor */ - if (ptr) RNA_id_pointer_create(&clip->id, ptr); - return &clip->gpd; + if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) { + MovieTrackingTrack *track = BKE_tracking_track_get_active(&clip->tracking); + + if (!track) + return NULL; + + if (ptr) + RNA_pointer_create(&clip->id, &RNA_MovieTrackingTrack, track, ptr); + + return &track->gpd; + } + else { + if (ptr) + RNA_id_pointer_create(&clip->id, ptr); + + return &clip->gpd; + } } } break; @@ -162,7 +181,7 @@ bGPdata **gpencil_data_get_pointers(bContext *C, PointerRNA *ptr) } /* Get the active Grease Pencil datablock */ -bGPdata *gpencil_data_get_active(bContext *C) +bGPdata *gpencil_data_get_active(const bContext *C) { bGPdata **gpd_ptr = gpencil_data_get_pointers(C, NULL); return (gpd_ptr) ? *(gpd_ptr) : NULL; @@ -199,7 +218,7 @@ static int gp_data_add_exec(bContext *C, wmOperator *op) else { /* decrement user count and add new datablock */ bGPdata *gpd = (*gpd_ptr); - + id_us_min(&gpd->id); *gpd_ptr = gpencil_data_addnew("GPencil"); } @@ -464,7 +483,7 @@ static int gp_camera_view_subrect(bContext *C, rctf *subrect) if (v3d) { RegionView3D *rv3d = ar->regiondata; - + /* for camera view set the subrect */ if (rv3d->persp == RV3D_CAMOB) { Scene *scene = CTX_data_scene(C); @@ -508,26 +527,26 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu /* add points */ for (i = 0, bezt = nu->bezt; i < tot; i++, pt++, bezt++) { float h1[3], h2[3]; - + if (i) interp_v3_v3v3(h1, p3d_cur, p3d_prev, 0.3); else interp_v3_v3v3(h1, p3d_cur, p3d_next, -0.3); - + if (i < tot - 1) interp_v3_v3v3(h2, p3d_cur, p3d_next, 0.3); else interp_v3_v3v3(h2, p3d_cur, p3d_prev, -0.3); - + copy_v3_v3(bezt->vec[0], h1); copy_v3_v3(bezt->vec[1], p3d_cur); copy_v3_v3(bezt->vec[2], h2); - + /* set settings */ bezt->h1 = bezt->h2 = HD_FREE; bezt->f1 = bezt->f2 = bezt->f3 = SELECT; bezt->radius = bezt->weight = pt->pressure * gpl->thickness * 0.1f; - + /* shift coord vects */ copy_v3_v3(p3d_prev, p3d_cur); copy_v3_v3(p3d_cur, p3d_next); - + if (i + 2 < tot) { gp_strokepoint_convertcoords(C, gps, pt + 2, p3d_next, subrect); } diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 6ffe3f1feeb..6d90824668e 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -44,6 +44,7 @@ #include "BKE_context.h" #include "BKE_global.h" #include "BKE_report.h" +#include "BKE_tracking.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" @@ -56,9 +57,12 @@ #include "ED_screen.h" #include "ED_view3d.h" -#include "RNA_access.h" +#include "BIF_gl.h" +#include "BIF_glutil.h" +#include "RNA_access.h" #include "RNA_define.h" + #include "WM_api.h" #include "WM_types.h" @@ -78,15 +82,6 @@ typedef struct tGPsdata { rctf *subrect; /* for using the camera rect within the 3d view */ rctf subrect_data; - -#if 0 // XXX review this 2d image stuff... - ImBuf *ibuf; /* needed for GP_STROKE_2DIMAGE */ - struct IBufViewSettings { - int offsx, offsy; /* offsets */ - int sizex, sizey; /* dimensions to use as scale-factor */ - } im2d_settings; /* needed for GP_STROKE_2DIMAGE */ -#endif - PointerRNA ownerPtr; /* pointer to owner of gp-datablock */ bGPdata *gpd; /* gp-datablock layer comes from */ bGPDlayer *gpl; /* layer we're working on */ @@ -106,8 +101,10 @@ typedef struct tGPsdata { float imat[4][4]; /* inverted transformation matrix applying when converting coords from screen-space * to region space */ - - float custom_color[4]; /* custom color for (?) */ + + float custom_color[4]; /* custom color - hack for enforcing a particular color for track/mask editing */ + + void *erasercursor; /* radial cursor data for drawing eraser */ } tGPsdata; /* values for tGPsdata->status */ @@ -268,7 +265,7 @@ static void gp_stroke_convertcoords(tGPsdata *p, const int mval[2], float out[3] int mval_prj[2]; float rvec[3], dvec[3]; float mval_f[2]; - + /* Current method just converts each point in screen-coordinates to * 3D-coordinates using the 3D-cursor as reference. In general, this * works OK, but it could of course be improved. @@ -282,7 +279,7 @@ static void gp_stroke_convertcoords(tGPsdata *p, const int mval[2], float out[3] /* method taken from editview.c - mouse_cursor() */ project_int_noclip(p->ar, rvec, mval_prj); - + VECSUB2D(mval_f, mval_prj, mval); ED_view3d_win_to_delta(p->ar, mval_f, dvec); sub_v3_v3v3(out, rvec, dvec); @@ -295,25 +292,6 @@ static void gp_stroke_convertcoords(tGPsdata *p, const int mval[2], float out[3] mul_v3_m4v3(out, p->imat, out); } -#if 0 - /* 2d - on image 'canvas' (assume that p->v2d is set) */ - else if (gpd->sbuffer_sflag & GP_STROKE_2DIMAGE) { - int sizex, sizey, offsx, offsy; - - /* get stored settings - * - assume that these have been set already (there are checks that set sane 'defaults' just in case) - */ - sizex = p->im2d_settings.sizex; - sizey = p->im2d_settings.sizey; - offsx = p->im2d_settings.offsx; - offsy = p->im2d_settings.offsy; - - /* calculate new points */ - out[0] = (float)(mval[0] - offsx) / (float)sizex; - out[1] = (float)(mval[1] - offsy) / (float)sizey; - } -#endif - /* 2d - relative to screen (viewport area) */ else { if (p->subrect == NULL) { /* normal 3D view */ @@ -392,11 +370,11 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure) else if (p->paintmode == GP_PAINTMODE_DRAW_POLY) { /* get pointer to destination point */ pt = (tGPspoint *)(gpd->sbuffer); - + /* store settings */ copy_v2_v2_int(&pt->x, mval); pt->pressure = pressure; - + /* if there's stroke for this poly line session add (or replace last) point * to stroke. This allows to draw lines more interactively (see new segment * during mouse slide, i.e.) @@ -404,36 +382,36 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure) if (gp_stroke_added_check(p)) { bGPDstroke *gps = p->gpf->strokes.last; bGPDspoint *pts; - + /* first time point is adding to temporary buffer -- need to allocate new point in stroke */ if (gpd->sbuffer_size == 0) { gps->points = MEM_reallocN(gps->points, sizeof(bGPDspoint) * (gps->totpoints + 1)); gps->totpoints++; } - + pts = &gps->points[gps->totpoints - 1]; - + /* special case for poly lines: normally, depth is needed only when creating new stroke from buffer, * but poly lines are converting to stroke instantly, so initialize depth buffer before converting coordinates */ if (gpencil_project_check(p)) { View3D *v3d = p->sa->spacedata.first; - + view3d_region_operator_needs_opengl(p->win, p->ar); ED_view3d_autodist_init(p->scene, p->ar, v3d, (p->gpd->flag & GP_DATA_DEPTH_STROKE) ? 1 : 0); } - + /* convert screen-coordinates to appropriate coordinates (and store them) */ gp_stroke_convertcoords(p, &pt->x, &pts->x, NULL); - + /* copy pressure */ pts->pressure = pt->pressure; } - + /* increment counters */ if (gpd->sbuffer_size == 0) gpd->sbuffer_size++; - + return GP_STROKEADD_NORMAL; } @@ -481,7 +459,7 @@ static void gp_stroke_smooth(tGPsdata *p) /* second pass: apply smoothed coordinates */ for (i = 0, spc = smoothArray; i < gpd->sbuffer_size; i++, spc++) { tGPspoint *pc = (((tGPspoint *)gpd->sbuffer) + i); - + copy_v2_v2_int(&pc->x, &spc->x); } @@ -525,7 +503,7 @@ static void gp_stroke_simplify(tGPsdata *p) co[0] += (float)(old_points[offs].x * sfac); \ co[1] += (float)(old_points[offs].y * sfac); \ pressure += old_points[offs].pressure * sfac; \ - } + } (void)0 for (i = 0, j = 0; i < num_points; i++) { if (i - j == 3) { @@ -638,10 +616,10 @@ static void gp_stroke_newfrombuffer(tGPsdata *p) else if (p->paintmode == GP_PAINTMODE_DRAW_POLY) { /* first point */ ptc = gpd->sbuffer; - + /* convert screen-coordinates to appropriate coordinates (and store them) */ gp_stroke_convertcoords(p, &ptc->x, &pt->x, NULL); - + /* copy pressure */ pt->pressure = ptc->pressure; } @@ -655,10 +633,10 @@ static void gp_stroke_newfrombuffer(tGPsdata *p) int found_depth = 0; depth_arr = MEM_mallocN(sizeof(float) * gpd->sbuffer_size, "depth_points"); - + for (i = 0, ptc = gpd->sbuffer; i < gpd->sbuffer_size; i++, ptc++, pt++) { copy_v2_v2_int(mval, &ptc->x); - + if ((ED_view3d_autodist_depth(p->ar, mval, depth_margin, depth_arr + i) == 0) && (i && (ED_view3d_autodist_depth_seg(p->ar, mval, mval_prev, depth_margin + 1, depth_arr + i) == 0))) { @@ -667,7 +645,7 @@ static void gp_stroke_newfrombuffer(tGPsdata *p) else { found_depth = TRUE; } - + copy_v2_v2_int(mval_prev, mval); } @@ -834,21 +812,6 @@ static void gp_stroke_eraser_dostroke(tGPsdata *p, int mval[], int mvalo[], shor else if (gps->flag & GP_STROKE_2DSPACE) { UI_view2d_view_to_region(p->v2d, gps->points->x, gps->points->y, &x0, &y0); } -#if 0 - else if (gps->flag & GP_STROKE_2DIMAGE) { - int offsx, offsy, sizex, sizey; - - /* get stored settings */ - sizex = p->im2d_settings.sizex; - sizey = p->im2d_settings.sizey; - offsx = p->im2d_settings.offsx; - offsy = p->im2d_settings.offsy; - - /* calculate new points */ - x0 = (int)((gps->points->x * sizex) + offsx); - y0 = (int)((gps->points->y * sizey) + offsy); - } -#endif else { if (p->subrect == NULL) { /* normal 3D view */ x0 = (int)(gps->points->x / 100 * p->ar->winx); @@ -894,24 +857,6 @@ static void gp_stroke_eraser_dostroke(tGPsdata *p, int mval[], int mvalo[], shor UI_view2d_view_to_region(p->v2d, pt2->x, pt2->y, &x1, &y1); } -#if 0 - else if (gps->flag & GP_STROKE_2DIMAGE) { - int offsx, offsy, sizex, sizey; - - /* get stored settings */ - sizex = p->im2d_settings.sizex; - sizey = p->im2d_settings.sizey; - offsx = p->im2d_settings.offsx; - offsy = p->im2d_settings.offsy; - - /* calculate new points */ - x0 = (int)((pt1->x * sizex) + offsx); - y0 = (int)((pt1->y * sizey) + offsy); - - x1 = (int)((pt2->x * sizex) + offsx); - y1 = (int)((pt2->y * sizey) + offsy); - } -#endif else { if (p->subrect == NULL) { /* normal 3D view */ x0 = (int)(pt1->x / 100 * p->ar->winx); @@ -1028,16 +973,6 @@ static int gp_session_initdata(bContext *C, tGPsdata *p) printf("Error: 3D-View active region doesn't have any region data, so cannot be drawable\n"); return 0; } - -#if 0 // XXX will this sort of antiquated stuff be restored? - /* check that gpencil data is allowed to be drawn */ - if ((v3d->flag2 & V3D_DISPGP) == 0) { - p->status = GP_STATUS_ERROR; - if (G.debug & G_DEBUG) - printf("Error: In active view, Grease Pencil not shown\n"); - return 0; - } -#endif } break; @@ -1049,19 +984,8 @@ static int gp_session_initdata(bContext *C, tGPsdata *p) p->sa = curarea; p->ar = ar; p->v2d = &ar->v2d; - -#if 0 // XXX will this sort of antiquated stuff be restored? - /* check that gpencil data is allowed to be drawn */ - if ((snode->flag & SNODE_DISPGP) == 0) { - p->status = GP_STATUS_ERROR; - if (G.debug & G_DEBUG) - printf("Error: In active view, Grease Pencil not shown\n"); - return 0; - } -#endif } break; -#if 0 // XXX these other spaces will come over time... case SPACE_SEQ: { SpaceSeq *sseq = curarea->spacedata.first; @@ -1078,15 +1002,8 @@ static int gp_session_initdata(bContext *C, tGPsdata *p) printf("Error: In active view (sequencer), active mode doesn't support Grease Pencil\n"); return 0; } - if ((sseq->flag & SEQ_DRAW_GPENCIL) == 0) { - p->status = GP_STATUS_ERROR; - if (G.debug & G_DEBUG) - printf("Error: In active view, Grease Pencil not shown\n"); - return 0; - } } break; -#endif case SPACE_IMAGE: { //SpaceImage *sima= curarea->spacedata.first; @@ -1095,39 +1012,36 @@ static int gp_session_initdata(bContext *C, tGPsdata *p) p->sa = curarea; p->ar = ar; p->v2d = &ar->v2d; - //p->ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser); - -#if 0 // XXX disabled for now - /* check that gpencil data is allowed to be drawn */ - if ((sima->flag & SI_DISPGP) == 0) { - p->status = GP_STATUS_ERROR; - if (G.debug & G_DEBUG) - printf("Error: In active view, Grease Pencil not shown\n"); - return 0; - } -#endif } break; case SPACE_CLIP: { SpaceClip *sc = curarea->spacedata.first; - + /* set the current area */ p->sa = curarea; p->ar = ar; p->v2d = &ar->v2d; - //p->ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser); - + invert_m4_m4(p->imat, sc->unistabmat); - + /* custom color for new layer */ p->custom_color[0] = 1.0f; p->custom_color[1] = 0.0f; p->custom_color[2] = 0.5f; p->custom_color[3] = 0.9f; + + if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) { + int framenr = sc->user.framenr; + MovieTrackingTrack *track = BKE_tracking_track_get_active(&sc->clip->tracking); + MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(track, framenr); + + p->imat[3][0] -= marker->pos[0]; + p->imat[3][1] -= marker->pos[1]; + } } break; - + /* unsupported views */ default: { @@ -1163,12 +1077,6 @@ static int gp_session_initdata(bContext *C, tGPsdata *p) /* clear out buffer (stored in gp-data), in case something contaminated it */ gp_session_validatebuffer(p); -#if 0 - /* set 'default' im2d_settings just in case something that uses this doesn't set it */ - p->im2d_settings.sizex = 1; - p->im2d_settings.sizey = 1; -#endif - return 1; } @@ -1214,7 +1122,7 @@ static void gp_paint_initstroke(tGPsdata *p, short paintmode) p->gpl = gpencil_layer_getactive(p->gpd); if (p->gpl == NULL) { p->gpl = gpencil_layer_addnew(p->gpd); - + if (p->custom_color[3]) copy_v3_v3(p->gpl->color, p->custom_color); } @@ -1250,7 +1158,7 @@ static void gp_paint_initstroke(tGPsdata *p, short paintmode) if (p->sa->spacetype == SPACE_VIEW3D) { View3D *v3d = p->sa->spacedata.first; RegionView3D *rv3d = p->ar->regiondata; - + /* for camera view set the subrect */ if (rv3d->persp == RV3D_CAMOB) { ED_view3d_calc_camera_border(p->scene, p->ar, v3d, rv3d, &p->subrect_data, TRUE); /* no shift */ @@ -1280,41 +1188,13 @@ static void gp_paint_initstroke(tGPsdata *p, short paintmode) p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE; } break; -#if 0 // XXX other spacetypes to be restored in due course + case SPACE_SEQ: { - SpaceSeq *sseq = (SpaceSeq *)p->sa->spacedata.first; - int rectx, recty; - float zoom, zoomx, zoomy; - - /* set draw 2d-stroke flag */ - p->gpd->sbuffer_sflag |= GP_STROKE_2DIMAGE; - - /* calculate zoom factor */ - zoom = (float)(SEQ_ZOOM_FAC(sseq->zoom)); - if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) { - zoomx = zoom * (p->scene->r.xasp / p->scene->r.yasp); - zoomy = zoom; - } - else - zoomx = zoomy = zoom; - - /* calculate rect size to use to calculate the size of the drawing area - * - We use the size of the output image not the size of the ibuf being shown - * as it is too messy getting the ibuf (and could be too slow). This should be - * a reasonable for most cases anyway. - */ - rectx = (p->scene->r.size * p->scene->r.xsch) / 100; - recty = (p->scene->r.size * p->scene->r.ysch) / 100; - - /* set offset and scale values for opertations to use */ - p->im2d_settings.sizex = (int)(zoomx * rectx); - p->im2d_settings.sizey = (int)(zoomy * recty); - p->im2d_settings.offsx = (int)((p->sa->winx - p->im2d_settings.sizex) / 2 + sseq->xof); - p->im2d_settings.offsy = (int)((p->sa->winy - p->im2d_settings.sizey) / 2 + sseq->yof); + p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE; } break; -#endif + case SPACE_IMAGE: { SpaceImage *sima = (SpaceImage *)p->sa->spacedata.first; @@ -1390,6 +1270,49 @@ static void gp_paint_cleanup(tGPsdata *p) /* ------------------------------- */ +/* Helper callback for drawing the cursor itself */ +static void gpencil_draw_eraser(bContext *UNUSED(C), int x, int y, void *p_ptr) +{ + tGPsdata *p = (tGPsdata *)p_ptr; + + if (p->paintmode == GP_PAINTMODE_ERASER) { + glPushMatrix(); + + glTranslatef((float)x, (float)y, 0.0f); + + glColor4ub(255, 255, 255, 128); + + glEnable(GL_LINE_SMOOTH); + glEnable(GL_BLEND); + + glutil_draw_lined_arc(0.0, M_PI * 2.0, p->radius, 40); + + glDisable(GL_BLEND); + glDisable(GL_LINE_SMOOTH); + + glPopMatrix(); + } +} + +/* Turn brush cursor in 3D view on/off */ +static void gpencil_draw_toggle_eraser_cursor(bContext *C, tGPsdata *p, short enable) +{ + if (p->erasercursor && !enable) { + /* clear cursor */ + WM_paint_cursor_end(CTX_wm_manager(C), p->erasercursor); + p->erasercursor = NULL; + } + else if (enable) { + /* enable cursor */ + p->erasercursor = WM_paint_cursor_activate(CTX_wm_manager(C), + NULL, // XXX + gpencil_draw_eraser, p); + } +} + +/* ------------------------------- */ + + static void gpencil_draw_exit(bContext *C, wmOperator *op) { tGPsdata *p = op->customdata; @@ -1404,8 +1327,12 @@ static void gpencil_draw_exit(bContext *C, wmOperator *op) if (p) { /* check size of buffer before cleanup, to determine if anything happened here */ if (p->paintmode == GP_PAINTMODE_ERASER) { - // TODO clear radial cursor thing - // XXX draw_sel_circle(NULL, p.mvalo, 0, p.radius, 0); + /* turn off radial brush cursor */ + gpencil_draw_toggle_eraser_cursor(C, p, FALSE); + + /* if successful, store the new eraser size to be used again next time */ + if (p->status == GP_STATUS_DONE) + U.gp_eraser = p->radius; } /* cleanup */ @@ -1456,6 +1383,7 @@ static int gpencil_draw_init(bContext *C, wmOperator *op) return 1; } + /* ------------------------------- */ /* update UI indicators of status, including cursor and header prints */ @@ -1550,8 +1478,9 @@ static void gpencil_draw_apply_event(wmOperator *op, wmEvent *event) float mousef[2]; int tablet = 0; - /* convert from window-space to area-space mouse coordintes */ - // NOTE: float to ints conversions, +1 factor is probably used to ensure a bit more accurate rounding... + /* convert from window-space to area-space mouse coordintes + * NOTE: float to ints conversions, +1 factor is probably used to ensure a bit more accurate rounding... + */ p->mval[0] = event->mval[0] + 1; p->mval[1] = event->mval[1] + 1; @@ -1700,7 +1629,7 @@ static int gpencil_draw_invoke(bContext *C, wmOperator *op, wmEvent *event) /* if eraser is on, draw radial aid */ if (p->paintmode == GP_PAINTMODE_ERASER) { - // TODO: this involves mucking around with radial control, so we leave this for now.. + gpencil_draw_toggle_eraser_cursor(C, p, TRUE); } /* set cursor */ @@ -1733,13 +1662,13 @@ static int gpencil_draw_invoke(bContext *C, wmOperator *op, wmEvent *event) } /* gpencil modal operator stores area, which can be removed while using it (like fullscreen) */ -static int gpencil_area_exists(bContext *C, ScrArea *satest) +static int gpencil_area_exists(bContext *C, ScrArea *sa_test) { bScreen *sc = CTX_wm_screen(C); ScrArea *sa; for (sa = sc->areabase.first; sa; sa = sa->next) { - if (sa == satest) + if (sa == sa_test) return 1; } @@ -1829,7 +1758,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, wmEvent *event) sketch |= GPENCIL_SKETCH_SESSIONS_ON(p->scene); /* polyline drawing is also 'sketching' -- all knots should be added during one session */ sketch |= p->paintmode == GP_PAINTMODE_DRAW_POLY; - + if (sketch) { /* end stroke only, and then wait to resume painting soon */ //printf("\t\tGP - end stroke only\n"); @@ -1837,7 +1766,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, wmEvent *event) /* we've just entered idling state, so this event was processed (but no others yet) */ estate = OPERATOR_RUNNING_MODAL; - + /* stroke could be smoothed, send notifier to refresh screen */ WM_event_add_notifier(C, NC_SCREEN | ND_GPENCIL | NA_EDITED, NULL); } @@ -1850,7 +1779,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, wmEvent *event) else if (event->val == KM_PRESS) { /* not painting, so start stroke (this should be mouse-button down) */ p = gpencil_stroke_begin(C, op); - + if (p->status == GP_STATUS_ERROR) { estate = OPERATOR_CANCELLED; } @@ -1879,8 +1808,37 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, wmEvent *event) estate = OPERATOR_RUNNING_MODAL; } } + /* eraser size */ + else if ((p->paintmode == GP_PAINTMODE_ERASER) && + ELEM4(event->type, WHEELUPMOUSE, WHEELDOWNMOUSE, PADPLUSKEY, PADMINUS)) + { + /* just resize the brush (local version) + * TODO: fix the hardcoded size jumps (set to make a visible difference) and hardcoded keys + */ + //printf("\t\tGP - resize eraser\n"); + switch (event->type) { + case WHEELUPMOUSE: /* larger */ + case PADPLUSKEY: + p->radius += 5; + break; + + case WHEELDOWNMOUSE: /* smaller */ + case PADMINUS: + p->radius -= 5; + + if (p->radius < 0) + p->radius = 0; + break; + } + + /* force refresh */ + ED_region_tag_redraw(p->ar); /* just active area for now, since doing whole screen is too slow */ + + /* event handled, so just tag as running modal */ + estate = OPERATOR_RUNNING_MODAL; + } /* there shouldn't be any other events, but just in case there are, let's swallow them - * (i.e. to prevent problems with with undo) + * (i.e. to prevent problems with undo) */ else { /* swallow event to save ourselves trouble */ @@ -1906,7 +1864,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, wmEvent *event) case OPERATOR_CANCELLED: gpencil_draw_exit(C, op); break; - + case OPERATOR_RUNNING_MODAL | OPERATOR_PASS_THROUGH: /* event doesn't need to be handled */ //printf("unhandled event -> %d (mmb? = %d | mmv? = %d)\n", event->type, event->type == MIDDLEMOUSE, event->type==MOUSEMOVE); diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index f4d922dba3c..24aa88a36bd 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -89,15 +89,16 @@ typedef struct bAnimContext { /* Main Data container types */ typedef enum eAnimCont_Types { - ANIMCONT_NONE = 0, /* invalid or no data */ - ANIMCONT_ACTION, /* action (bAction) */ - ANIMCONT_SHAPEKEY, /* shapekey (Key) */ - ANIMCONT_GPENCIL, /* grease pencil (screen) */ - ANIMCONT_DOPESHEET, /* dopesheet (bDopesheet) */ - ANIMCONT_FCURVES, /* animation F-Curves (bDopesheet) */ - ANIMCONT_DRIVERS, /* drivers (bDopesheet) */ - ANIMCONT_NLA, /* nla (bDopesheet) */ - ANIMCONT_CHANNEL /* animation channel (bAnimListElem) */ + ANIMCONT_NONE = 0, /* invalid or no data */ + ANIMCONT_ACTION = 1, /* action (bAction) */ + ANIMCONT_SHAPEKEY = 2, /* shapekey (Key) */ + ANIMCONT_GPENCIL = 3, /* grease pencil (screen) */ + ANIMCONT_DOPESHEET = 4, /* dopesheet (bDopesheet) */ + ANIMCONT_FCURVES = 5, /* animation F-Curves (bDopesheet) */ + ANIMCONT_DRIVERS = 6, /* drivers (bDopesheet) */ + ANIMCONT_NLA = 7, /* nla (bDopesheet) */ + ANIMCONT_CHANNEL = 8, /* animation channel (bAnimListElem) */ + ANIMCONT_MASK = 9 /* mask dopesheet */ } eAnimCont_Types; /* --------------- Channels -------------------- */ @@ -160,6 +161,9 @@ typedef enum eAnim_ChannelType { ANIMTYPE_GPDATABLOCK, ANIMTYPE_GPLAYER, + + ANIMTYPE_MASKDATABLOCK, + ANIMTYPE_MASKLAYER, ANIMTYPE_NLATRACK, ANIMTYPE_NLAACTION, @@ -173,6 +177,7 @@ typedef enum eAnim_KeyType { ALE_NONE = 0, /* no keyframe data */ ALE_FCURVE, /* F-Curve */ ALE_GPFRAME, /* Grease Pencil Frames */ + ALE_MASKLAY, /* Mask */ ALE_NLASTRIP, /* NLA Strips */ ALE_ALL, /* All channels summary */ @@ -279,6 +284,15 @@ typedef enum eAnimFilter_Flags { #define EDITABLE_GPL(gpl) ((gpl->flag & GP_LAYER_LOCKED) == 0) #define SEL_GPL(gpl) (gpl->flag & GP_LAYER_SELECT) +/* Mask Only */ +/* Grease Pencil datablock settings */ +#define EXPANDED_MASK(mask) (mask->flag & MASK_ANIMF_EXPAND) +/* Grease Pencil Layer settings */ +#define EDITABLE_MASK(masklay) ((masklay->flag & MASK_LAYERFLAG_LOCKED) == 0) +#define SEL_MASKLAY(masklay) (masklay->flag & SELECT) + + + /* NLA only */ #define SEL_NLT(nlt) (nlt->flag & NLATRACK_SELECTED) #define EDITABLE_NLT(nlt) ((nlt->flag & NLATRACK_PROTECTED) == 0) @@ -341,20 +355,20 @@ short ANIM_animdata_context_getdata(bAnimContext *ac); /* flag-setting behavior */ typedef enum eAnimChannels_SetFlag { - ACHANNEL_SETFLAG_CLEAR = 0, /* turn off */ - ACHANNEL_SETFLAG_ADD, /* turn on */ - ACHANNEL_SETFLAG_INVERT, /* on->off, off->on */ - ACHANNEL_SETFLAG_TOGGLE /* some on -> all off // all on */ + ACHANNEL_SETFLAG_CLEAR = 0, /* turn off */ + ACHANNEL_SETFLAG_ADD = 1, /* turn on */ + ACHANNEL_SETFLAG_INVERT = 2, /* on->off, off->on */ + ACHANNEL_SETFLAG_TOGGLE = 3 /* some on -> all off // all on */ } eAnimChannels_SetFlag; /* types of settings for AnimChannels */ typedef enum eAnimChannel_Settings { - ACHANNEL_SETTING_SELECT = 0, - ACHANNEL_SETTING_PROTECT, // warning: for drawing UI's, need to check if this is off (maybe inverse this later) - ACHANNEL_SETTING_MUTE, - ACHANNEL_SETTING_EXPAND, - ACHANNEL_SETTING_VISIBLE, /* only for Graph Editor */ - ACHANNEL_SETTING_SOLO /* only for NLA Tracks */ + ACHANNEL_SETTING_SELECT = 0, + ACHANNEL_SETTING_PROTECT = 1, /* warning: for drawing UI's, need to check if this is off (maybe inverse this later) */ + ACHANNEL_SETTING_MUTE = 2, + ACHANNEL_SETTING_EXPAND = 3, + ACHANNEL_SETTING_VISIBLE = 4, /* only for Graph Editor */ + ACHANNEL_SETTING_SOLO = 5 /* only for NLA Tracks */ } eAnimChannel_Settings; @@ -509,7 +523,7 @@ short ANIM_fmodifiers_paste_from_buf(ListBase *modifiers, short replace); int getname_anim_fcurve(char *name, struct ID *id, struct FCurve *fcu); /* Automatically determine a color for the nth F-Curve */ -void getcolor_fcurve_rainbow(int cur, int tot, float *out); +void getcolor_fcurve_rainbow(int cur, int tot, float out[3]); /* ----------------- NLA-Mapping ----------------------- */ /* anim_draw.c */ diff --git a/source/blender/editors/include/ED_clip.h b/source/blender/editors/include/ED_clip.h index 7943a17c377..649266beec7 100644 --- a/source/blender/editors/include/ED_clip.h +++ b/source/blender/editors/include/ED_clip.h @@ -36,6 +36,7 @@ struct bContext; struct bScreen; struct ImBuf; struct Main; +struct Mask; struct MovieClip; struct SpaceClip; struct wmEvent; @@ -46,14 +47,21 @@ int ED_space_clip_poll(struct bContext *C); int ED_space_clip_view_clip_poll(struct bContext *C); int ED_space_clip_tracking_poll(struct bContext *C); -int ED_space_clip_tracking_size_poll(struct bContext *C); -int ED_space_clip_tracking_frame_poll(struct bContext *C); +int ED_space_clip_maskedit_poll(struct bContext *C); +int ED_space_clip_maskedit_mask_poll(bContext *C); void ED_space_clip_set(struct bContext *C, struct bScreen *screen, struct SpaceClip *sc, struct MovieClip *clip); struct MovieClip *ED_space_clip(struct SpaceClip *sc); +struct Mask *ED_space_clip_mask(struct SpaceClip *sc); void ED_space_clip_size(struct SpaceClip *sc, int *width, int *height); void ED_space_clip_zoom(struct SpaceClip *sc, ARegion *ar, float *zoomx, float *zoomy); void ED_space_clip_aspect(struct SpaceClip *sc, float *aspx, float *aspy); +void ED_space_clip_aspect_dimension_aware(struct SpaceClip *sc, float *aspx, float *aspy); + +int ED_space_clip_clip_framenr(struct SpaceClip *sc); + +void ED_space_clip_mask_size(struct SpaceClip *sc, int *width, int *height); +void ED_space_clip_mask_aspect(struct SpaceClip *sc, float *aspx, float *aspy); struct ImBuf *ED_space_clip_get_buffer(struct SpaceClip *sc); struct ImBuf *ED_space_clip_get_stable_buffer(struct SpaceClip *sc, float loc[2], float *scale, float *angle); @@ -61,9 +69,9 @@ struct ImBuf *ED_space_clip_get_stable_buffer(struct SpaceClip *sc, float loc[2] void ED_clip_update_frame(const struct Main *mainp, int cfra); int ED_clip_view_selection(struct SpaceClip *sc, struct ARegion *ar, int fit); -void ED_clip_point_undistorted_pos(SpaceClip * sc, float co[2], float nco[2]); +void ED_clip_point_undistorted_pos(SpaceClip * sc, const float co[2], float r_co[2]); void ED_clip_point_stable_pos(struct bContext *C, float x, float y, float *xr, float *yr); -void ED_clip_point_stable_pos__reverse(SpaceClip * sc, ARegion *ar, float co[2], float nco[2]); +void ED_clip_point_stable_pos__reverse(SpaceClip * sc, ARegion *ar, const float co[2], float r_co[2]); void ED_clip_mouse_pos(struct bContext *C, struct wmEvent *event, float co[2]); int ED_space_clip_texture_buffer_supported(struct SpaceClip *sc); @@ -72,6 +80,8 @@ void ED_space_clip_unload_movieclip_buffer(struct SpaceClip *sc); void ED_space_clip_free_texture_buffer(struct SpaceClip *sc); int ED_space_clip_show_trackedit(struct SpaceClip *sc); +int ED_space_clip_show_maskedit(struct SpaceClip *sc); +void ED_space_clip_set_mask(struct bContext *C, struct SpaceClip *sc, struct Mask *mask); /* clip_ops.c */ void ED_operatormacros_clip(void); diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h index bd3e4371a79..1d461f797d6 100644 --- a/source/blender/editors/include/ED_gpencil.h +++ b/source/blender/editors/include/ED_gpencil.h @@ -64,8 +64,8 @@ typedef struct tGPspoint { /* ----------- Grease Pencil Tools/Context ------------- */ -struct bGPdata **gpencil_data_get_pointers(struct bContext *C, struct PointerRNA *ptr); -struct bGPdata *gpencil_data_get_active(struct bContext *C); +struct bGPdata **gpencil_data_get_pointers(const struct bContext *C, struct PointerRNA *ptr); +struct bGPdata *gpencil_data_get_active(const struct bContext *C); struct bGPdata *gpencil_data_get_active_v3d(struct Scene *scene); /* for offscreen rendering */ /* ----------- Grease Pencil Operators ----------------- */ @@ -76,31 +76,34 @@ void ED_operatortypes_gpencil(void); /* ------------ Grease-Pencil Drawing API ------------------ */ /* drawgpencil.c */ -void draw_gpencil_2dimage(struct bContext *C, struct ImBuf *ibuf); -void draw_gpencil_view2d(struct bContext *C, short onlyv2d); +void draw_gpencil_2dimage(const struct bContext *C); +void draw_gpencil_view2d(const struct bContext *C, short onlyv2d); void draw_gpencil_view3d(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, short only3d); void gpencil_panel_standard(const struct bContext *C, struct Panel *pa); /* ----------- Grease-Pencil AnimEdit API ------------------ */ -short gplayer_frames_looper(struct bGPDlayer *gpl, struct Scene *scene, short (*gpf_cb)(struct bGPDframe *, struct Scene *)); -void gplayer_make_cfra_list(struct bGPDlayer *gpl, ListBase *elems, short onlysel); +short ED_gplayer_frames_looper(struct bGPDlayer *gpl, struct Scene *scene, + short (*gpf_cb)(struct bGPDframe *, struct Scene *)); +void ED_gplayer_make_cfra_list(struct bGPDlayer *gpl, ListBase *elems, short onlysel); -short is_gplayer_frame_selected(struct bGPDlayer *gpl); -void set_gplayer_frame_selection(struct bGPDlayer *gpl, short mode); -void select_gpencil_frames(struct bGPDlayer *gpl, short select_mode); -void select_gpencil_frame(struct bGPDlayer *gpl, int selx, short select_mode); -void borderselect_gplayer_frames(struct bGPDlayer *gpl, float min, float max, short select_mode); +short ED_gplayer_frame_select_check(struct bGPDlayer *gpl); +void ED_gplayer_frame_select_set(struct bGPDlayer *gpl, short mode); +void ED_gplayer_frames_select_border(struct bGPDlayer *gpl, float min, float max, short select_mode); +void ED_gpencil_select_frames(struct bGPDlayer *gpl, short select_mode); +void ED_gpencil_select_frame(struct bGPDlayer *gpl, int selx, short select_mode); -void delete_gplayer_frames(struct bGPDlayer *gpl); -void duplicate_gplayer_frames(struct bGPDlayer *gpd); +void ED_gplayer_frames_delete(struct bGPDlayer *gpl); +void ED_gplayer_frames_duplicate(struct bGPDlayer *gpl); +#if 0 void free_gpcopybuf(void); void copy_gpdata(void); void paste_gpdata(void); void snap_gplayer_frames(struct bGPDlayer *gpl, short mode); void mirror_gplayer_frames(struct bGPDlayer *gpl, short mode); +#endif /* ------------ Grease-Pencil Undo System ------------------ */ int ED_gpencil_session_active(void); diff --git a/source/blender/editors/include/ED_keyframes_draw.h b/source/blender/editors/include/ED_keyframes_draw.h index cd64427de78..8a65699f404 100644 --- a/source/blender/editors/include/ED_keyframes_draw.h +++ b/source/blender/editors/include/ED_keyframes_draw.h @@ -42,6 +42,7 @@ struct bActionGroup; struct Object; struct ListBase; struct bGPDlayer; +struct MaskLayer; struct Scene; struct View2D; struct DLRBT_Tree; @@ -122,6 +123,8 @@ void draw_summary_channel(struct View2D *v2d, struct bAnimContext *ac, float ypo /* Grease Pencil Layer */ // XXX not restored void draw_gpl_channel(struct View2D *v2d, struct bDopeSheet *ads, struct bGPDlayer *gpl, float ypos); +/* Mask Layer */ +void draw_masklay_channel(struct View2D *v2d, struct bDopeSheet *ads, struct MaskLayer *masklay, float ypos); /* Keydata Generation --------------- */ /* F-Curve */ @@ -139,6 +142,9 @@ void summary_to_keylist(struct bAnimContext *ac, struct DLRBT_Tree *keys, struct /* Grease Pencil Layer */ // XXX not restored void gpl_to_keylist(struct bDopeSheet *ads, struct bGPDlayer *gpl, struct DLRBT_Tree *keys); +/* Mask */ +// XXX not restored +void mask_to_keylist(struct bDopeSheet *UNUSED(ads), struct MaskLayer *masklay, struct DLRBT_Tree *keys); /* ActKeyColumn API ---------------- */ /* Comparator callback used for ActKeyColumns and cframe float-value pointer */ diff --git a/source/blender/editors/include/ED_keyframes_edit.h b/source/blender/editors/include/ED_keyframes_edit.h index bdb70696742..3020fe6985a 100644 --- a/source/blender/editors/include/ED_keyframes_edit.h +++ b/source/blender/editors/include/ED_keyframes_edit.h @@ -43,9 +43,9 @@ struct Scene; /* --------- BezTriple Selection ------------- */ -#define BEZ_SEL(bezt) { (bezt)->f1 |= SELECT; (bezt)->f2 |= SELECT; (bezt)->f3 |= SELECT; } -#define BEZ_DESEL(bezt) { (bezt)->f1 &= ~SELECT; (bezt)->f2 &= ~SELECT; (bezt)->f3 &= ~SELECT; } -#define BEZ_INVSEL(bezt) { (bezt)->f1 ^= SELECT; (bezt)->f2 ^= SELECT; (bezt)->f3 ^= SELECT; } +#define BEZ_SEL(bezt) { (bezt)->f1 |= SELECT; (bezt)->f2 |= SELECT; (bezt)->f3 |= SELECT; } (void)0 +#define BEZ_DESEL(bezt) { (bezt)->f1 &= ~SELECT; (bezt)->f2 &= ~SELECT; (bezt)->f3 &= ~SELECT; } (void)0 +#define BEZ_INVSEL(bezt) { (bezt)->f1 ^= SELECT; (bezt)->f2 ^= SELECT; (bezt)->f3 ^= SELECT; } (void)0 /* --------- Tool Flags ------------ */ diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h index be5ad5b0c70..95fad17274e 100644 --- a/source/blender/editors/include/ED_keyframing.h +++ b/source/blender/editors/include/ED_keyframing.h @@ -75,7 +75,8 @@ struct bAction *verify_adt_action(struct ID *id, short add); /* Get (or add relevant data to be able to do so) F-Curve from the given Action. * This assumes that all the destinations are valid. */ -struct FCurve *verify_fcurve(struct bAction *act, const char group[], const char rna_path[], const int array_index, short add); +struct FCurve *verify_fcurve(struct bAction *act, const char group[], struct PointerRNA *ptr, + const char rna_path[], const int array_index, short add); /* -------- */ diff --git a/source/blender/editors/include/ED_mask.h b/source/blender/editors/include/ED_mask.h new file mode 100644 index 00000000000..773da04bc7b --- /dev/null +++ b/source/blender/editors/include/ED_mask.h @@ -0,0 +1,74 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file ED_mask.h + * \ingroup editors + */ + +#ifndef __ED_MASK_H__ +#define __ED_MASK_H__ + +struct wmKeyConfig; +struct MaskLayer; +struct MaskLayerShape; + +/* mask_editor.c */ +void ED_operatortypes_mask(void); +void ED_keymap_mask(struct wmKeyConfig *keyconf); +void ED_operatormacros_mask(void); + +/* mask_draw.c */ +void ED_mask_draw(const bContext *C, const char draw_flag, const char draw_type); + +/* mask_shapekey.c */ +void ED_mask_layer_shape_auto_key(struct MaskLayer *masklay, const int frame); +int ED_mask_layer_shape_auto_key_all(struct Mask *mask, const int frame); +int ED_mask_layer_shape_auto_key_select(struct Mask *mask, const int frame); + +/* ----------- Mask AnimEdit API ------------------ */ +short ED_masklayer_frames_looper(struct MaskLayer *masklay, struct Scene *scene, + short (*masklay_shape_cb)(struct MaskLayerShape *, struct Scene *)); +void ED_masklayer_make_cfra_list(struct MaskLayer *masklay, ListBase *elems, short onlysel); + +short ED_masklayer_frame_select_check(struct MaskLayer *masklay); +void ED_masklayer_frame_select_set(struct MaskLayer *masklay, short mode); +void ED_masklayer_frames_select_border(struct MaskLayer *masklay, float min, float max, short select_mode); +void ED_mask_select_frames(struct MaskLayer *masklay, short select_mode); +void ED_mask_select_frame(struct MaskLayer *masklay, int selx, short select_mode); + +void ED_masklayer_frames_delete(struct MaskLayer *masklay); +void ED_masklayer_frames_duplicate(struct MaskLayer *masklay); + +#if 0 +void free_gpcopybuf(void); +void copy_gpdata(void); +void paste_gpdata(void); + + void snap_masklayer_frames(struct MaskLayer *masklay, short mode); + void mirror_masklayer_frames(struct MaskLayer *masklay, short mode); +#endif + +#endif /* __ED_MASK_H__ */ diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 37ed8a6c7c8..9c10a270ef8 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -85,17 +85,14 @@ extern struct EnumPropertyItem prop_clear_parent_types[]; extern struct EnumPropertyItem prop_make_parent_types[]; int ED_object_parent_set(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, struct Object *par, int partype); -void ED_object_parent_clear(struct bContext *C, int type); +void ED_object_parent_clear(struct Object *ob, int type); +struct Base *ED_object_scene_link(struct Scene *scene, struct Object *ob); - -/* generic editmode keys like pet - * do_pet - * 0: No - * 1: Object - * 2: Edit - * 3: Edit with connected - * */ -void ED_object_generic_keymap(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap, int do_pet); +void ED_keymap_proportional_cycle(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap); +void ED_keymap_proportional_obmode(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap); +void ED_keymap_proportional_maskmode(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap); +void ED_keymap_proportional_editmode(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap, + const short do_connected); /* send your own notifier for select! */ void ED_base_object_select(struct Base *base, short mode); @@ -120,18 +117,19 @@ void ED_object_toggle_modes(struct bContext *C, int mode); void ED_object_exit_editmode(struct bContext *C, int flag); void ED_object_enter_editmode(struct bContext *C, int flag); -void ED_object_location_from_view(struct bContext *C, float *loc); -void ED_object_rotation_from_view(struct bContext *C, float *rot); -void ED_object_base_init_transform(struct bContext *C, struct Base *base, float *loc, float *rot); -float ED_object_new_primitive_matrix(struct bContext *C, struct Object *editob, float *loc, float *rot, float primmat[][4]); +void ED_object_location_from_view(struct bContext *C, float loc[3]); +void ED_object_rotation_from_view(struct bContext *C, float rot[3]); +void ED_object_base_init_transform(struct bContext *C, struct Base *base, const float loc[3], const float rot[3]); +float ED_object_new_primitive_matrix(struct bContext *C, struct Object *editob, + const float loc[3], const float rot[3], float primmat[][4]); void ED_object_add_generic_props(struct wmOperatorType *ot, int do_editmode); int ED_object_add_generic_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event); -int ED_object_add_generic_get_opts(struct bContext *C, struct wmOperator *op, - float *loc, float *rot, int *enter_editmode, unsigned int *layer, int *is_view_aligned); +int ED_object_add_generic_get_opts(struct bContext *C, struct wmOperator *op, float loc[3], float rot[3], + int *enter_editmode, unsigned int *layer, int *is_view_aligned); -struct Object *ED_object_add_type(struct bContext *C, int type, float *loc, - float *rot, int enter_editmode, unsigned int layer); +struct Object *ED_object_add_type(struct bContext *C, int type, const float loc[3], const float rot[3], + int enter_editmode, unsigned int layer); void ED_object_single_users(struct Main *bmain, struct Scene *scene, int full); void ED_object_single_user(struct Scene *scene, struct Object *ob); @@ -165,13 +163,17 @@ enum { MODIFIER_APPLY_SHAPE }; -struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, const char *name, int type); -int ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, struct ModifierData *md); +struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Main *bmain, struct Scene *scene, + struct Object *ob, const char *name, int type); +int ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain, struct Scene *scene, + struct Object *ob, struct ModifierData *md); void ED_object_modifier_clear(struct Main *bmain, struct Scene *scene, struct Object *ob); int ED_object_modifier_move_down(struct ReportList *reports, struct Object *ob, struct ModifierData *md); int ED_object_modifier_move_up(struct ReportList *reports, struct Object *ob, struct ModifierData *md); -int ED_object_modifier_convert(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, struct ModifierData *md); -int ED_object_modifier_apply(struct ReportList *reports, struct Scene *scene, struct Object *ob, struct ModifierData *md, int mode); +int ED_object_modifier_convert(struct ReportList *reports, struct Main *bmain, struct Scene *scene, + struct Object *ob, struct ModifierData *md); +int ED_object_modifier_apply(struct ReportList *reports, struct Scene *scene, + struct Object *ob, struct ModifierData *md, int mode); int ED_object_modifier_copy(struct ReportList *reports, struct Object *ob, struct ModifierData *md); #ifdef __cplusplus diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index 464f2db30a2..4faf82eec36 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -170,6 +170,7 @@ int ED_operator_editmball(struct bContext *C); int ED_operator_uvedit(struct bContext *C); int ED_operator_uvmap(struct bContext *C); int ED_operator_posemode(struct bContext *C); +int ED_operator_mask(struct bContext *C); /* default keymaps, bitflags */ diff --git a/source/blender/editors/include/ED_sequencer.h b/source/blender/editors/include/ED_sequencer.h index f20ebe81189..cea567254de 100644 --- a/source/blender/editors/include/ED_sequencer.h +++ b/source/blender/editors/include/ED_sequencer.h @@ -27,6 +27,10 @@ #ifndef __ED_SEQUENCER_H__ #define __ED_SEQUENCER_H__ -#define SEQ_ZOOM_FAC(szoom) ((szoom) > 0.0f) ? (szoom) : ((szoom) == 0.0f) ? (1.0f) : (-1.0f / (szoom)) +struct Scene; +struct Sequence; + +void ED_sequencer_select_sequence_single(struct Scene *scene, struct Sequence *seq, int deselect_all); +void ED_sequencer_deselect_all(struct Scene *scene); #endif /* __ED_SEQUENCER_H__ */ diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index 3bef1f56655..608df8dd9b3 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -71,6 +71,7 @@ enum { TFM_BONESIZE, TFM_BONE_ENVELOPE, TFM_CURVE_SHRINKFATTEN, + TFM_MASK_SHRINKFATTEN, TFM_BONE_ROLL, TFM_TIME_TRANSLATE, TFM_TIME_SLIDE, @@ -96,12 +97,13 @@ enum { #define CTX_BMESH 64 #define CTX_NDOF 128 #define CTX_MOVIECLIP 256 +#define CTX_MASK 512 /* Standalone call to get the transformation center corresponding to the current situation * returns 1 if successful, 0 otherwise (usually means there's no selection) * (if 0 is returns, *vec is unmodified) * */ -int calculateTransformCenter(struct bContext *C, int centerMode, float *cent3d, int *cent2d); +int calculateTransformCenter(struct bContext *C, int centerMode, float cent3d[3], int cent2d[2]); struct TransInfo; struct ScrArea; @@ -166,8 +168,7 @@ typedef struct DepthPeel { struct ListBase; -typedef enum SnapMode -{ +typedef enum SnapMode { SNAP_ALL = 0, SNAP_NOT_SELECTED = 1, SNAP_NOT_OBEDIT = 2 diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h index f9f59c9bdd9..34892fb3c27 100644 --- a/source/blender/editors/include/ED_view3d.h +++ b/source/blender/editors/include/ED_view3d.h @@ -282,7 +282,7 @@ int ED_view3d_scene_layer_set(int lay, const int *values, int *active); int ED_view3d_context_activate(struct bContext *C); void ED_view3d_draw_offscreen(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, - int winx, int winy, float viewmat[][4], float winmat[][4], int draw_background); + int winx, int winy, float viewmat[][4], float winmat[][4], int do_bgpic); struct ImBuf *ED_view3d_draw_offscreen_imbuf(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, int sizex, int sizey, unsigned int flag, int draw_background, char err_out[256]); struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(struct Scene *scene, struct Object *camera, int width, int height, unsigned int flag, int drawtype, int draw_background, char err_out[256]); @@ -310,6 +310,8 @@ struct BGpic *ED_view3D_background_image_new(struct View3D *v3d); void ED_view3D_background_image_remove(struct View3D *v3d, struct BGpic *bgpic); void ED_view3D_background_image_clear(struct View3D *v3d); +float ED_view3d_grid_scale(struct Scene *scene, struct View3D *v3d, const char **grid_unit); + /* view matrix properties utilities */ /* unused */ #if 0 diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index b82a0c5e480..bb6f9fad771 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -195,7 +195,8 @@ typedef struct uiLayout uiLayout; /*#define FUN 192*/ /*UNUSED*/ #define BIT 256 -#define BUTPOIN (128 + 64 + 32) +/* button reqyires a pointer */ +#define BUTPOIN (FLO | SHO | CHA) #define BUT (1 << 9) #define ROW (2 << 9) diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h index 2d409879ba3..51df30d6c28 100644 --- a/source/blender/editors/include/UI_resources.h +++ b/source/blender/editors/include/UI_resources.h @@ -141,6 +141,7 @@ enum { TH_NODE_OPERATOR, TH_NODE_CONVERTOR, TH_NODE_GROUP, + TH_NODE_FRAME, TH_CONSOLE_OUTPUT, TH_CONSOLE_INPUT, @@ -150,11 +151,11 @@ enum { TH_SEQ_MOVIE, TH_SEQ_MOVIECLIP, + TH_SEQ_MASK, TH_SEQ_IMAGE, TH_SEQ_SCENE, TH_SEQ_AUDIO, TH_SEQ_EFFECT, - TH_SEQ_PLUGIN, TH_SEQ_TRANSITION, TH_SEQ_META, TH_SEQ_PREVIEW, @@ -200,7 +201,20 @@ enum { TH_MATCH, /* highlight color for search matches */ TH_SELECT_HIGHLIGHT, /* highlight color for selected outliner item */ - TH_SKIN_ROOT + TH_SKIN_ROOT, + + TH_ANIM_ACTIVE, /* active action */ + TH_ANIM_INACTIVE, /* no active action */ + + TH_NLA_TWEAK, /* 'tweaking' track in NLA */ + TH_NLA_TWEAK_DUPLI, /* error/warning flag for other strips referencing dupli strip */ + + TH_NLA_TRANSITION, + TH_NLA_TRANSITION_SEL, + TH_NLA_META, + TH_NLA_META_SEL, + TH_NLA_SOUND, + TH_NLA_SOUND_SEL }; /* XXX WARNING: previous is saved in file, so do not change order! */ @@ -239,6 +253,9 @@ void UI_GetThemeColor3fv(int colorid, float col[3]); void UI_GetThemeColorShade3fv(int colorid, int offset, float col[3]); void UI_GetThemeColorShade3ubv(int colorid, int offset, unsigned char col[3]); +// get four color values, scaled to 0.0-1.0 range +void UI_GetThemeColor4fv(int colorid, float col[4]); + // get the 3 or 4 byte values void UI_GetThemeColor3ubv(int colorid, unsigned char col[3]); void UI_GetThemeColor4ubv(int colorid, unsigned char col[4]); diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index c0cd17d16d2..d26c8cefdf0 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -81,7 +81,7 @@ /* avoid unneeded calls to ui_get_but_val */ #define UI_BUT_VALUE_UNSET DBL_MAX -#define UI_GET_BUT_VALUE_INIT(_but, _value) if (_value == DBL_MAX) { (_value) = ui_get_but_val(_but); } +#define UI_GET_BUT_VALUE_INIT(_but, _value) if (_value == DBL_MAX) { (_value) = ui_get_but_val(_but); } (void)0 /* * a full doc with API notes can be found in bf-blender/trunk/blender/doc/guides/interface_API.txt @@ -660,8 +660,8 @@ static int ui_but_update_from_old_block(const bContext *C, uiBlock *block, uiBut /* typically the same pointers, but not on undo/redo */ /* XXX some menu buttons store button itself in but->poin. Ugly */ if (oldbut->poin != (char *)oldbut) { - SWAP(char *, oldbut->poin, but->poin) - SWAP(void *, oldbut->func_argN, but->func_argN) + SWAP(char *, oldbut->poin, but->poin); + SWAP(void *, oldbut->func_argN, but->func_argN); } /* copy hardmin for list rows to prevent 'sticking' highlight to mouse position @@ -1090,7 +1090,7 @@ static void ui_is_but_sel(uiBut *but, double *value) if (but->bit) { int lvalue; - UI_GET_BUT_VALUE_INIT(but, *value) + UI_GET_BUT_VALUE_INIT(but, *value); lvalue = (int)*value; if (BTST(lvalue, (but->bitnr)) ) is_push = is_true; else is_push = !is_true; @@ -1111,18 +1111,18 @@ static void ui_is_but_sel(uiBut *but, double *value) case BUT_TOGDUAL: case ICONTOG: case OPTION: - UI_GET_BUT_VALUE_INIT(but, *value) + UI_GET_BUT_VALUE_INIT(but, *value); if (*value != (double)but->hardmin) is_push = 1; break; case ICONTOGN: case TOGN: case OPTIONN: - UI_GET_BUT_VALUE_INIT(but, *value) + UI_GET_BUT_VALUE_INIT(but, *value); if (*value == 0.0) is_push = 1; break; case ROW: case LISTROW: - UI_GET_BUT_VALUE_INIT(but, *value) + UI_GET_BUT_VALUE_INIT(but, *value); /* support for rna enum buts */ if (but->rnaprop && (RNA_property_flag(but->rnaprop) & PROP_ENUM_FLAG)) { if ((int)*value & (int)but->hardmax) is_push = 1; @@ -1437,15 +1437,15 @@ double ui_get_but_val(uiBut *but) } } else if (but->type == HSVSLI) { - float h, s, v, *fp; + float *fp, hsv[3]; fp = (but->editvec) ? but->editvec : (float *)but->poin; - rgb_to_hsv(fp[0], fp[1], fp[2], &h, &s, &v); + rgb_to_hsv_v(fp, hsv); switch (but->str[0]) { - case 'H': value = h; break; - case 'S': value = s; break; - case 'V': value = v; break; + case 'H': value = hsv[0]; break; + case 'S': value = hsv[1]; break; + case 'V': value = hsv[2]; break; } } else if (but->pointype == CHA) { @@ -1513,18 +1513,18 @@ void ui_set_but_val(uiBut *but, double value) } else if (but->pointype == 0) ; else if (but->type == HSVSLI) { - float h, s, v, *fp; + float *fp, hsv[3]; fp = (but->editvec) ? but->editvec : (float *)but->poin; - rgb_to_hsv(fp[0], fp[1], fp[2], &h, &s, &v); + rgb_to_hsv_v(fp, hsv); switch (but->str[0]) { - case 'H': h = value; break; - case 'S': s = value; break; - case 'V': v = value; break; + case 'H': hsv[0] = value; break; + case 'S': hsv[1] = value; break; + case 'V': hsv[2] = value; break; } - hsv_to_rgb(h, s, v, fp, fp + 1, fp + 2); + hsv_to_rgb_v(hsv, fp); } else { @@ -2171,7 +2171,7 @@ void ui_check_but(uiBut *but) /* only update soft range while not editing */ if (but->rnaprop && !(but->editval || but->editstr || but->editvec)) { - UI_GET_BUT_VALUE_INIT(but, value) + UI_GET_BUT_VALUE_INIT(but, value); ui_set_but_soft_range(but, value); } @@ -2182,7 +2182,7 @@ void ui_check_but(uiBut *but) case SCROLL: case NUMSLI: case HSVSLI: - UI_GET_BUT_VALUE_INIT(but, value) + UI_GET_BUT_VALUE_INIT(but, value); if (value < (double)but->hardmin) ui_set_but_val(but, but->hardmin); else if (value > (double)but->hardmax) ui_set_but_val(but, but->hardmax); break; @@ -2190,7 +2190,7 @@ void ui_check_but(uiBut *but) case NUMABS: { double value_abs; - UI_GET_BUT_VALUE_INIT(but, value) + UI_GET_BUT_VALUE_INIT(but, value); value_abs = fabs(value); if (value_abs < (double)but->hardmin) ui_set_but_val(but, but->hardmin); else if (value_abs > (double)but->hardmax) ui_set_but_val(but, but->hardmax); @@ -2206,14 +2206,14 @@ void ui_check_but(uiBut *but) case ICONROW: if (!but->rnaprop || (RNA_property_flag(but->rnaprop) & PROP_ICONS_CONSECUTIVE)) { - UI_GET_BUT_VALUE_INIT(but, value) + UI_GET_BUT_VALUE_INIT(but, value); but->iconadd = (int)value - (int)(but->hardmin); } break; case ICONTEXTROW: if (!but->rnaprop || (RNA_property_flag(but->rnaprop) & PROP_ICONS_CONSECUTIVE)) { - UI_GET_BUT_VALUE_INIT(but, value) + UI_GET_BUT_VALUE_INIT(but, value); but->iconadd = (int)value - (int)(but->hardmin); } break; @@ -2230,7 +2230,7 @@ void ui_check_but(uiBut *but) case ICONTEXTROW: if (but->x2 - but->x1 > 24) { - UI_GET_BUT_VALUE_INIT(but, value) + UI_GET_BUT_VALUE_INIT(but, value); ui_set_name_menu(but, (int)value); } break; @@ -2240,7 +2240,7 @@ void ui_check_but(uiBut *but) case HSVSLI: case NUMABS: - UI_GET_BUT_VALUE_INIT(but, value) + UI_GET_BUT_VALUE_INIT(but, value); if (ui_is_but_float(but)) { if (value == (double) FLT_MAX) BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%sinf", but->str); @@ -2271,7 +2271,7 @@ void ui_check_but(uiBut *but) case LABEL: if (ui_is_but_float(but)) { int prec; - UI_GET_BUT_VALUE_INIT(but, value) + UI_GET_BUT_VALUE_INIT(but, value); prec = ui_but_float_precision(but, value); BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s%.*f", but->str, prec, value); } @@ -2299,7 +2299,7 @@ void ui_check_but(uiBut *but) strcat(but->drawstr, "Press a key"); } else { - UI_GET_BUT_VALUE_INIT(but, value) + UI_GET_BUT_VALUE_INIT(but, value); strcat(but->drawstr, WM_key_event_string((short)value)); } break; diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c index e535990e7e9..3c802020747 100644 --- a/source/blender/editors/interface/interface_draw.c +++ b/source/blender/editors/interface/interface_draw.c @@ -43,6 +43,7 @@ #include "BKE_colortools.h" #include "BKE_texture.h" +#include "BKE_tracking.h" #include "IMB_imbuf.h" @@ -658,37 +659,59 @@ static void draw_scope_end(rctf *rect, GLint *scissor) } static void histogram_draw_one(float r, float g, float b, float alpha, - float x, float y, float w, float h, float *data, int res) + float x, float y, float w, float h, float *data, int res, const short is_line) { int i; - /* under the curve */ - glBlendFunc(GL_SRC_ALPHA, GL_ONE); - glColor4f(r, g, b, alpha); - - glShadeModel(GL_FLAT); - glBegin(GL_QUAD_STRIP); - glVertex2f(x, y); - glVertex2f(x, y + (data[0] * h)); - for (i = 1; i < res; i++) { - float x2 = x + i * (w / (float)res); - glVertex2f(x2, y + (data[i] * h)); - glVertex2f(x2, y); + if (is_line) { + + glLineWidth(1.5); + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + glColor4f(r, g, b, alpha); + + /* curve outline */ + + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + glEnable(GL_LINE_SMOOTH); + glBegin(GL_LINE_STRIP); + for (i = 0; i < res; i++) { + float x2 = x + i * (w / (float)res); + glVertex2f(x2, y + (data[i] * h)); + } + glEnd(); + glDisable(GL_LINE_SMOOTH); + + glLineWidth(1.0); } - glEnd(); - - /* curve outline */ - glColor4f(0.f, 0.f, 0.f, 0.25f); - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_LINE_SMOOTH); - glBegin(GL_LINE_STRIP); - for (i = 0; i < res; i++) { - float x2 = x + i * (w / (float)res); - glVertex2f(x2, y + (data[i] * h)); + else { + /* under the curve */ + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + glColor4f(r, g, b, alpha); + + glShadeModel(GL_FLAT); + glBegin(GL_QUAD_STRIP); + glVertex2f(x, y); + glVertex2f(x, y + (data[0] * h)); + for (i = 1; i < res; i++) { + float x2 = x + i * (w / (float)res); + glVertex2f(x2, y + (data[i] * h)); + glVertex2f(x2, y); + } + glEnd(); + + /* curve outline */ + glColor4f(0.f, 0.f, 0.f, 0.25f); + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_LINE_SMOOTH); + glBegin(GL_LINE_STRIP); + for (i = 0; i < res; i++) { + float x2 = x + i * (w / (float)res); + glVertex2f(x2, y + (data[i] * h)); + } + glEnd(); + glDisable(GL_LINE_SMOOTH); } - glEnd(); - glDisable(GL_LINE_SMOOTH); } void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol), rcti *recti) @@ -698,6 +721,7 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol) rctf rect; int i; float w, h; + const short is_line = (hist->flag & HISTO_FLAG_LINE) != 0; //float alpha; GLint scissor[4]; @@ -730,15 +754,19 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol) fdrawline(rect.xmin + (i / 4.f) * w, rect.ymin, rect.xmin + (i / 4.f) * w, rect.ymax); } - if (hist->mode == HISTO_MODE_LUMA) - histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_luma, res); + if (hist->mode == HISTO_MODE_LUMA) { + histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_luma, res, is_line); + } + else if (hist->mode == HISTO_MODE_ALPHA) { + histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_a, res, is_line); + } else { if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_R) - histogram_draw_one(1.0, 0.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_r, res); + histogram_draw_one(1.0, 0.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_r, res, is_line); if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_G) - histogram_draw_one(0.0, 1.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_g, res); + histogram_draw_one(0.0, 1.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_g, res, is_line); if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_B) - histogram_draw_one(0.0, 0.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_b, res); + histogram_draw_one(0.0, 0.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_b, res, is_line); } /* outline, scale gripper */ @@ -1480,36 +1508,10 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect fdrawbox(rect->xmin, rect->ymin, rect->xmax, rect->ymax); } -static ImBuf *scale_trackpreview_ibuf(ImBuf *ibuf, float track_pos[2], int width, float height, int margin) -{ - ImBuf *scaleibuf; - const float scalex = ((float)ibuf->x - 2 * margin) / width; - const float scaley = ((float)ibuf->y - 2 * margin) / height; - /* NOTE: 1.0f = 0.5f for integer coordinate coorrection (center of pixel vs. left bottom corner of bixel) - * and 0.5f for centering image in preview (cross is draving at exact center of widget so image - * should be shifted by half of pixel for correct centering) - sergey */ - float off_x = (int)track_pos[0] - track_pos[0] + 1.0f; - float off_y = (int)track_pos[1] - track_pos[1] + 1.0f; - int x, y; - - scaleibuf = IMB_allocImBuf(width, height, 32, IB_rect); - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - float src_x = scalex * (x) + margin - off_x; - float src_y = scaley * (y) + margin - off_y; - - bicubic_interpolation(ibuf, scaleibuf, src_x, src_y, x, y); - } - } - - return scaleibuf; -} - void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol), rcti *recti) { rctf rect; - int ok = 0; + int ok = 0, width, height; GLint scissor[4]; MovieClipScopes *scopes = (MovieClipScopes *)but->poin; @@ -1518,6 +1520,9 @@ void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wc rect.ymin = (float)recti->ymin + SCOPE_RESIZE_PAD + 2; rect.ymax = (float)recti->ymax - 1; + width = rect.xmax - rect.xmin + 1; + height = rect.ymax - rect.ymin; + glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -1535,40 +1540,60 @@ void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wc ok = 1; } - else if (scopes->track_preview) { - /* additional margin around image */ - /* NOTE: should be kept in sync with value from BKE_movieclip_update_scopes */ - const int margin = 3; - float zoomx, zoomy, track_pos[2], off_x, off_y; - int a, width, height; + else if ((scopes->track_search) && + ((!scopes->track_preview) || + (scopes->track_preview->x != width || scopes->track_preview->y != height))) + { + ImBuf *tmpibuf; + + if (scopes->track_preview) + IMB_freeImBuf(scopes->track_preview); + + tmpibuf = BKE_tracking_sample_pattern(scopes->frame_width, scopes->frame_height, + scopes->track_search, scopes->track, + &scopes->undist_marker, scopes->use_track_mask, + width, height, scopes->track_pos); + + if (tmpibuf->rect_float) + IMB_rect_from_float(tmpibuf); + + // XXX: for debug only + // tmpibuf->ftype = PNG; + // IMB_saveiff(tmpibuf, "sample.png", IB_rect); + + if (tmpibuf->rect) + scopes->track_preview = tmpibuf; + else + IMB_freeImBuf(tmpibuf); + } + + if (!ok && scopes->track_preview) { + float track_pos[2]; + int a; ImBuf *drawibuf; glPushMatrix(); - track_pos[0] = scopes->track_pos[0] - margin; - track_pos[1] = scopes->track_pos[1] - margin; + track_pos[0] = scopes->track_pos[0]; + track_pos[1] = scopes->track_pos[1]; /* draw content of pattern area */ glScissor(ar->winrct.xmin + rect.xmin, ar->winrct.ymin + rect.ymin, scissor[2], scissor[3]); - width = rect.xmax - rect.xmin + 1; - height = rect.ymax - rect.ymin; - if (width > 0 && height > 0) { - zoomx = (float)width / (scopes->track_preview->x - 2 * margin); - zoomy = (float)height / (scopes->track_preview->y - 2 * margin); - - off_x = ((int)track_pos[0] - track_pos[0] + 0.5f) * zoomx; - off_y = ((int)track_pos[1] - track_pos[1] + 0.5f) * zoomy; + drawibuf = scopes->track_preview; - drawibuf = scale_trackpreview_ibuf(scopes->track_preview, track_pos, width, height, margin); + if (scopes->use_track_mask) { + glColor4f(0.0f, 0.0f, 0.0f, 0.3f); + uiSetRoundBox(15); + uiDrawBox(GL_POLYGON, rect.xmin - 1, rect.ymin, rect.xmax + 1, rect.ymax + 1, 3.0f); + } glaDrawPixelsSafe(rect.xmin, rect.ymin + 1, drawibuf->x, drawibuf->y, drawibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, drawibuf->rect); - IMB_freeImBuf(drawibuf); /* draw cross for pizel position */ - glTranslatef(off_x + rect.xmin + track_pos[0] * zoomx, off_y + rect.ymin + track_pos[1] * zoomy, 0.f); + glTranslatef(rect.xmin + track_pos[0], rect.ymin + track_pos[1], 0.f); glScissor(ar->winrct.xmin + rect.xmin, ar->winrct.ymin + rect.ymin, rect.xmax - rect.xmin, @@ -1663,12 +1688,12 @@ void uiDrawBoxShadow(unsigned char alpha, float minx, float miny, float maxx, fl } -void ui_dropshadow(rctf *rct, float radius, float aspect, int UNUSED(select)) +void ui_dropshadow(rctf *rct, float radius, float aspect, float alpha, int UNUSED(select)) { int i; float rad; float a; - char alpha = 2; + float dalpha = alpha * 2.0f / 255.0f, calpha; glEnable(GL_BLEND); @@ -1688,10 +1713,11 @@ void ui_dropshadow(rctf *rct, float radius, float aspect, int UNUSED(select)) a = i * aspect; } + calpha = dalpha; for (; i--; a -= aspect) { /* alpha ranges from 2 to 20 or so */ - glColor4ub(0, 0, 0, alpha); - alpha += 2; + glColor4f(0.0f, 0.0f, 0.0f, calpha); + calpha += dalpha; uiDrawBox(GL_POLYGON, rct->xmin - a, rct->ymin - a, rct->xmax + a, rct->ymax - 10.0f + a, rad + a); } diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 58dfabd99ce..a8a7a55c653 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -2953,14 +2953,14 @@ static int ui_do_but_BLOCK(bContext *C, uiBut *but, uiHandleButtonData *data, wm float col[3]; ui_get_but_vectorf(but, col); - rgb_to_hsv_compat(col[0], col[1], col[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_compat_v(col, hsv); if (event->type == WHEELDOWNMOUSE) hsv[2] = CLAMPIS(hsv[2] - 0.05f, 0.0f, 1.0f); else hsv[2] = CLAMPIS(hsv[2] + 0.05f, 0.0f, 1.0f); - hsv_to_rgb(hsv[0], hsv[1], hsv[2], data->vec, data->vec + 1, data->vec + 2); + hsv_to_rgb_v(hsv, data->vec); ui_set_but_vectorf(but, data->vec); button_activate_state(C, but, BUTTON_STATE_EXIT); @@ -3106,7 +3106,7 @@ static int ui_numedit_but_HSVCUBE(uiBut *but, uiHandleButtonData *data, int mx, ui_get_but_vectorf(but, rgb); - rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_compat_v(rgb, hsv); /* relative position within box */ x = ((float)mx - but->x1) / (but->x2 - but->x1); @@ -3152,7 +3152,7 @@ static int ui_numedit_but_HSVCUBE(uiBut *but, uiHandleButtonData *data, int mx, assert(!"invalid hsv type"); } - hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb + 1, rgb + 2); + hsv_to_rgb_v(hsv, rgb); copy_v3_v3(data->vec, rgb); data->draglastx = mx; @@ -3175,7 +3175,7 @@ static void ui_ndofedit_but_HSVCUBE(uiBut *but, uiHandleButtonData *data, wmNDOF } ui_get_but_vectorf(but, rgb); - rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_compat_v(rgb, hsv); switch ((int)but->a1) { case UI_GRAD_SV: @@ -3213,7 +3213,7 @@ static void ui_ndofedit_but_HSVCUBE(uiBut *but, uiHandleButtonData *data, wmNDOF assert(!"invalid hsv type"); } - hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb + 1, rgb + 2); + hsv_to_rgb_v(hsv, rgb); copy_v3_v3(data->vec, rgb); ui_set_but_vectorf(but, data->vec); } @@ -3265,12 +3265,15 @@ static int ui_do_but_HSVCUBE(bContext *C, uiBlock *block, uiBut *but, uiHandleBu def = MEM_callocN(sizeof(float) * len, "reset_defaults - float"); RNA_property_float_get_default_array(&but->rnapoin, but->rnaprop, def); - rgb_to_hsv(def[0], def[1], def[2], def_hsv, def_hsv + 1, def_hsv + 2); + rgb_to_hsv_v(def, def_hsv); ui_get_but_vectorf(but, rgb); - rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_compat_v(rgb, hsv); + + def_hsv[0] = hsv[0]; + def_hsv[1] = hsv[1]; - hsv_to_rgb(hsv[0], hsv[1], def_hsv[2], rgb, rgb + 1, rgb + 2); + hsv_to_rgb_v(def_hsv, rgb); ui_set_but_vectorf(but, rgb); RNA_property_update(C, &but->rnapoin, but->rnaprop); @@ -3314,7 +3317,7 @@ static int ui_numedit_but_HSVCIRCLE(uiBut *but, uiHandleButtonData *data, int mx ui_get_but_vectorf(but, rgb); copy_v3_v3(hsv, ui_block_hsv_get(but->block)); - rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_compat_v(rgb, hsv); /* exception, when using color wheel in 'locked' value state: * allow choosing a hue for black values, by giving a tiny increment */ @@ -3334,7 +3337,7 @@ static int ui_numedit_but_HSVCIRCLE(uiBut *but, uiHandleButtonData *data, int mx if (but->flag & UI_BUT_COLOR_CUBIC) hsv[1] = 1.0f - sqrt3f(1.0f - hsv[1]); - hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb + 1, rgb + 2); + hsv_to_rgb_v(hsv, rgb); if ((but->flag & UI_BUT_VEC_SIZE_LOCK) && (rgb[0] || rgb[1] || rgb[2])) { normalize_v3(rgb); @@ -3357,7 +3360,7 @@ static void ui_ndofedit_but_HSVCIRCLE(uiBut *but, uiHandleButtonData *data, wmND float sensitivity = (shift ? 0.15f : 0.3f) * ndof->dt; ui_get_but_vectorf(but, rgb); - rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_compat_v(rgb, hsv); /* Convert current colour on hue/sat disc to circular coordinates phi, r */ phi = fmodf(hsv[0] + 0.25f, 1.0f) * -2.0f * (float)M_PI; @@ -3391,7 +3394,7 @@ static void ui_ndofedit_but_HSVCIRCLE(uiBut *but, uiHandleButtonData *data, wmND if (hsv[2] == 0.0f) hsv[2] = 0.0001f; } - hsv_to_rgb(hsv[0], hsv[1], hsv[2], data->vec, data->vec + 1, data->vec + 2); + hsv_to_rgb_v(hsv, data->vec); if ((but->flag & UI_BUT_VEC_SIZE_LOCK) && (data->vec[0] || data->vec[1] || data->vec[2])) { normalize_v3(data->vec); @@ -3447,12 +3450,15 @@ static int ui_do_but_HSVCIRCLE(bContext *C, uiBlock *block, uiBut *but, uiHandle def = MEM_callocN(sizeof(float) * len, "reset_defaults - float"); RNA_property_float_get_default_array(&but->rnapoin, but->rnaprop, def); - rgb_to_hsv(def[0], def[1], def[2], def_hsv, def_hsv + 1, def_hsv + 2); + rgb_to_hsv_v(def, def_hsv); ui_get_but_vectorf(but, rgb); - rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_compat_v(rgb, hsv); - hsv_to_rgb(hsv[0], def_hsv[1], hsv[2], rgb, rgb + 1, rgb + 2); + def_hsv[0] = hsv[0]; + def_hsv[2] = hsv[2]; + + hsv_to_rgb_v(def_hsv, rgb); ui_set_but_vectorf(but, rgb); RNA_property_update(C, &but->rnapoin, but->rnaprop); @@ -3813,22 +3819,21 @@ static int ui_numedit_but_HISTOGRAM(uiBut *but, uiHandleButtonData *data, int mx Histogram *hist = (Histogram *)but->poin; /* rcti rect; */ int changed = 1; - float /* dx, */ dy, yfac = 1.f; /* UNUSED */ + float /* dx, */ dy; /* UNUSED */ /* rect.xmin = but->x1; rect.xmax = but->x2; */ /* rect.ymin = but->y1; rect.ymax = but->y2; */ /* dx = mx - data->draglastx; */ /* UNUSED */ dy = my - data->draglasty; - - + if (in_scope_resize_zone(but, data->dragstartx, data->dragstarty)) { /* resize histogram widget itself */ hist->height = (but->y2 - but->y1) + (data->dragstarty - my); } else { /* scale histogram values */ - yfac = MIN2(powf(hist->ymax, 2.f), 1.f) * 0.5f; + const float yfac = MIN2(powf(hist->ymax, 2.f), 1.f) * 0.5f; hist->ymax += dy * yfac; CLAMP(hist->ymax, 1.f, 100.f); @@ -4196,9 +4201,9 @@ static int ui_numedit_but_TRACKPREVIEW(bContext *C, uiBut *but, uiHandleButtonDa scopes->track_preview_height = (but->y2 - but->y1) + (data->dragstarty - my); } else { - if (scopes->marker) { + if (!scopes->track_locked) { if (scopes->marker->framenr != scopes->framenr) - scopes->marker = BKE_tracking_ensure_marker(scopes->track, scopes->framenr); + scopes->marker = BKE_tracking_marker_ensure(scopes->track, scopes->framenr); scopes->marker->flag &= ~(MARKER_DISABLED | MARKER_TRACKED); scopes->marker->pos[0] += -dx * scopes->slide_scale[0] / (but->block->maxx - but->block->minx); @@ -4591,9 +4596,14 @@ static int ui_but_menu(bContext *C, uiBut *but) BLI_snprintf(buf, sizeof(buf), "%s.%s", RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop)); + WM_operator_properties_create(&ptr_props, "WM_OT_doc_view_manual"); + RNA_string_set(&ptr_props, "doc_id", buf); + uiItemFullO(layout, "WM_OT_doc_view_manual", CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Online Manual"), + ICON_NONE, ptr_props.data, WM_OP_EXEC_DEFAULT, 0); + WM_operator_properties_create(&ptr_props, "WM_OT_doc_view"); RNA_string_set(&ptr_props, "doc_id", buf); - uiItemFullO(layout, "WM_OT_doc_view", CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Python Documentation"), + uiItemFullO(layout, "WM_OT_doc_view", CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Online Python Reference"), ICON_NONE, ptr_props.data, WM_OP_EXEC_DEFAULT, 0); /* XXX inactive option, not for public! */ @@ -4608,18 +4618,26 @@ static int ui_but_menu(bContext *C, uiBut *but) else if (but->optype) { WM_operator_py_idname(buf, but->optype->idname); - WM_operator_properties_create(&ptr_props, "WM_OT_doc_view"); + + WM_operator_properties_create(&ptr_props, "WM_OT_doc_view_manual"); RNA_string_set(&ptr_props, "doc_id", buf); - uiItemFullO(layout, "WM_OT_doc_view", CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Python Documentation"), + uiItemFullO(layout, "WM_OT_doc_view_manual", CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Online Manual"), ICON_NONE, ptr_props.data, WM_OP_EXEC_DEFAULT, 0); + WM_operator_properties_create(&ptr_props, "WM_OT_doc_view"); + RNA_string_set(&ptr_props, "doc_id", buf); + uiItemFullO(layout, "WM_OT_doc_view", CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Online Python Reference"), + ICON_NONE, ptr_props.data, WM_OP_EXEC_DEFAULT, 0); + /* XXX inactive option, not for public! */ +#if 0 WM_operator_properties_create(&ptr_props, "WM_OT_doc_edit"); RNA_string_set(&ptr_props, "doc_id", buf); RNA_string_set(&ptr_props, "doc_new", but->optype->description); uiItemFullO(layout, "WM_OT_doc_edit", CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Submit Description"), ICON_NONE, ptr_props.data, WM_OP_INVOKE_DEFAULT, 0); +#endif } } @@ -6546,6 +6564,18 @@ static int ui_handler_popup(bContext *C, wmEvent *event, void *userdata) { uiPopupBlockHandle *menu = userdata; + /* we block all events, this is modal interaction, except for drop events which is described below */ + int retval = WM_UI_HANDLER_BREAK; + + if (event->type == EVT_DROP) { + /* if we're handling drop event we'll want it to be handled by popup callee as well, + * so it'll be possible to perform such operations as opening .blend files by dropping + * them into blender even if there's opened popup like splash screen (sergey) + */ + + retval = WM_UI_HANDLER_CONTINUE; + } + ui_handle_menus_recursive(C, event, menu); /* free if done, does not free handle itself */ @@ -6574,17 +6604,7 @@ static int ui_handler_popup(bContext *C, wmEvent *event, void *userdata) /* delayed apply callbacks */ ui_apply_but_funcs_after(C); - if (event->type == EVT_DROP) { - /* if we're handling drop event we'll want it to be handled by popup callee as well, - * so it'll be possible to perform such operations as opening .blend files by dropping - * them into blender even if there's opened popup like splash screen (sergey) - */ - - return WM_UI_HANDLER_CONTINUE; - } - - /* we block all events, this is modal interaction, except for drop events which is described above */ - return WM_UI_HANDLER_BREAK; + return retval; } static void ui_handler_remove_popup(bContext *C, void *userdata) diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index 5d12bdf71da..9af3ff3bdd8 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -445,7 +445,7 @@ extern int ui_handler_panel_region(struct bContext *C, struct wmEvent *event); extern void ui_draw_aligned_panel(struct uiStyle *style, uiBlock *block, rcti *rect); /* interface_draw.c */ -extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select); +extern void ui_dropshadow(rctf *rct, float radius, float aspect, float alpha, int select); void ui_draw_gradient(rcti *rect, const float hsv[3], int type, float alpha); diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c index dfd2d0cc4d0..1c3b642b63b 100644 --- a/source/blender/editors/interface/interface_ops.c +++ b/source/blender/editors/interface/interface_ops.c @@ -40,6 +40,7 @@ #include "BLI_blenlib.h" #include "BLI_math_color.h" +#include "BLI_math_vector.h" #include "BLI_utildefines.h" #include "BKE_context.h" @@ -69,22 +70,42 @@ /* ********************************************************** */ typedef struct Eyedropper { + short do_color_management; + PointerRNA ptr; PropertyRNA *prop; int index; + + int accum_start; /* has mouse been presed */ + float accum_col[3]; + int accum_tot; } Eyedropper; static int eyedropper_init(bContext *C, wmOperator *op) { + Scene *scene = CTX_data_scene(C); + const int color_manage = scene->r.color_mgt_flag & R_COLOR_MANAGEMENT; + Eyedropper *eye; op->customdata = eye = MEM_callocN(sizeof(Eyedropper), "Eyedropper"); uiContextActiveProperty(C, &eye->ptr, &eye->prop, &eye->index); - - return (eye->ptr.data && eye->prop && RNA_property_editable(&eye->ptr, eye->prop)); + + if ((eye->ptr.data == NULL) || + (eye->prop == NULL) || + (RNA_property_editable(&eye->ptr, eye->prop) == FALSE) || + (RNA_property_array_length(&eye->ptr, eye->prop) < 3) || + (RNA_property_type(eye->prop) != PROP_FLOAT)) + { + return FALSE; + } + + eye->do_color_management = (color_manage && RNA_property_subtype(eye->prop) == PROP_COLOR); + + return TRUE; } - + static void eyedropper_exit(bContext *C, wmOperator *op) { WM_cursor_restore(CTX_wm_window(C)); @@ -100,29 +121,60 @@ static int eyedropper_cancel(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } -static void eyedropper_sample(bContext *C, Eyedropper *eye, int mx, int my) +/* *** eyedropper_color_ helper functions *** */ + +/* simply get the color from the screen */ +static void eyedropper_color_sample_fl(Eyedropper *UNUSED(eye), int mx, int my, float r_col[3]) { - if (RNA_property_type(eye->prop) == PROP_FLOAT) { - Scene *scene = CTX_data_scene(C); - const int color_manage = scene->r.color_mgt_flag & R_COLOR_MANAGEMENT; - float col[4]; - - RNA_property_float_get_array(&eye->ptr, eye->prop, col); - - glReadBuffer(GL_FRONT); - glReadPixels(mx, my, 1, 1, GL_RGB, GL_FLOAT, col); - glReadBuffer(GL_BACK); - - if (RNA_property_array_length(&eye->ptr, eye->prop) < 3) return; + glReadBuffer(GL_FRONT); + glReadPixels(mx, my, 1, 1, GL_RGB, GL_FLOAT, r_col); + glReadBuffer(GL_BACK); +} - /* convert from screen (srgb) space to linear rgb space */ - if (color_manage && RNA_property_subtype(eye->prop) == PROP_COLOR) - srgb_to_linearrgb_v3_v3(col, col); - - RNA_property_float_set_array(&eye->ptr, eye->prop, col); - - RNA_property_update(C, &eye->ptr, eye->prop); +/* sets the sample color RGB, maintaining A */ +static void eyedropper_color_set(bContext *C, Eyedropper *eye, const float col[3]) +{ + float col_conv[4]; + + /* to maintain alpha */ + RNA_property_float_get_array(&eye->ptr, eye->prop, col_conv); + + /* convert from screen (srgb) space to linear rgb space */ + if (eye->do_color_management) { + srgb_to_linearrgb_v3_v3(col_conv, col); } + else { + copy_v3_v3(col_conv, col); + } + + RNA_property_float_set_array(&eye->ptr, eye->prop, col_conv); + + RNA_property_update(C, &eye->ptr, eye->prop); +} + +/* set sample from accumulated values */ +static void eyedropper_color_set_accum(bContext *C, Eyedropper *eye) +{ + float col[4]; + mul_v3_v3fl(col, eye->accum_col, 1.0f / (float)eye->accum_tot); + eyedropper_color_set(C, eye, col); +} + +/* single point sample & set */ +static void eyedropper_color_sample(bContext *C, Eyedropper *eye, int mx, int my) +{ + float col[3]; + eyedropper_color_sample_fl(eye, mx, my, col); + eyedropper_color_set(C, eye, col); +} + +static void eyedropper_color_sample_accum(Eyedropper *eye, int mx, int my) +{ + float col[3]; + eyedropper_color_sample_fl(eye, mx, my, col); + /* delay linear conversion */ + add_v3_v3(eye->accum_col, col); + eye->accum_tot++; } /* main modal status check */ @@ -136,10 +188,35 @@ static int eyedropper_modal(bContext *C, wmOperator *op, wmEvent *event) return eyedropper_cancel(C, op); case LEFTMOUSE: if (event->val == KM_RELEASE) { - eyedropper_sample(C, eye, event->x, event->y); + if (eye->accum_tot == 0) { + eyedropper_color_sample(C, eye, event->x, event->y); + } + else { + eyedropper_color_set_accum(C, eye); + } eyedropper_exit(C, op); return OPERATOR_FINISHED; } + else if (event->val == KM_PRESS) { + /* enable accum and make first sample */ + eye->accum_start = TRUE; + eyedropper_color_sample_accum(eye, event->x, event->y); + } + break; + case MOUSEMOVE: + if (eye->accum_start) { + /* button is pressed so keep sampling */ + eyedropper_color_sample_accum(eye, event->x, event->y); + eyedropper_color_set_accum(C, eye); + } + break; + case SPACEKEY: + if (event->val == KM_RELEASE) { + eye->accum_tot = 0; + zero_v3(eye->accum_col); + eyedropper_color_sample_accum(eye, event->x, event->y); + eyedropper_color_set_accum(C, eye); + } break; } diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index cbe44505263..7f9a998e6d0 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -164,6 +164,19 @@ static int panels_re_align(ScrArea *sa, ARegion *ar, Panel **r_pa) /****************************** panels ******************************/ +static void panels_collapse_all(ScrArea *sa, ARegion *ar) +{ + Panel *pa; + int flag = ((panel_aligned(sa, ar) == BUT_HORIZONTAL) ? PNL_CLOSEDX : PNL_CLOSEDY); + + for (pa = ar->panels.first; pa; pa = pa->next) { + if (pa->type && !(pa->type->flag & PNL_NO_HEADER)) { + pa->flag = flag; + } + } +} + + static void ui_panel_copy_offset(Panel *pa, Panel *papar) { /* with respect to sizes... papar is parent */ @@ -932,7 +945,7 @@ static void check_panel_overlap(ARegion *ar, Panel *panel) { Panel *pa; - /* also called with panel==NULL for clear */ + /* also called with (panel == NULL) for clear */ for (pa = ar->panels.first; pa; pa = pa->next) { pa->flag &= ~PNL_OVERLAP; @@ -1024,7 +1037,7 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in else if (block->panel->control & UI_PNL_CLOSE) { /* whole of header can be used to collapse panel (except top-right corner) */ if (mx <= block->maxx - 8 - PNL_ICON) button = 2; - //else if (mx <= block->minx+10+2*PNL_ICON+2) button= 1; + //else if (mx <= block->minx + 10 + 2 * PNL_ICON + 2) button = 1; } else if (mx <= block->maxx - PNL_ICON - 12) { button = 1; @@ -1074,6 +1087,7 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in int ui_handler_panel_region(bContext *C, wmEvent *event) { + ScrArea *sa = CTX_wm_area(C); ARegion *ar = CTX_wm_region(C); uiBlock *block; Panel *pa; @@ -1141,6 +1155,8 @@ int ui_handler_panel_region(bContext *C, wmEvent *event) } else if (event->type == LEFTMOUSE) { if (inside_header) { + if (event->ctrl) + panels_collapse_all(sa, ar); ui_handle_panel_header(C, block, mx, my, 0); break; } diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 5459f689e9f..dd6be9141ca 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -339,13 +339,13 @@ static void rgb_tint(float col[3], float col_hsv_from[3]; float col_hsv_to[3]; - rgb_to_hsv(col[0], col[1], col[2], col_hsv_from + 0, col_hsv_from + 1, col_hsv_from + 2); + rgb_to_hsv_v(col, col_hsv_from); col_hsv_to[0] = h; col_hsv_to[1] = h_strength; col_hsv_to[2] = (col_hsv_from[2] * (1.0f - v_strength)) + (v * v_strength); - hsv_to_rgb(col_hsv_to[0], col_hsv_to[1], col_hsv_to[2], col + 0, col + 1, col + 2); + hsv_to_rgb_v(col_hsv_to, col); } static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *ar) @@ -1304,16 +1304,16 @@ static void ui_block_position(wmWindow *window, ARegion *butregion, uiBut *but, } } - /*aspect= (float)(block->maxx - block->minx + 4);*/ /*UNUSED*/ + /* aspect = (float)(block->maxx - block->minx + 4);*/ /*UNUSED*/ ui_block_to_window_fl(butregion, but->block, &block->minx, &block->miny); ui_block_to_window_fl(butregion, but->block, &block->maxx, &block->maxy); - //block->minx-= 2.0; block->miny-= 2.0; - //block->maxx+= 2.0; block->maxy+= 2.0; + //block->minx -= 2.0; block->miny -= 2.0; + //block->maxx += 2.0; block->maxy += 2.0; xsize = block->maxx - block->minx + 4; // 4 for shadow ysize = block->maxy - block->miny + 4; - /*aspect/= (float)xsize;*/ /*UNUSED*/ + /* aspect /= (float)xsize;*/ /*UNUSED*/ { int left = 0, right = 0, top = 0, down = 0; @@ -1847,7 +1847,7 @@ void ui_set_but_hsv(uiBut *but) float col[3]; float *hsv = ui_block_hsv_get(but->block); - hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col + 1, col + 2); + hsv_to_rgb_v(hsv, col); ui_set_but_vectorf(but, col); } @@ -1860,7 +1860,7 @@ static void ui_update_block_buts_rgb(uiBlock *block, const float rgb[3]) /* this is to keep the H and S value when V is equal to zero * and we are working in HSV mode, of course! */ - rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_compat_v(rgb, hsv); // this updates button strings, is hackish... but button pointers are on stack of caller function for (bt = block->buttons.first; bt; bt = bt->next) { @@ -1942,7 +1942,7 @@ static void do_hsv_rna_cb(bContext *UNUSED(C), void *bt1, void *UNUSED(arg)) float rgb[3]; float *hsv = ui_block_hsv_get(but->block); - hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb + 1, rgb + 2); + hsv_to_rgb_v(hsv, rgb); ui_update_block_buts_rgb(but->block, rgb); @@ -2157,7 +2157,7 @@ static void uiBlockPicker(uiBlock *block, float rgba[4], PointerRNA *ptr, Proper uiButSetFunc(bt, do_hex_rna_cb, bt, hexcol); uiDefBut(block, LABEL, 0, IFACE_("(Gamma Corrected)"), 0, -80, butwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, ""); - rgb_to_hsv(rgba[0], rgba[1], rgba[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_v(rgba, hsv); picker_new_hide_reveal(block, colormode); } @@ -2178,18 +2178,18 @@ static int ui_picker_small_wheel_cb(const bContext *UNUSED(C), uiBlock *block, w for (but = block->buttons.first; but; but = but->next) { if (but->type == HSVCUBE && but->active == NULL) { uiPopupBlockHandle *popup = block->handle; - float col[3]; + float rgb[3]; float *hsv = ui_block_hsv_get(block); - ui_get_but_vectorf(but, col); + ui_get_but_vectorf(but, rgb); - rgb_to_hsv_compat(col[0], col[1], col[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_compat_v(rgb, hsv); hsv[2] = CLAMPIS(hsv[2] + add, 0.0f, 1.0f); - hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col + 1, col + 2); + hsv_to_rgb_v(hsv, rgb); - ui_set_but_vectorf(but, col); + ui_set_but_vectorf(but, rgb); - ui_update_block_buts_rgb(block, col); + ui_update_block_buts_rgb(block, rgb); if (popup) popup->menuretval = UI_RETURN_UPDATE; @@ -2706,7 +2706,7 @@ void uiPupBlockEx(bContext *C, uiBlockCreateFunc func, uiBlockHandleFunc popup_f handle->popup_arg = arg; handle->popup_func = popup_func; handle->cancel_func = cancel_func; - // handle->opcontext= opcontext; + // handle->opcontext = opcontext; UI_add_popup_handlers(C, &window->modalhandlers, handle); WM_event_add_mousemove(C); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 6d1766c8bf1..2d9c6ee7657 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -350,7 +350,7 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str idptr = RNA_property_pointer_get(&template->ptr, template->prop); id = idptr.data; idfrom = template->ptr.id.data; - // lb= template->idlb; + // lb = template->idlb; block = uiLayoutGetBlock(layout); uiBlockBeginAlign(block); @@ -579,8 +579,10 @@ void uiTemplateAnyID(uiLayout *layout, PointerRNA *ptr, const char *propname, co row = uiLayoutRow(layout, 1); /* Label - either use the provided text, or will become "ID-Block:" */ - if (text) - uiItemL(row, text, ICON_NONE); + if (text) { + if (text[0]) + uiItemL(row, text, ICON_NONE); + } else uiItemL(row, "ID-Block:", ICON_NONE); @@ -2239,6 +2241,20 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe uiItemL(split, name, ICON_OBJECT_DATA); } } + else if (itemptr->type == &RNA_MaskLayer) { + split = uiLayoutSplit(sub, 0.5f, 0); + + uiItemL(split, name, icon); + + uiBlockSetEmboss(block, UI_EMBOSSN); + row = uiLayoutRow(split, 1); + // uiItemR(row, itemptr, "alpha", 0, "", ICON_NONE); // enable when used + uiItemR(row, itemptr, "hide", 0, "", 0); + uiItemR(row, itemptr, "hide_select", 0, "", 0); + uiItemR(row, itemptr, "hide_render", 0, "", 0); + + uiBlockSetEmboss(block, UI_EMBOSS); + } /* There is a last chance to display custom controls (in addition to the name/label): * If the given item property group features a string property named as prop_list, @@ -2299,7 +2315,7 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe void uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, const char *propname, PointerRNA *activeptr, const char *activepropname, const char *prop_list, int rows, int maxrows, int listtype) { - //Scene *scene= CTX_data_scene(C); + //Scene *scene = CTX_data_scene(C); PropertyRNA *prop = NULL, *activeprop; PropertyType type, activetype; StructRNA *ptype; diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index a0b83b5fef4..9773918e508 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -130,7 +130,13 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind return but; } -int uiDefAutoButsRNA(uiLayout *layout, PointerRNA *ptr, int (*check_prop)(PointerRNA *, PropertyRNA *), const char label_align) +/** + * \a check_prop callback filters functions to avoid drawing certain properties, + * in cases where PROP_HIDDEN flag can't be used for a property. + */ +int uiDefAutoButsRNA(uiLayout *layout, PointerRNA *ptr, + int (*check_prop)(PointerRNA *, PropertyRNA *), + const char label_align) { uiLayout *split, *col; int flag; diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 4d483b69ca2..004c5306d65 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -162,9 +162,10 @@ static unsigned int scroll_circle_face[14][3] = { }; -static float menu_tria_vert[6][2]= { -{-0.33, 0.16}, {0.33, 0.16}, {0, 0.82}, -{0, -0.82}, {-0.33, -0.16}, {0.33, -0.16}}; +static float menu_tria_vert[6][2] = { + {-0.33, 0.16}, {0.33, 0.16}, {0, 0.82}, + {0, -0.82}, {-0.33, -0.16}, {0.33, -0.16} +}; @@ -1168,7 +1169,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b #if 0 ui_rasterpos_safe(x, y, but->aspect); - if (but->type == IDPOIN) transopts = 0; // no translation, of course! + if (but->type == IDPOIN) transopts = 0; // no translation, of course! else transopts = ui_translate_buttons(); #endif @@ -1885,7 +1886,7 @@ static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect) /* color */ ui_get_but_vectorf(but, rgb); copy_v3_v3(hsv, ui_block_hsv_get(but->block)); - rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_compat_v(rgb, hsv); copy_v3_v3(hsvo, hsv); /* exception: if 'lock' is set @@ -1911,7 +1912,7 @@ static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect) ui_hsvcircle_vals_from_pos(hsv, hsv + 1, rect, centx + co * radius, centy + si * radius); CLAMP(hsv[2], 0.0f, 1.0f); /* for display only */ - hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col + 1, col + 2); + hsv_to_rgb_v(hsv, col); glColor3fv(col); glVertex2f(centx + co * radius, centy + si * radius); } @@ -2081,37 +2082,31 @@ void ui_draw_gradient(rcti *rect, const float hsv[3], int type, float alpha) static void ui_draw_but_HSVCUBE(uiBut *but, rcti *rect) { - float rgb[3], h, s, v; + float rgb[3]; float x = 0.0f, y = 0.0f; float *hsv = ui_block_hsv_get(but->block); - float hsvn[3]; + float hsv_n[3]; - h = hsv[0]; - s = hsv[1]; - v = hsv[2]; + copy_v3_v3(hsv_n, hsv); ui_get_but_vectorf(but, rgb); - rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], &h, &s, &v); - - hsvn[0] = h; - hsvn[1] = s; - hsvn[2] = v; + rgb_to_hsv_compat_v(rgb, hsv_n); - ui_draw_gradient(rect, hsvn, but->a1, 1.f); + ui_draw_gradient(rect, hsv_n, but->a1, 1.0f); switch ((int)but->a1) { case UI_GRAD_SV: - x = v; y = s; break; + x = hsv_n[2]; y = hsv_n[1]; break; case UI_GRAD_HV: - x = h; y = v; break; + x = hsv_n[0]; y = hsv_n[2]; break; case UI_GRAD_HS: - x = h; y = s; break; + x = hsv_n[0]; y = hsv_n[1]; break; case UI_GRAD_H: - x = h; y = 0.5; break; + x = hsv_n[0]; y = 0.5; break; case UI_GRAD_S: - x = s; y = 0.5; break; + x = hsv_n[1]; y = 0.5; break; case UI_GRAD_V: - x = v; y = 0.5; break; + x = hsv_n[2]; y = 0.5; break; } /* cursor */ @@ -2140,7 +2135,7 @@ static void ui_draw_but_HSV_v(uiBut *but, rcti *rect) color_profile = BLI_PR_NONE; ui_get_but_vectorf(but, rgb); - rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv + 1, hsv + 2); + rgb_to_hsv_v(rgb, hsv); v = hsv[2]; if (color_profile) @@ -2251,7 +2246,7 @@ void ui_draw_link_bezier(rcti *rect) if (ui_link_bezier_points(rect, coord_array, LINK_RESOL)) { /* we can reuse the dist variable here to increment the GL curve eval amount*/ - // const float dist= 1.0f/(float)LINK_RESOL; // UNUSED + // const float dist = 1.0f/(float)LINK_RESOL; // UNUSED glEnable(GL_BLEND); glEnable(GL_LINE_SMOOTH); @@ -3139,7 +3134,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct if (but->drawflag & UI_BUT_DRAW_ENUM_ARROWS) wt = widget_type(UI_WTYPE_MENU_RADIO); /* with arrows */ else - wt = widget_type(UI_WTYPE_MENU_ICON_RADIO); /* no arrows */ + wt = widget_type(UI_WTYPE_MENU_ICON_RADIO); /* no arrows */ } /* with menu arrows */ else diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 0d16e0f4dc0..02f34873ea7 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -363,6 +363,8 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo cp = ts->syntaxv; break; case TH_NODE_GROUP: cp = ts->syntaxc; break; + case TH_NODE_FRAME: + cp = ts->movie; break; case TH_NODE_CURVING: cp = &ts->noodle_curving; break; @@ -370,6 +372,8 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo cp = ts->movie; break; case TH_SEQ_MOVIECLIP: cp = ts->movieclip; break; + case TH_SEQ_MASK: + cp = ts->mask; break; case TH_SEQ_IMAGE: cp = ts->image; break; case TH_SEQ_SCENE: @@ -378,8 +382,6 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo cp = ts->audio; break; case TH_SEQ_EFFECT: cp = ts->effect; break; - case TH_SEQ_PLUGIN: - cp = ts->plugin; break; case TH_SEQ_TRANSITION: cp = ts->transition; break; case TH_SEQ_META: @@ -473,6 +475,39 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo case TH_SKIN_ROOT: cp = ts->skin_root; break; + + case TH_ANIM_ACTIVE: + cp = ts->anim_active; + break; + case TH_ANIM_INACTIVE: + cp = ts->anim_non_active; + break; + + case TH_NLA_TWEAK: + cp = ts->nla_tweaking; + break; + case TH_NLA_TWEAK_DUPLI: + cp = ts->nla_tweakdupli; + break; + + case TH_NLA_TRANSITION: + cp = ts->nla_transition; + break; + case TH_NLA_TRANSITION_SEL: + cp = ts->nla_transition_sel; + break; + case TH_NLA_META: + cp = ts->nla_meta; + break; + case TH_NLA_META_SEL: + cp = ts->nla_meta_sel; + break; + case TH_NLA_SOUND: + cp = ts->nla_sound; + break; + case TH_NLA_SOUND_SEL: + cp = ts->nla_sound_sel; + break; } } } @@ -735,19 +770,34 @@ void ui_theme_init_default(void) rgba_char_args_set(btheme->tipo.handle_sel_auto_clamped, 0xf0, 0xaf, 0x90, 255); btheme->tipo.handle_vertex_size = 4; - rgba_char_args_set(btheme->tipo.ds_channel, 82, 96, 110, 255); + rgba_char_args_set(btheme->tipo.ds_channel, 82, 96, 110, 255); rgba_char_args_set(btheme->tipo.ds_subchannel, 124, 137, 150, 255); - rgba_char_args_set(btheme->tipo.group, 79, 101, 73, 255); - rgba_char_args_set(btheme->tipo.group_active, 135, 177, 125, 255); + rgba_char_args_set(btheme->tipo.group, 79, 101, 73, 255); + rgba_char_args_set(btheme->tipo.group_active, 135, 177, 125, 255); /* dopesheet */ btheme->tact = btheme->tipo; rgba_char_args_set(btheme->tact.strip, 12, 10, 10, 128); rgba_char_args_set(btheme->tact.strip_select, 255, 140, 0, 255); + rgba_char_args_set(btheme->tact.anim_active, 204, 112, 26, 102); + /* space nla */ btheme->tnla = btheme->tact; + rgba_char_args_set(btheme->tnla.anim_active, 204, 112, 26, 102); /* same as for dopesheet; duplicate here for easier reference */ + rgba_char_args_set(btheme->tnla.anim_non_active, 153, 135, 97, 77); + + rgba_char_args_set(btheme->tnla.nla_tweaking, 77, 243, 26, 77); + rgba_char_args_set(btheme->tnla.nla_tweakdupli, 217, 0, 0, 255); + + rgba_char_args_set(btheme->tnla.nla_transition, 28, 38, 48, 255); + rgba_char_args_set(btheme->tnla.nla_transition_sel, 46, 117, 219, 255); + rgba_char_args_set(btheme->tnla.nla_meta, 51, 38, 66, 255); + rgba_char_args_set(btheme->tnla.nla_meta_sel, 105, 33, 150, 255); + rgba_char_args_set(btheme->tnla.nla_sound, 43, 61, 61, 255); + rgba_char_args_set(btheme->tnla.nla_sound_sel, 31, 122, 122, 255); + /* space file */ /* to have something initialized */ btheme->tfile = btheme->tv3d; @@ -771,11 +821,11 @@ void ui_theme_init_default(void) rgba_char_args_set(btheme->tseq.back, 116, 116, 116, 255); rgba_char_args_set(btheme->tseq.movie, 81, 105, 135, 255); rgba_char_args_set(btheme->tseq.movieclip, 32, 32, 143, 255); + rgba_char_args_set(btheme->tseq.mask, 152, 78, 62, 255); rgba_char_args_set(btheme->tseq.image, 109, 88, 129, 255); rgba_char_args_set(btheme->tseq.scene, 78, 152, 62, 255); rgba_char_args_set(btheme->tseq.audio, 46, 143, 143, 255); rgba_char_args_set(btheme->tseq.effect, 169, 84, 124, 255); - rgba_char_args_set(btheme->tseq.plugin, 126, 126, 80, 255); rgba_char_args_set(btheme->tseq.transition, 162, 95, 111, 255); rgba_char_args_set(btheme->tseq.meta, 109, 145, 131, 255); rgba_char_args_set(btheme->tseq.preview_back, 0, 0, 0, 255); @@ -1044,6 +1094,17 @@ void UI_GetThemeColor3fv(int colorid, float col[3]) col[2] = ((float)cp[2]) / 255.0f; } +void UI_GetThemeColor4fv(int colorid, float col[4]) +{ + const unsigned char *cp; + + cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid); + col[0] = ((float)cp[0]) / 255.0f; + col[1] = ((float)cp[1]) / 255.0f; + col[2] = ((float)cp[2]) / 255.0f; + col[3] = ((float)cp[3]) / 255.0f; +} + // get the color, range 0.0-1.0, complete with shading offset void UI_GetThemeColorShade3fv(int colorid, int offset, float col[3]) { @@ -1248,7 +1309,6 @@ void init_userdef_do_versions(void) vDM_ColorBand_store((U.flag & USER_CUSTOM_RANGE) ? (&U.coba_weight) : NULL); if (bmain->versionfile <= 191) { - BLI_strncpy(U.plugtexdir, U.textudir, sizeof(U.plugtexdir)); strcpy(U.sounddir, "/"); } @@ -1265,7 +1325,7 @@ void init_userdef_do_versions(void) if (U.undosteps == 0) U.undosteps = 32; for (btheme = U.themes.first; btheme; btheme = btheme->next) { - /* check for alpha==0 is safe, then color was never set */ + /* check for (alpha == 0) is safe, then color was never set */ if (btheme->tv3d.edge_seam[3] == 0) { rgba_char_args_set(btheme->tv3d.edge_seam, 230, 150, 50, 255); } @@ -1290,7 +1350,7 @@ void init_userdef_do_versions(void) bTheme *btheme; /* new space type */ for (btheme = U.themes.first; btheme; btheme = btheme->next) { - /* check for alpha==0 is safe, then color was never set */ + /* check for (alpha == 0) is safe, then color was never set */ if (btheme->ttime.back[3] == 0) { // copied from ui_theme_init_default btheme->ttime = btheme->tv3d; @@ -1369,7 +1429,6 @@ void init_userdef_do_versions(void) rgba_char_args_set(btheme->tseq.scene, 78, 152, 62, 255); rgba_char_args_set(btheme->tseq.audio, 46, 143, 143, 255); rgba_char_args_set(btheme->tseq.effect, 169, 84, 124, 255); - rgba_char_args_set(btheme->tseq.plugin, 126, 126, 80, 255); rgba_char_args_set(btheme->tseq.transition, 162, 95, 111, 255); rgba_char_args_set(btheme->tseq.meta, 109, 145, 131, 255); } @@ -1819,6 +1878,38 @@ void init_userdef_do_versions(void) for (btheme = U.themes.first; btheme; btheme = btheme->next) rgba_char_args_set(btheme->tv3d.skin_root, 180, 77, 77, 255); } + + if (bmain->versionfile < 263 || (bmain->versionfile == 263 && bmain->subversionfile < 7)) { + bTheme *btheme; + + for (btheme = U.themes.first; btheme; btheme = btheme->next) { + /* DopeSheet Summary */ + rgba_char_args_set(btheme->tact.anim_active, 204, 112, 26, 102); + + /* NLA Colors */ + rgba_char_args_set(btheme->tnla.anim_active, 204, 112, 26, 102); /* same as dopesheet above */ + rgba_char_args_set(btheme->tnla.anim_non_active,153, 135, 97, 77); + + rgba_char_args_set(btheme->tnla.nla_tweaking, 77, 243, 26, 77); + rgba_char_args_set(btheme->tnla.nla_tweakdupli, 217, 0, 0, 255); + + rgba_char_args_set(btheme->tnla.nla_transition, 28, 38, 48, 255); + rgba_char_args_set(btheme->tnla.nla_transition_sel, 46, 117, 219, 255); + rgba_char_args_set(btheme->tnla.nla_meta, 51, 38, 66, 255); + rgba_char_args_set(btheme->tnla.nla_meta_sel, 105, 33, 150, 255); + rgba_char_args_set(btheme->tnla.nla_sound, 43, 61, 61, 255); + rgba_char_args_set(btheme->tnla.nla_sound_sel, 31, 122, 122, 255); + } + } + + if (bmain->versionfile < 263 || (bmain->versionfile == 263 && bmain->subversionfile < 11)) { + bTheme *btheme; + for (btheme = U.themes.first; btheme; btheme = btheme->next) { + if (btheme->tseq.movieclip[0] == 0) { + rgba_char_args_set(btheme->tseq.mask, 152, 78, 62, 255); + } + } + } /* GL Texture Garbage Collection (variable abused above!) */ if (U.textimeout == 0) { diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index 1d315e9a5b8..b2227405d8b 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -272,7 +272,7 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy) v2d->keepzoom = (V2D_KEEPASPECT | V2D_LIMITZOOM | V2D_KEEPZOOM); v2d->minzoom = 0.5f; v2d->maxzoom = 2.0f; - //tot_changed= 1; + //tot_changed = 1; v2d->align = (V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_POS_Y); v2d->keeptot = V2D_KEEPTOT_BOUNDS; @@ -428,7 +428,7 @@ void UI_view2d_curRect_validate_resize(View2D *v2d, int resize) if (winx != v2d->oldwinx) do_x = TRUE; if (winy != v2d->oldwiny) do_y = TRUE; - /* curRatio= height / width; */ /* UNUSED */ + /* curRatio = height / width; */ /* UNUSED */ winRatio = winy / winx; /* both sizes change (area/region maximised) */ @@ -442,7 +442,7 @@ void UI_view2d_curRect_validate_resize(View2D *v2d, int resize) else do_x = TRUE; } do_cur = do_x; - /* do_win= do_y; */ /* UNUSED */ + /* do_win = do_y; */ /* UNUSED */ if (do_cur) { if ((v2d->keeptot == V2D_KEEPTOT_STRICT) && (winx != v2d->oldwinx)) { @@ -806,7 +806,7 @@ void UI_view2d_curRect_reset(View2D *v2d) v2d->cur.xmax = (float)width; } else { - /* width is centered around x==0 */ + /* width is centered around (x == 0) */ const float dx = (float)width / 2.0f; v2d->cur.xmin = -dx; @@ -825,7 +825,7 @@ void UI_view2d_curRect_reset(View2D *v2d) v2d->cur.ymax = (float)height; } else { - /* height is centered around y==0 */ + /* height is centered around (y == 0) */ const float dy = (float)height / 2.0f; v2d->cur.ymin = -dy; @@ -869,7 +869,7 @@ void UI_view2d_totRect_set_resize(View2D *v2d, int width, int height, int resize v2d->tot.xmax = (float)width; } else { - /* width is centered around x==0 */ + /* width is centered around (x == 0) */ const float dx = (float)width / 2.0f; v2d->tot.xmin = -dx; @@ -888,7 +888,7 @@ void UI_view2d_totRect_set_resize(View2D *v2d, int width, int height, int resize v2d->tot.ymax = (float)height; } else { - /* height is centered around y==0 */ + /* height is centered around (y == 0) */ const float dy = (float)height / 2.0f; v2d->tot.ymin = -dy; diff --git a/source/blender/editors/mask/CMakeLists.txt b/source/blender/editors/mask/CMakeLists.txt new file mode 100644 index 00000000000..57be5a2234a --- /dev/null +++ b/source/blender/editors/mask/CMakeLists.txt @@ -0,0 +1,52 @@ +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# The Original Code is Copyright (C) 2012 Blender Foundation. +# +# Contributor(s): Blender Foundation, +# Sergey Sharybin +# +# ***** END GPL LICENSE BLOCK ***** + +set(INC + ../include + ../../blenkernel + ../../blenloader + ../../blenlib + ../../makesdna + ../../makesrna + ../../windowmanager + ../../../../intern/guardedalloc + ${GLEW_INCLUDE_PATH} +) + +set(INC_SYS +) + +set(SRC + mask_add.c + mask_draw.c + mask_edit.c + mask_editaction.c + mask_ops.c + mask_relationships.c + mask_select.c + mask_shapekey.c + + mask_intern.h +) + +blender_add_lib(bf_editor_mask "${SRC}" "${INC}" "${INC_SYS}") diff --git a/source/blender/editors/mask/SConscript b/source/blender/editors/mask/SConscript new file mode 100644 index 00000000000..4af000d038d --- /dev/null +++ b/source/blender/editors/mask/SConscript @@ -0,0 +1,9 @@ +#!/usr/bin/python +Import ('env') + +sources = env.Glob('*.c') +defs = [] +incs = '../include ../../blenkernel ../../blenloader ../../blenlib ../../windowmanager ../../makesdna' +incs += ' ../../makesrna #/extern/glew/include #/intern/guardedalloc' + +env.BlenderLib ( 'bf_editors_mask', sources, Split(incs), defs, libtype=['core'], priority=[100] ) diff --git a/source/blender/editors/mask/mask_add.c b/source/blender/editors/mask/mask_add.c new file mode 100644 index 00000000000..0bc9adb6577 --- /dev/null +++ b/source/blender/editors/mask/mask_add.c @@ -0,0 +1,711 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/mask/mask_add.c + * \ingroup edmask + */ + +#include "MEM_guardedalloc.h" + +#include "BLI_math.h" + +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_mask.h" + +#include "DNA_scene_types.h" +#include "DNA_mask_types.h" +#include "DNA_object_types.h" /* SELECT */ + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_mask.h" /* own include */ + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "mask_intern.h" /* own include */ + + +static int find_nearest_diff_point(bContext *C, Mask *mask, const float normal_co[2], int threshold, int feather, + MaskLayer **masklay_r, MaskSpline **spline_r, MaskSplinePoint **point_r, + float *u_r, float tangent[2], + const short use_deform) +{ + MaskLayer *masklay, *point_masklay; + MaskSpline *point_spline; + MaskSplinePoint *point = NULL; + float dist, co[2]; + int width, height; + float u; + float scalex, scaley, aspx, aspy; + + ED_mask_size(C, &width, &height); + ED_mask_aspect(C, &aspx, &aspy); + ED_mask_pixelspace_factor(C, &scalex, &scaley); + + co[0] = normal_co[0] * scalex; + co[1] = normal_co[1] * scaley; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + int i; + MaskSplinePoint *cur_point; + + for (i = 0, cur_point = use_deform ? spline->points_deform : spline->points; + i < spline->tot_point; + i++, cur_point++) + { + float *diff_points; + int tot_diff_point; + + diff_points = BKE_mask_point_segment_diff_with_resolution(spline, cur_point, width, height, + &tot_diff_point); + + if (diff_points) { + int i, tot_feather_point, tot_point; + float *feather_points = NULL, *points; + + if (feather) { + feather_points = BKE_mask_point_segment_feather_diff_with_resolution(spline, cur_point, + width, height, + &tot_feather_point); + + points = feather_points; + tot_point = tot_feather_point; + } + else { + points = diff_points; + tot_point = tot_diff_point; + } + + for (i = 0; i < tot_point - 1; i++) { + float cur_dist, a[2], b[2]; + + a[0] = points[2 * i] * scalex; + a[1] = points[2 * i + 1] * scaley; + + b[0] = points[2 * i + 2] * scalex; + b[1] = points[2 * i + 3] * scaley; + + cur_dist = dist_to_line_segment_v2(co, a, b); + + if (point == NULL || cur_dist < dist) { + if (tangent) + sub_v2_v2v2(tangent, &diff_points[2 * i + 2], &diff_points[2 * i]); + + point_masklay = masklay; + point_spline = spline; + point = use_deform ? &spline->points[(cur_point - spline->points_deform)] : cur_point; + dist = cur_dist; + u = (float)i / tot_point; + + } + } + + if (feather_points) + MEM_freeN(feather_points); + + MEM_freeN(diff_points); + } + } + } + } + + if (point && dist < threshold) { + if (masklay_r) + *masklay_r = point_masklay; + + if (spline_r) + *spline_r = point_spline; + + if (point_r) + *point_r = point; + + if (u_r) { + u = BKE_mask_spline_project_co(point_spline, point, u, normal_co, MASK_PROJ_ANY); + + *u_r = u; + } + + return TRUE; + } + + if (masklay_r) + *masklay_r = NULL; + + if (spline_r) + *spline_r = NULL; + + if (point_r) + *point_r = NULL; + + return FALSE; +} + +/******************** add vertex *********************/ + +static void setup_vertex_point(bContext *C, Mask *mask, MaskSpline *spline, MaskSplinePoint *new_point, + const float point_co[2], const float tangent[2], const float u, + MaskSplinePoint *reference_point, const short reference_adjacent) +{ + MaskSplinePoint *prev_point = NULL; + MaskSplinePoint *next_point = NULL; + BezTriple *bezt; + int width, height; + float co[3]; + const float len = 20.0; /* default length of handle in pixel space */ + + copy_v2_v2(co, point_co); + co[2] = 0.0f; + + ED_mask_size(C, &width, &height); + + /* point coordinate */ + bezt = &new_point->bezt; + + bezt->h1 = bezt->h2 = HD_ALIGN; + + if (reference_point) { + bezt->h1 = bezt->h2 = MAX2(reference_point->bezt.h2, reference_point->bezt.h1); + } + else if (reference_adjacent) { + if (spline->tot_point != 1) { + int index = (int)(new_point - spline->points); + prev_point = &spline->points[(index - 1) % spline->tot_point]; + next_point = &spline->points[(index + 1) % spline->tot_point]; + + bezt->h1 = bezt->h2 = MAX2(prev_point->bezt.h2, next_point->bezt.h1); + + /* note, we may want to copy other attributes later, radius? pressure? color? */ + } + } + + copy_v3_v3(bezt->vec[0], co); + copy_v3_v3(bezt->vec[1], co); + copy_v3_v3(bezt->vec[2], co); + + /* initial offset for handles */ + if (spline->tot_point == 1) { + /* first point of splien is aligned horizontally */ + bezt->vec[0][0] -= len / width; + bezt->vec[2][0] += len / width; + } + else if (tangent) { + float vec[2]; + + copy_v2_v2(vec, tangent); + + vec[0] *= width; + vec[1] *= height; + + mul_v2_fl(vec, len / len_v2(vec)); + + vec[0] /= width; + vec[1] /= height; + + sub_v2_v2(bezt->vec[0], vec); + add_v2_v2(bezt->vec[2], vec); + + if (reference_adjacent) { + BKE_mask_calc_handle_adjacent_interp(spline, new_point, u); + } + } + else { + + /* calculating auto handles works much nicer */ +#if 0 + /* next points are aligning in the direction of previous/next point */ + MaskSplinePoint *point; + float v1[2], v2[2], vec[2]; + float dir = 1.0f; + + if (new_point == spline->points) { + point = new_point + 1; + dir = -1.0f; + } + else + point = new_point - 1; + + if (spline->tot_point < 3) { + v1[0] = point->bezt.vec[1][0] * width; + v1[1] = point->bezt.vec[1][1] * height; + + v2[0] = new_point->bezt.vec[1][0] * width; + v2[1] = new_point->bezt.vec[1][1] * height; + } + else { + if (new_point == spline->points) { + v1[0] = spline->points[1].bezt.vec[1][0] * width; + v1[1] = spline->points[1].bezt.vec[1][1] * height; + + v2[0] = spline->points[spline->tot_point - 1].bezt.vec[1][0] * width; + v2[1] = spline->points[spline->tot_point - 1].bezt.vec[1][1] * height; + } + else { + v1[0] = spline->points[0].bezt.vec[1][0] * width; + v1[1] = spline->points[0].bezt.vec[1][1] * height; + + v2[0] = spline->points[spline->tot_point - 2].bezt.vec[1][0] * width; + v2[1] = spline->points[spline->tot_point - 2].bezt.vec[1][1] * height; + } + } + + sub_v2_v2v2(vec, v1, v2); + mul_v2_fl(vec, len * dir / len_v2(vec)); + + vec[0] /= width; + vec[1] /= height; + + add_v2_v2(bezt->vec[0], vec); + sub_v2_v2(bezt->vec[2], vec); +#else + BKE_mask_calc_handle_point_auto(spline, new_point, TRUE); + BKE_mask_calc_handle_adjacent_interp(spline, new_point, u); + +#endif + } + + BKE_mask_parent_init(&new_point->parent); + + /* select new point */ + MASKPOINT_SEL_ALL(new_point); + ED_mask_select_flush_all(mask); +} + + +/* **** add extrude vertex **** */ + +static void finSelectedSplinePoint(MaskLayer *masklay, MaskSpline **spline, MaskSplinePoint **point, short check_active) +{ + MaskSpline *cur_spline = masklay->splines.first; + + *spline = NULL; + *point = NULL; + + if (check_active) { + if (masklay->act_spline && masklay->act_point && MASKPOINT_ISSEL_ANY(masklay->act_point)) { + *spline = masklay->act_spline; + *point = masklay->act_point; + return; + } + } + + while (cur_spline) { + int i; + + for (i = 0; i < cur_spline->tot_point; i++) { + MaskSplinePoint *cur_point = &cur_spline->points[i]; + + if (MASKPOINT_ISSEL_ANY(cur_point)) { + if (*spline != NULL && *spline != cur_spline) { + *spline = NULL; + *point = NULL; + return; + } + else if (*point) { + *point = NULL; + } + else { + *spline = cur_spline; + *point = cur_point; + } + } + } + + cur_spline = cur_spline->next; + } +} + +/* **** add subdivide vertex **** */ + +static void mask_spline_add_point_at_index(MaskSpline *spline, int point_index) +{ + MaskSplinePoint *new_point_array; + + new_point_array = MEM_callocN(sizeof(MaskSplinePoint) * (spline->tot_point + 1), "add mask vert points"); + + memcpy(new_point_array, spline->points, sizeof(MaskSplinePoint) * (point_index + 1)); + memcpy(new_point_array + point_index + 2, spline->points + point_index + 1, + sizeof(MaskSplinePoint) * (spline->tot_point - point_index - 1)); + + MEM_freeN(spline->points); + spline->points = new_point_array; + spline->tot_point++; +} + +static int add_vertex_subdivide(bContext *C, Mask *mask, const float co[2]) +{ + MaskLayer *masklay; + MaskSpline *spline; + MaskSplinePoint *point = NULL; + const float threshold = 9; + float tangent[2]; + float u; + + if (find_nearest_diff_point(C, mask, co, threshold, FALSE, &masklay, &spline, &point, &u, tangent, TRUE)) { + MaskSplinePoint *new_point; + int point_index = point - spline->points; + + ED_mask_select_toggle_all(mask, SEL_DESELECT); + + mask_spline_add_point_at_index(spline, point_index); + + new_point = &spline->points[point_index + 1]; + + setup_vertex_point(C, mask, spline, new_point, co, tangent, u, NULL, TRUE); + + /* TODO - we could pass the spline! */ + BKE_mask_layer_shape_changed_add(masklay, BKE_mask_layer_shape_spline_to_index(masklay, spline) + point_index + 1, TRUE, TRUE); + + masklay->act_point = new_point; + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); + + return TRUE; + } + + return FALSE; +} + +static int add_vertex_extrude(bContext *C, Mask *mask, MaskLayer *masklay, const float co[2]) +{ + MaskSpline *spline; + MaskSplinePoint *point; + MaskSplinePoint *new_point = NULL, *ref_point = NULL; + + /* check on which side we want to add the point */ + int point_index; + float tangent_point[2]; + float tangent_co[2]; + int do_cyclic_correct = FALSE; + int do_recalc_src = FALSE; /* when extruding from endpoints only */ + int do_prev; /* use prev point rather then next?? */ + + if (!masklay) { + return FALSE; + } + else { + finSelectedSplinePoint(masklay, &spline, &point, TRUE); + } + + ED_mask_select_toggle_all(mask, SEL_DESELECT); + + point_index = (point - spline->points); + + MASKPOINT_DESEL_ALL(point); + + if ((spline->flag & MASK_SPLINE_CYCLIC) || + (point_index > 0 && point_index != spline->tot_point - 1)) + { + BKE_mask_calc_tangent_polyline(spline, point, tangent_point); + sub_v2_v2v2(tangent_co, co, point->bezt.vec[1]); + + if (dot_v2v2(tangent_point, tangent_co) < 0.0f) { + do_prev = TRUE; + } + else { + do_prev = FALSE; + } + } + else if (((spline->flag & MASK_SPLINE_CYCLIC) == 0) && (point_index == 0)) { + do_prev = TRUE; + do_recalc_src = TRUE; + } + else if (((spline->flag & MASK_SPLINE_CYCLIC) == 0) && (point_index == spline->tot_point - 1)) { + do_prev = FALSE; + do_recalc_src = TRUE; + } + else { + do_prev = FALSE; /* quiet warning */ + /* should never get here */ + BLI_assert(0); + } + + /* use the point before the active one */ + if (do_prev) { + point_index--; + if (point_index < 0) { + point_index += spline->tot_point; /* wrap index */ + if ((spline->flag & MASK_SPLINE_CYCLIC) == 0) { + do_cyclic_correct = TRUE; + point_index = 0; + } + } + } + +// print_v2("", tangent_point); +// printf("%d\n", point_index); + + mask_spline_add_point_at_index(spline, point_index); + + if (do_cyclic_correct) { + ref_point = &spline->points[point_index + 1]; + new_point = &spline->points[point_index]; + *ref_point = *new_point; + memset(new_point, 0, sizeof(*new_point)); + } + else { + ref_point = &spline->points[point_index]; + new_point = &spline->points[point_index + 1]; + } + + masklay->act_point = new_point; + + setup_vertex_point(C, mask, spline, new_point, co, NULL, 0.5f, ref_point, FALSE); + + if (masklay->splines_shapes.first) { + point_index = (((int)(new_point - spline->points) + 0) % spline->tot_point); + BKE_mask_layer_shape_changed_add(masklay, BKE_mask_layer_shape_spline_to_index(masklay, spline) + point_index, TRUE, TRUE); + } + + if (do_recalc_src) { + /* TODO, update keyframes in time */ + BKE_mask_calc_handle_point_auto(spline, ref_point, FALSE); + } + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); + + return TRUE; +} + +static int add_vertex_new(bContext *C, Mask *mask, MaskLayer *masklay, const float co[2]) +{ + MaskSpline *spline; + MaskSplinePoint *point; + MaskSplinePoint *new_point = NULL, *ref_point = NULL; + + if (!masklay) { + /* if there's no masklay currently operationg on, create new one */ + masklay = BKE_mask_layer_new(mask, ""); + mask->masklay_act = mask->masklay_tot - 1; + spline = NULL; + point = NULL; + } + else { + finSelectedSplinePoint(masklay, &spline, &point, TRUE); + } + + ED_mask_select_toggle_all(mask, SEL_DESELECT); + + if (!spline) { + /* no selected splines in active masklay, create new spline */ + spline = BKE_mask_spline_add(masklay); + } + + masklay->act_spline = spline; + new_point = spline->points; + + masklay->act_point = new_point; + + setup_vertex_point(C, mask, spline, new_point, co, NULL, 0.5f, ref_point, FALSE); + + { + int point_index = (((int)(new_point - spline->points) + 0) % spline->tot_point); + BKE_mask_layer_shape_changed_add(masklay, BKE_mask_layer_shape_spline_to_index(masklay, spline) + point_index, TRUE, TRUE); + } + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); + + return TRUE; +} + +static int add_vertex_exec(bContext *C, wmOperator *op) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + + float co[2]; + + masklay = BKE_mask_layer_active(mask); + + if (masklay && masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + masklay = NULL; + } + + RNA_float_get_array(op->ptr, "location", co); + + if (masklay && masklay->act_point && MASKPOINT_ISSEL_ANY(masklay->act_point)) { + + /* cheap trick - double click for cyclic */ + MaskSpline *spline = masklay->act_spline; + MaskSplinePoint *point = masklay->act_point; + + int is_sta = (point == spline->points); + int is_end = (point == &spline->points[spline->tot_point - 1]); + + /* then check are we overlapping the mouse */ + if ((is_sta || is_end) && equals_v2v2(co, point->bezt.vec[1])) { + if (spline->flag & MASK_SPLINE_CYCLIC) { + /* nothing to do */ + return OPERATOR_CANCELLED; + } + else { + /* recalc the connecting point as well to make a nice even curve */ + MaskSplinePoint *point_other = is_end ? spline->points : &spline->points[spline->tot_point - 1]; + spline->flag |= MASK_SPLINE_CYCLIC; + + /* TODO, update keyframes in time */ + BKE_mask_calc_handle_point_auto(spline, point, FALSE); + BKE_mask_calc_handle_point_auto(spline, point_other, FALSE); + + /* TODO: only update this spline */ + BKE_mask_update_display(mask, CTX_data_scene(C)->r.cfra); + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); + return OPERATOR_FINISHED; + } + } + + if (!add_vertex_subdivide(C, mask, co)) { + if (!add_vertex_extrude(C, mask, masklay, co)) { + return OPERATOR_CANCELLED; + } + } + } + else { + if (!add_vertex_subdivide(C, mask, co)) { + if (!add_vertex_new(C, mask, masklay, co)) { + return OPERATOR_CANCELLED; + } + } + } + + /* TODO: only update this spline */ + BKE_mask_update_display(mask, CTX_data_scene(C)->r.cfra); + + return OPERATOR_FINISHED; +} + +static int add_vertex_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + float co[2]; + + ED_mask_mouse_pos(C, event, co); + + RNA_float_set_array(op->ptr, "location", co); + + return add_vertex_exec(C, op); +} + +void MASK_OT_add_vertex(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Add Vertex"; + ot->description = "Add vertex to active spline"; + ot->idname = "MASK_OT_add_vertex"; + + /* api callbacks */ + ot->exec = add_vertex_exec; + ot->invoke = add_vertex_invoke; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MIN, FLT_MAX, + "Location", "Location of vertex in normalized space", -1.0f, 1.0f); +} + +/******************** add feather vertex *********************/ + +static int add_feather_vertex_exec(bContext *C, wmOperator *op) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + MaskSpline *spline; + MaskSplinePoint *point = NULL; + const float threshold = 9; + float co[2], u; + + RNA_float_get_array(op->ptr, "location", co); + + point = ED_mask_point_find_nearest(C, mask, co, threshold, NULL, NULL, NULL, NULL); + if (point) + return OPERATOR_FINISHED; + + if (find_nearest_diff_point(C, mask, co, threshold, TRUE, &masklay, &spline, &point, &u, NULL, TRUE)) { + Scene *scene = CTX_data_scene(C); + float w = BKE_mask_point_weight(spline, point, u); + float weight_scalar = BKE_mask_point_weight_scalar(spline, point, u); + + if (weight_scalar != 0.0f) { + w = w / weight_scalar; + } + + BKE_mask_point_add_uw(point, u, w); + + BKE_mask_update_display(mask, scene->r.cfra); + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); + + DAG_id_tag_update(&mask->id, 0); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +static int add_feather_vertex_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + float co[2]; + + ED_mask_mouse_pos(C, event, co); + + RNA_float_set_array(op->ptr, "location", co); + + return add_feather_vertex_exec(C, op); +} + +void MASK_OT_add_feather_vertex(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Add feather Vertex"; + ot->description = "Add vertex to feather"; + ot->idname = "MASK_OT_add_feather_vertex"; + + /* api callbacks */ + ot->exec = add_feather_vertex_exec; + ot->invoke = add_feather_vertex_invoke; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MIN, FLT_MAX, + "Location", "Location of vertex in normalized space", -1.0f, 1.0f); +} diff --git a/source/blender/editors/mask/mask_draw.c b/source/blender/editors/mask/mask_draw.c new file mode 100644 index 00000000000..678186f0e8c --- /dev/null +++ b/source/blender/editors/mask/mask_draw.c @@ -0,0 +1,450 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/mask/mask_draw.c + * \ingroup edmask + */ + +#include "MEM_guardedalloc.h" + +#include "BLI_utildefines.h" + +#include "BKE_context.h" +#include "BKE_mask.h" + +#include "DNA_mask_types.h" +#include "DNA_object_types.h" /* SELECT */ + +#include "ED_mask.h" /* own include */ +#include "BIF_gl.h" + +#include "UI_resources.h" + +#include "mask_intern.h" /* own include */ + +static void mask_spline_color_get(MaskLayer *masklay, MaskSpline *spline, const int is_sel, + unsigned char r_rgb[4]) +{ + if (is_sel) { + if (masklay->act_spline == spline) { + r_rgb[0] = r_rgb[1] = r_rgb[2] = 255; + } + else { + r_rgb[0] = 255; + r_rgb[1] = r_rgb[2] = 0; + } + } + else { + r_rgb[0] = 128; + r_rgb[1] = r_rgb[2] = 0; + } + + r_rgb[3] = 255; +} + +static void mask_spline_feather_color_get(MaskLayer *UNUSED(masklay), MaskSpline *UNUSED(spline), const int is_sel, + unsigned char r_rgb[4]) +{ + if (is_sel) { + r_rgb[1] = 255; + r_rgb[0] = r_rgb[2] = 0; + } + else { + r_rgb[1] = 128; + r_rgb[0] = r_rgb[2] = 0; + } + + r_rgb[3] = 255; +} + +#if 0 +static void draw_spline_parents(MaskLayer *UNUSED(masklay), MaskSpline *spline) +{ + int i; + MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline); + + if (!spline->tot_point) + return; + + glColor3ub(0, 0, 0); + glEnable(GL_LINE_STIPPLE); + glLineStipple(1, 0xAAAA); + + glBegin(GL_LINES); + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &points_array[i]; + BezTriple *bezt = &point->bezt; + + if (point->parent.id) { + glVertex2f(bezt->vec[1][0], + bezt->vec[1][1]); + + glVertex2f(bezt->vec[1][0] - point->parent.offset[0], + bezt->vec[1][1] - point->parent.offset[1]); + } + } + + glEnd(); + + glDisable(GL_LINE_STIPPLE); +} +#endif + +/* return non-zero if spline is selected */ +static void draw_spline_points(MaskLayer *masklay, MaskSpline *spline) +{ + const int is_spline_sel = (spline->flag & SELECT) && (masklay->restrictflag & MASK_RESTRICT_SELECT) == 0; + unsigned char rgb_spline[4]; + MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline); + + int i, hsize, tot_feather_point; + float (*feather_points)[2], (*fp)[2]; + + if (!spline->tot_point) + return; + + hsize = UI_GetThemeValuef(TH_HANDLE_VERTEX_SIZE); + + glPointSize(hsize); + + mask_spline_color_get(masklay, spline, is_spline_sel, rgb_spline); + + /* feather points */ + feather_points = fp = BKE_mask_spline_feather_points(spline, &tot_feather_point); + for (i = 0; i < spline->tot_point; i++) { + + /* watch it! this is intentionally not the deform array, only check for sel */ + MaskSplinePoint *point = &spline->points[i]; + + int j; + + for (j = 0; j < point->tot_uw + 1; j++) { + int sel = FALSE; + + if (j == 0) { + sel = MASKPOINT_ISSEL_ANY(point); + } + else { + sel = point->uw[j - 1].flag & SELECT; + } + + if (sel) { + if (point == masklay->act_point) + glColor3f(1.0f, 1.0f, 1.0f); + else + glColor3f(1.0f, 1.0f, 0.0f); + } + else { + glColor3f(0.5f, 0.5f, 0.0f); + } + + glBegin(GL_POINTS); + glVertex2fv(*fp); + glEnd(); + + fp++; + } + } + MEM_freeN(feather_points); + + /* control points */ + for (i = 0; i < spline->tot_point; i++) { + + /* watch it! this is intentionally not the deform array, only check for sel */ + MaskSplinePoint *point = &spline->points[i]; + MaskSplinePoint *point_deform = &points_array[i]; + BezTriple *bezt = &point_deform->bezt; + + float handle[2]; + float *vert = bezt->vec[1]; + int has_handle = BKE_mask_point_has_handle(point); + + BKE_mask_point_handle(point_deform, handle); + + /* draw handle segment */ + if (has_handle) { + glColor3ubv(rgb_spline); + + glBegin(GL_LINES); + glVertex3fv(vert); + glVertex3fv(handle); + glEnd(); + } + + /* draw CV point */ + if (MASKPOINT_ISSEL_KNOT(point)) { + if (point == masklay->act_point) + glColor3f(1.0f, 1.0f, 1.0f); + else + glColor3f(1.0f, 1.0f, 0.0f); + } + else + glColor3f(0.5f, 0.5f, 0.0f); + + glBegin(GL_POINTS); + glVertex3fv(vert); + glEnd(); + + /* draw handle points */ + if (has_handle) { + if (MASKPOINT_ISSEL_HANDLE(point)) { + if (point == masklay->act_point) + glColor3f(1.0f, 1.0f, 1.0f); + else + glColor3f(1.0f, 1.0f, 0.0f); + } + else { + glColor3f(0.5f, 0.5f, 0.0f); + } + + glBegin(GL_POINTS); + glVertex3fv(handle); + glEnd(); + } + } + + glPointSize(1.0f); +} + +/* #define USE_XOR */ + +static void mask_color_active_tint(unsigned char r_rgb[4], const unsigned char rgb[4], const short is_active) +{ + if (!is_active) { + r_rgb[0] = (unsigned char)((((int)(rgb[0])) + 128) / 2); + r_rgb[1] = (unsigned char)((((int)(rgb[1])) + 128) / 2); + r_rgb[2] = (unsigned char)((((int)(rgb[2])) + 128) / 2); + r_rgb[3] = rgb[3]; + } + else { + *(unsigned int *)r_rgb = *(const unsigned int *)rgb; + } +} + +static void mask_draw_curve_type(MaskSpline *spline, float (*points)[2], int tot_point, + const short is_feather, const short is_smooth, const short is_active, + const unsigned char rgb_spline[4], const char draw_type) +{ + const int draw_method = (spline->flag & MASK_SPLINE_CYCLIC) ? GL_LINE_LOOP : GL_LINE_STRIP; + const unsigned char rgb_black[4] = {0x00, 0x00, 0x00, 0xff}; +// const unsigned char rgb_white[4] = {0xff, 0xff, 0xff, 0xff}; + unsigned char rgb_tmp[4]; + + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(2, GL_FLOAT, 0, points); + + switch (draw_type) { + + case MASK_DT_OUTLINE: + glLineWidth(3); + + mask_color_active_tint(rgb_tmp, rgb_black, is_active); + glColor4ubv(rgb_tmp); + + glDrawArrays(draw_method, 0, tot_point); + + glLineWidth(1); + mask_color_active_tint(rgb_tmp, rgb_spline, is_active); + glColor4ubv(rgb_tmp); + glDrawArrays(draw_method, 0, tot_point); + + break; + + case MASK_DT_DASH: + default: + glEnable(GL_LINE_STIPPLE); + +#ifdef USE_XOR + glEnable(GL_COLOR_LOGIC_OP); + glLogicOp(GL_OR); +#endif + mask_color_active_tint(rgb_tmp, rgb_spline, is_active); + glColor4ubv(rgb_tmp); + glLineStipple(3, 0xaaaa); + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(2, GL_FLOAT, 0, points); + glDrawArrays(draw_method, 0, tot_point); + +#ifdef USE_XOR + glDisable(GL_COLOR_LOGIC_OP); +#endif + mask_color_active_tint(rgb_tmp, rgb_black, is_active); + glColor4ubv(rgb_tmp); + glLineStipple(3, 0x5555); + glDrawArrays(draw_method, 0, tot_point); + + glDisable(GL_LINE_STIPPLE); + break; + + + case MASK_DT_BLACK: + case MASK_DT_WHITE: + if (draw_type == MASK_DT_BLACK) { rgb_tmp[0] = rgb_tmp[1] = rgb_tmp[2] = 0; } + else { rgb_tmp[0] = rgb_tmp[1] = rgb_tmp[2] = 255; } + /* alpha values seem too low but gl draws many points that compensate for it */ + if (is_feather) { rgb_tmp[3] = 64; } + else { rgb_tmp[3] = 128; } + + if (is_feather) { + rgb_tmp[0] = (unsigned char)(((short)rgb_tmp[0] + (short)rgb_spline[0]) / 2); + rgb_tmp[1] = (unsigned char)(((short)rgb_tmp[1] + (short)rgb_spline[1]) / 2); + rgb_tmp[2] = (unsigned char)(((short)rgb_tmp[2] + (short)rgb_spline[2]) / 2); + } + + if (is_smooth == FALSE && is_feather) { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + + mask_color_active_tint(rgb_tmp, rgb_tmp, is_active); + glColor4ubv(rgb_tmp); + + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(2, GL_FLOAT, 0, points); + glDrawArrays(draw_method, 0, tot_point); + + glDrawArrays(draw_method, 0, tot_point); + + if (is_smooth == FALSE && is_feather) { + glDisable(GL_BLEND); + } + + break; + } + + glDisableClientState(GL_VERTEX_ARRAY); + +} + +static void draw_spline_curve(MaskLayer *masklay, MaskSpline *spline, + const char draw_flag, const char draw_type, + const short is_active, + int width, int height) +{ + unsigned char rgb_tmp[4]; + + const short is_spline_sel = (spline->flag & SELECT) && (masklay->restrictflag & MASK_RESTRICT_SELECT) == 0; + const short is_smooth = (draw_flag & MASK_DRAWFLAG_SMOOTH); + + int tot_diff_point; + float (*diff_points)[2]; + + int tot_feather_point; + float (*feather_points)[2]; + + diff_points = BKE_mask_spline_differentiate_with_resolution(spline, width, height, &tot_diff_point); + + if (!diff_points) + return; + + if (is_smooth) { + glEnable(GL_LINE_SMOOTH); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + + feather_points = BKE_mask_spline_feather_differentiated_points_with_resolution(spline, width, height, &tot_feather_point); + + /* draw feather */ + mask_spline_feather_color_get(masklay, spline, is_spline_sel, rgb_tmp); + mask_draw_curve_type(spline, feather_points, tot_feather_point, + TRUE, is_smooth, is_active, + rgb_tmp, draw_type); + MEM_freeN(feather_points); + + /* draw main curve */ + mask_spline_color_get(masklay, spline, is_spline_sel, rgb_tmp); + mask_draw_curve_type(spline, diff_points, tot_diff_point, + FALSE, is_smooth, is_active, + rgb_tmp, draw_type); + MEM_freeN(diff_points); + + if (draw_flag & MASK_DRAWFLAG_SMOOTH) { + glDisable(GL_LINE_SMOOTH); + glDisable(GL_BLEND); + } + + (void)draw_type; +} + +static void draw_masklays(Mask *mask, const char draw_flag, const char draw_type, + int width, int height) +{ + MaskLayer *masklay; + int i; + + for (masklay = mask->masklayers.first, i = 0; masklay; masklay = masklay->next, i++) { + MaskSpline *spline; + const short is_active = (i == mask->masklay_act); + + if (masklay->restrictflag & MASK_RESTRICT_VIEW) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + + /* draw curve itself first... */ + draw_spline_curve(masklay, spline, draw_flag, draw_type, is_active, width, height); + +// draw_spline_parents(masklay, spline); + + if (!(masklay->restrictflag & MASK_RESTRICT_SELECT)) { + /* ...and then handles over the curve so they're nicely visible */ + draw_spline_points(masklay, spline); + } + + /* show undeform for testing */ + if (0) { + void *back = spline->points_deform; + + spline->points_deform = NULL; + draw_spline_curve(masklay, spline, draw_flag, draw_type, is_active, width, height); +// draw_spline_parents(masklay, spline); + draw_spline_points(masklay, spline); + spline->points_deform = back; + } + } + } +} + +void ED_mask_draw(const bContext *C, + const char draw_flag, const char draw_type) +{ + Mask *mask = CTX_data_edit_mask(C); + int width, height; + + if (!mask) + return; + + /* TODO: for now, in the future better to make sure all utility functions + * are using const specifier for non-changing pointers + */ + ED_mask_size((bContext *)C, &width, &height); + + draw_masklays(mask, draw_flag, draw_type, width, height); +} diff --git a/source/blender/editors/mask/mask_edit.c b/source/blender/editors/mask/mask_edit.c new file mode 100644 index 00000000000..52711c8da55 --- /dev/null +++ b/source/blender/editors/mask/mask_edit.c @@ -0,0 +1,344 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/mask/mask_edit.c + * \ingroup edmask + */ + + +#include "BLI_math.h" + +#include "BKE_context.h" +#include "BKE_mask.h" + +#include "DNA_scene_types.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_screen.h" +#include "ED_mask.h" /* own include */ +#include "ED_object.h" /* ED_keymap_proportional_maskmode only */ +#include "ED_clip.h" +#include "ED_transform.h" + +#include "RNA_access.h" + +#include "mask_intern.h" /* own include */ + +/********************** generic poll functions *********************/ + +int ED_maskedit_poll(bContext *C) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc) { + return ED_space_clip_maskedit_poll(C); + } + + return FALSE; +} + +int ED_maskedit_mask_poll(bContext *C) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc) { + return ED_space_clip_maskedit_mask_poll(C); + } + + return FALSE; +} + +/********************** registration *********************/ + +void ED_mask_mouse_pos(bContext *C, wmEvent *event, float co[2]) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc) { + ED_clip_mouse_pos(C, event, co); + BKE_mask_coord_from_movieclip(sc->clip, &sc->user, co, co); + } + else { + /* possible other spaces from which mask editing is available */ + zero_v2(co); + } +} + +/* input: x/y - mval space + * output: xr/yr - mask point space */ +void ED_mask_point_pos(bContext *C, float x, float y, float *xr, float *yr) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + float co[2]; + + if (sc) { + ED_clip_point_stable_pos(C, x, y, &co[0], &co[1]); + BKE_mask_coord_from_movieclip(sc->clip, &sc->user, co, co); + } + else { + /* possible other spaces from which mask editing is available */ + zero_v2(co); + } + + *xr = co[0]; + *yr = co[1]; +} + +void ED_mask_point_pos__reverse(bContext *C, float x, float y, float *xr, float *yr) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + ARegion *ar = CTX_wm_region(C); + + float co[2]; + + if (sc && ar) { + co[0] = x; + co[1] = y; + BKE_mask_coord_to_movieclip(sc->clip, &sc->user, co, co); + ED_clip_point_stable_pos__reverse(sc, ar, co, co); + } + else { + /* possible other spaces from which mask editing is available */ + zero_v2(co); + } + + *xr = co[0]; + *yr = co[1]; +} + +void ED_mask_size(bContext *C, int *width, int *height) +{ + ScrArea *sa = CTX_wm_area(C); + if (sa && sa->spacedata.first) { + if (sa->spacetype == SPACE_CLIP) { + SpaceClip *sc = sa->spacedata.first; + ED_space_clip_mask_size(sc, width, height); + return; + } + else if (sa->spacetype == SPACE_SEQ) { + Scene *scene = CTX_data_scene(C); + *width = (scene->r.size * scene->r.xsch) / 100; + *height = (scene->r.size * scene->r.ysch) / 100; + return; + } + } + + /* possible other spaces from which mask editing is available */ + *width = 0; + *height = 0; +} + +void ED_mask_aspect(bContext *C, float *aspx, float *aspy) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc) { + ED_space_clip_mask_aspect(sc, aspx, aspy); + } + else { + /* possible other spaces from which mask editing is available */ + *aspx = 1.0f; + *aspy = 1.0f; + } +} + +void ED_mask_pixelspace_factor(bContext *C, float *scalex, float *scaley) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc) { + ARegion *ar = CTX_wm_region(C); + int width, height; + float zoomx, zoomy, aspx, aspy; + + ED_space_clip_size(sc, &width, &height); + ED_space_clip_zoom(sc, ar, &zoomx, &zoomy); + ED_space_clip_aspect(sc, &aspx, &aspy); + + *scalex = ((float)width * aspx) * zoomx; + *scaley = ((float)height * aspy) * zoomy; + } + else { + /* possible other spaces from which mask editing is available */ + *scalex = 1.0f; + *scaley = 1.0f; + } +} + +/********************** registration *********************/ + +void ED_operatortypes_mask(void) +{ + WM_operatortype_append(MASK_OT_new); + + /* mask layers */ + WM_operatortype_append(MASK_OT_layer_new); + WM_operatortype_append(MASK_OT_layer_remove); + + /* add */ + WM_operatortype_append(MASK_OT_add_vertex); + WM_operatortype_append(MASK_OT_add_feather_vertex); + + /* geometry */ + WM_operatortype_append(MASK_OT_switch_direction); + WM_operatortype_append(MASK_OT_normals_make_consistent); + WM_operatortype_append(MASK_OT_delete); + + /* select */ + WM_operatortype_append(MASK_OT_select); + WM_operatortype_append(MASK_OT_select_all); + WM_operatortype_append(MASK_OT_select_border); + WM_operatortype_append(MASK_OT_select_lasso); + WM_operatortype_append(MASK_OT_select_circle); + WM_operatortype_append(MASK_OT_select_linked_pick); + WM_operatortype_append(MASK_OT_select_linked); + + /* hide/reveal */ + WM_operatortype_append(MASK_OT_hide_view_clear); + WM_operatortype_append(MASK_OT_hide_view_set); + + /* feather */ + WM_operatortype_append(MASK_OT_feather_weight_clear); + + /* shape */ + WM_operatortype_append(MASK_OT_slide_point); + WM_operatortype_append(MASK_OT_cyclic_toggle); + WM_operatortype_append(MASK_OT_handle_type_set); + + /* relationships */ + WM_operatortype_append(MASK_OT_parent_set); + WM_operatortype_append(MASK_OT_parent_clear); + + /* shapekeys */ + WM_operatortype_append(MASK_OT_shape_key_insert); + WM_operatortype_append(MASK_OT_shape_key_clear); + WM_operatortype_append(MASK_OT_shape_key_feather_reset); +} + +void ED_keymap_mask(wmKeyConfig *keyconf) +{ + wmKeyMap *keymap; + wmKeyMapItem *kmi; + + keymap = WM_keymap_find(keyconf, "Mask Editing", 0, 0); + keymap->poll = ED_maskedit_poll; + + WM_keymap_add_item(keymap, "MASK_OT_new", NKEY, KM_PRESS, KM_ALT, 0); + + /* mask mode supports PET now */ + ED_keymap_proportional_cycle(keyconf, keymap); + ED_keymap_proportional_maskmode(keyconf, keymap); + + /* geometry */ + WM_keymap_add_item(keymap, "MASK_OT_add_vertex_slide", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "MASK_OT_add_feather_vertex_slide", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "MASK_OT_delete", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "MASK_OT_delete", DELKEY, KM_PRESS, 0, 0); + + /* selection */ + kmi = WM_keymap_add_item(keymap, "MASK_OT_select", SELECTMOUSE, KM_PRESS, 0, 0); + RNA_boolean_set(kmi->ptr, "extend", FALSE); + RNA_boolean_set(kmi->ptr, "deselect", FALSE); + RNA_boolean_set(kmi->ptr, "toggle", FALSE); + kmi = WM_keymap_add_item(keymap, "MASK_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); + RNA_boolean_set(kmi->ptr, "extend", FALSE); + RNA_boolean_set(kmi->ptr, "deselect", FALSE); + RNA_boolean_set(kmi->ptr, "toggle", TRUE); + + kmi = WM_keymap_add_item(keymap, "MASK_OT_select_all", AKEY, KM_PRESS, 0, 0); + RNA_enum_set(kmi->ptr, "action", SEL_TOGGLE); + kmi = WM_keymap_add_item(keymap, "MASK_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0); + RNA_enum_set(kmi->ptr, "action", SEL_INVERT); + + WM_keymap_add_item(keymap, "MASK_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0); + kmi = WM_keymap_add_item(keymap, "MASK_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0); + RNA_boolean_set(kmi->ptr, "deselect", FALSE); + kmi = WM_keymap_add_item(keymap, "MASK_OT_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0); + RNA_boolean_set(kmi->ptr, "deselect", TRUE); + + WM_keymap_add_item(keymap, "MASK_OT_select_border", BKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "MASK_OT_select_circle", CKEY, KM_PRESS, 0, 0); + + kmi = WM_keymap_add_item(keymap, "MASK_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL | KM_ALT, 0); + RNA_boolean_set(kmi->ptr, "deselect", FALSE); + kmi = WM_keymap_add_item(keymap, "MASK_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL | KM_SHIFT | KM_ALT, 0); + RNA_boolean_set(kmi->ptr, "deselect", TRUE); + + /* hide/reveal */ + WM_keymap_add_item(keymap, "MASK_OT_hide_view_clear", HKEY, KM_PRESS, KM_ALT, 0); + kmi = WM_keymap_add_item(keymap, "MASK_OT_hide_view_set", HKEY, KM_PRESS, 0, 0); + RNA_boolean_set(kmi->ptr, "unselected", FALSE); + + kmi = WM_keymap_add_item(keymap, "MASK_OT_hide_view_set", HKEY, KM_PRESS, KM_SHIFT, 0); + RNA_boolean_set(kmi->ptr, "unselected", TRUE); + + /* select clip while in maker view, + * this matches View3D functionality where you can select an + * object while in editmode to allow vertex parenting */ + kmi = WM_keymap_add_item(keymap, "CLIP_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL, 0); + RNA_boolean_set(kmi->ptr, "extend", FALSE); + + /* shape */ + WM_keymap_add_item(keymap, "MASK_OT_cyclic_toggle", CKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_add_item(keymap, "MASK_OT_slide_point", LEFTMOUSE, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "MASK_OT_handle_type_set", VKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "MASK_OT_normals_make_consistent", NKEY, KM_PRESS, KM_CTRL, 0); + // WM_keymap_add_item(keymap, "MASK_OT_feather_weight_clear", SKEY, KM_PRESS, KM_ALT, 0); + /* ... matches curve editmode */ + RNA_enum_set(WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0)->ptr, "mode", TFM_MASK_SHRINKFATTEN); + + /* relationships */ + WM_keymap_add_item(keymap, "MASK_OT_parent_set", PKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "MASK_OT_parent_clear", PKEY, KM_PRESS, KM_ALT, 0); + + WM_keymap_add_item(keymap, "MASK_OT_shape_key_insert", IKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "MASK_OT_shape_key_clear", IKEY, KM_PRESS, KM_ALT, 0); + + + transform_keymap_for_space(keyconf, keymap, SPACE_CLIP); +} + +void ED_operatormacros_mask(void) +{ + /* XXX: just for sample */ + wmOperatorType *ot; + wmOperatorTypeMacro *otmacro; + + ot = WM_operatortype_append_macro("MASK_OT_add_vertex_slide", "Add Vertex and Slide", "Add new vertex and slide it", OPTYPE_UNDO | OPTYPE_REGISTER); + ot->description = "Add new vertex and slide it"; + WM_operatortype_macro_define(ot, "MASK_OT_add_vertex"); + otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); + RNA_boolean_set(otmacro->ptr, "release_confirm", TRUE); + + ot = WM_operatortype_append_macro("MASK_OT_add_feather_vertex_slide", "Add Feather Vertex and Slide", "Add new vertex to feater and slide it", OPTYPE_UNDO | OPTYPE_REGISTER); + ot->description = "Add new feather vertex and slide it"; + WM_operatortype_macro_define(ot, "MASK_OT_add_feather_vertex"); + otmacro = WM_operatortype_macro_define(ot, "MASK_OT_slide_point"); + RNA_boolean_set(otmacro->ptr, "slide_feather", TRUE); +} diff --git a/source/blender/editors/mask/mask_editaction.c b/source/blender/editors/mask/mask_editaction.c new file mode 100644 index 00000000000..3836b393bf8 --- /dev/null +++ b/source/blender/editors/mask/mask_editaction.c @@ -0,0 +1,250 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2008, Blender Foundation + * This is a new part of Blender + * + * Contributor(s): Joshua Leung + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/mask/mask_editaction.c + * \ingroup edgpencil + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <stddef.h> +#include <math.h> + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_math.h" +#include "BLI_utildefines.h" + +#include "DNA_mask_types.h" +#include "DNA_object_types.h" +#include "DNA_scene_types.h" + +#include "BKE_fcurve.h" +#include "BKE_mask.h" + +#include "ED_anim_api.h" +#include "ED_keyframes_edit.h" + +/* ***************************************** */ +/* NOTE ABOUT THIS FILE: + * This file contains code for editing Grease Pencil data in the Action Editor + * as a 'keyframes', so that a user can adjust the timing of Grease Pencil drawings. + * Therefore, this file mostly contains functions for selecting Grease-Pencil frames. + */ +/* ***************************************** */ +/* Generics - Loopers */ + +/* Loops over the gp-frames for a gp-layer, and applies the given callback */ +short ED_masklayer_frames_looper(MaskLayer *masklay, Scene *scene, short (*masklay_shape_cb)(MaskLayerShape *, Scene *)) +{ + MaskLayerShape *masklay_shape; + + /* error checker */ + if (masklay == NULL) + return 0; + + /* do loop */ + for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape->next) { + /* execute callback */ + if (masklay_shape_cb(masklay_shape, scene)) + return 1; + } + + /* nothing to return */ + return 0; +} + +/* ****************************************** */ +/* Data Conversion Tools */ + +/* make a listing all the gp-frames in a layer as cfraelems */ +void ED_masklayer_make_cfra_list(MaskLayer *masklay, ListBase *elems, short onlysel) +{ + MaskLayerShape *masklay_shape; + CfraElem *ce; + + /* error checking */ + if (ELEM(NULL, masklay, elems)) + return; + + /* loop through gp-frames, adding */ + for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape->next) { + if ((onlysel == 0) || (masklay_shape->flag & MASK_SHAPE_SELECT)) { + ce = MEM_callocN(sizeof(CfraElem), "CfraElem"); + + ce->cfra = (float)masklay_shape->frame; + ce->sel = (masklay_shape->flag & MASK_SHAPE_SELECT) ? 1 : 0; + + BLI_addtail(elems, ce); + } + } +} + +/* ***************************************** */ +/* Selection Tools */ + +/* check if one of the frames in this layer is selected */ +short ED_masklayer_frame_select_check(MaskLayer *masklay) +{ + MaskLayerShape *masklay_shape; + + /* error checking */ + if (masklay == NULL) + return 0; + + /* stop at the first one found */ + for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape->next) { + if (masklay_shape->flag & MASK_SHAPE_SELECT) + return 1; + } + + /* not found */ + return 0; +} + +/* helper function - select gp-frame based on SELECT_* mode */ +static void masklayshape_select(MaskLayerShape *masklay_shape, short select_mode) +{ + if (masklay_shape == NULL) + return; + + switch (select_mode) { + case SELECT_ADD: + masklay_shape->flag |= MASK_SHAPE_SELECT; + break; + case SELECT_SUBTRACT: + masklay_shape->flag &= ~MASK_SHAPE_SELECT; + break; + case SELECT_INVERT: + masklay_shape->flag ^= MASK_SHAPE_SELECT; + break; + } +} + +/* set all/none/invert select (like above, but with SELECT_* modes) */ +void ED_mask_select_frames(MaskLayer *masklay, short select_mode) +{ + MaskLayerShape *masklay_shape; + + /* error checking */ + if (masklay == NULL) + return; + + /* handle according to mode */ + for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape->next) { + masklayshape_select(masklay_shape, select_mode); + } +} + +/* set all/none/invert select */ +void ED_masklayer_frame_select_set(MaskLayer *masklay, short mode) +{ + /* error checking */ + if (masklay == NULL) + return; + + /* now call the standard function */ + ED_mask_select_frames(masklay, mode); +} + +/* select the frame in this layer that occurs on this frame (there should only be one at most) */ +void ED_mask_select_frame(MaskLayer *masklay, int selx, short select_mode) +{ + MaskLayerShape *masklay_shape; + + if (masklay == NULL) + return; + + masklay_shape = BKE_mask_layer_shape_find_frame(masklay, selx); + + if (masklay_shape) { + masklayshape_select(masklay_shape, select_mode); + } +} + +/* select the frames in this layer that occur within the bounds specified */ +void ED_masklayer_frames_select_border(MaskLayer *masklay, float min, float max, short select_mode) +{ + MaskLayerShape *masklay_shape; + + if (masklay == NULL) + return; + + /* only select those frames which are in bounds */ + for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape->next) { + if (IN_RANGE(masklay_shape->frame, min, max)) + masklayshape_select(masklay_shape, select_mode); + } +} + +/* ***************************************** */ +/* Frame Editing Tools */ + +/* Delete selected frames */ +void ED_masklayer_frames_delete(MaskLayer *masklay) +{ + MaskLayerShape *masklay_shape, *masklay_shape_next; + + /* error checking */ + if (masklay == NULL) + return; + + /* check for frames to delete */ + for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape_next) { + masklay_shape_next = masklay_shape->next; + + if (masklay_shape->flag & MASK_SHAPE_SELECT) + BKE_mask_layer_shape_unlink(masklay, masklay_shape); + } +} + +/* Duplicate selected frames from given gp-layer */ +void ED_masklayer_frames_duplicate(MaskLayer *masklay) +{ + MaskLayerShape *masklay_shape, *gpfn; + + /* error checking */ + if (masklay == NULL) + return; + + /* duplicate selected frames */ + for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = gpfn) { + gpfn = masklay_shape->next; + + /* duplicate this frame */ + if (masklay_shape->flag & MASK_SHAPE_SELECT) { + MaskLayerShape *mask_shape_dupe; + + /* duplicate frame, and deselect self */ + mask_shape_dupe = BKE_mask_layer_shape_duplicate(masklay_shape); + masklay_shape->flag &= ~MASK_SHAPE_SELECT; + + // XXX - how to handle duplicate frames? + BLI_insertlinkafter(&masklay->splines_shapes, masklay_shape, mask_shape_dupe); + } + } +} diff --git a/source/blender/editors/mask/mask_intern.h b/source/blender/editors/mask/mask_intern.h new file mode 100644 index 00000000000..c34558d2a01 --- /dev/null +++ b/source/blender/editors/mask/mask_intern.h @@ -0,0 +1,114 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2011 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/mask/mask_intern.h + * \ingroup spclip + */ + +#ifndef __MASK_INTERN_H__ +#define __MASK_INTERN_H__ + +struct bContext; +struct wmEvent; +struct wmOperatorType; + +/* internal exports only */ + +/* mask_add.c */ +void MASK_OT_add_vertex(struct wmOperatorType *ot); +void MASK_OT_add_feather_vertex(struct wmOperatorType *ot); + +/* mask_ops.c */ +void MASK_OT_new(struct wmOperatorType *ot); +void MASK_OT_layer_new(struct wmOperatorType *ot); +void MASK_OT_layer_remove(struct wmOperatorType *ot); +void MASK_OT_cyclic_toggle(struct wmOperatorType *ot); + +void MASK_OT_slide_point(struct wmOperatorType *ot); + +void MASK_OT_delete(struct wmOperatorType *ot); + +void MASK_OT_hide_view_clear(struct wmOperatorType *ot); +void MASK_OT_hide_view_set(struct wmOperatorType *ot); +void MASK_OT_feather_weight_clear(struct wmOperatorType *ot); +void MASK_OT_switch_direction(struct wmOperatorType *ot); +void MASK_OT_normals_make_consistent(struct wmOperatorType *ot); + +void MASK_OT_handle_type_set(struct wmOperatorType *ot); + +int ED_mask_feather_find_nearest( + struct bContext *C, struct Mask *mask, float normal_co[2], int threshold, + struct MaskLayer **masklay_r, struct MaskSpline **spline_r, struct MaskSplinePoint **point_r, + struct MaskSplinePointUW **uw_r, float *score); + +struct MaskSplinePoint *ED_mask_point_find_nearest( + struct bContext *C, struct Mask *mask, float normal_co[2], int threshold, + struct MaskLayer **masklay_r, struct MaskSpline **spline_r, int *is_handle_r, + float *score); + +/* mask_relationships.c */ +void MASK_OT_parent_set(struct wmOperatorType *ot); +void MASK_OT_parent_clear(struct wmOperatorType *ot); + +/* mask_select.c */ +void MASK_OT_select(struct wmOperatorType *ot); +void MASK_OT_select_all(struct wmOperatorType *ot); + +void MASK_OT_select_border(struct wmOperatorType *ot); +void MASK_OT_select_lasso(struct wmOperatorType *ot); +void MASK_OT_select_circle(struct wmOperatorType *ot); +void MASK_OT_select_linked_pick(struct wmOperatorType *ot); +void MASK_OT_select_linked(struct wmOperatorType *ot); + +int ED_mask_spline_select_check(struct MaskSpline *spline); +int ED_mask_layer_select_check(struct MaskLayer *masklay); +int ED_mask_select_check(struct Mask *mask); + +void ED_mask_spline_select_set(struct MaskSpline *spline, const short do_select); +void ED_mask_layer_select_set(struct MaskLayer *masklay, const short do_select); +void ED_mask_select_toggle_all(struct Mask *mask, int action); +void ED_mask_select_flush_all(struct Mask *mask); + +/* mask_editor.c */ +int ED_maskedit_poll(struct bContext *C); +int ED_maskedit_mask_poll(struct bContext *C); + +void ED_mask_size(struct bContext *C, int *width, int *height); +void ED_mask_aspect(struct bContext *C, float *aspx, float *aspy); + +void ED_mask_pixelspace_factor(struct bContext *C, float *scalex, float *scaley); +void ED_mask_mouse_pos(struct bContext *C, struct wmEvent *event, float co[2]); + +void ED_mask_point_pos(struct bContext *C, float x, float y, float *xr, float *yr); +void ED_mask_point_pos__reverse(struct bContext *C, float x, float y, float *xr, float *yr); + +/* mask_shapekey.c */ +void MASK_OT_shape_key_insert(struct wmOperatorType *ot); +void MASK_OT_shape_key_clear(struct wmOperatorType *ot); +void MASK_OT_shape_key_feather_reset(struct wmOperatorType *ot); + +#endif /* __MASK_INTERN_H__ */ diff --git a/source/blender/editors/mask/mask_ops.c b/source/blender/editors/mask/mask_ops.c new file mode 100644 index 00000000000..b770e5e9dba --- /dev/null +++ b/source/blender/editors/mask/mask_ops.c @@ -0,0 +1,1343 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/mask/mask_ops.c + * \ingroup edmask + */ + +#include "MEM_guardedalloc.h" + +#include "BLI_listbase.h" +#include "BLI_math.h" + +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_mask.h" + +#include "DNA_scene_types.h" +#include "DNA_mask_types.h" +#include "DNA_object_types.h" /* SELECT */ + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_screen.h" +#include "ED_mask.h" +#include "ED_clip.h" +#include "ED_keyframing.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "mask_intern.h" /* own include */ + +/******************** utility functions *********************/ + +MaskSplinePoint *ED_mask_point_find_nearest(bContext *C, Mask *mask, float normal_co[2], int threshold, + MaskLayer **masklay_r, MaskSpline **spline_r, int *is_handle_r, + float *score) +{ + MaskLayer *masklay; + MaskLayer *point_masklay = NULL; + MaskSpline *point_spline = NULL; + MaskSplinePoint *point = NULL; + float co[2], aspx, aspy; + float len = FLT_MAX, scalex, scaley; + int is_handle = FALSE, width, height; + + ED_mask_size(C, &width, &height); + ED_mask_aspect(C, &aspx, &aspy); + ED_mask_pixelspace_factor(C, &scalex, &scaley); + + co[0] = normal_co[0] * scalex; + co[1] = normal_co[1] * scaley; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline); + + int i; + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *cur_point = &spline->points[i]; + MaskSplinePoint *cur_point_deform = &points_array[i]; + float cur_len, vec[2], handle[2]; + + vec[0] = cur_point_deform->bezt.vec[1][0] * scalex; + vec[1] = cur_point_deform->bezt.vec[1][1] * scaley; + + if (BKE_mask_point_has_handle(cur_point)) { + BKE_mask_point_handle(cur_point_deform, handle); + handle[0] *= scalex; + handle[1] *= scaley; + + cur_len = len_v2v2(co, handle); + + if (cur_len < len) { + point_masklay = masklay; + point_spline = spline; + point = cur_point; + len = cur_len; + is_handle = TRUE; + } + } + + cur_len = len_v2v2(co, vec); + + if (cur_len < len) { + point_spline = spline; + point_masklay = masklay; + point = cur_point; + len = cur_len; + is_handle = FALSE; + } + } + } + } + + if (len < threshold) { + if (masklay_r) + *masklay_r = point_masklay; + + if (spline_r) + *spline_r = point_spline; + + if (is_handle_r) + *is_handle_r = is_handle; + + if (score) + *score = len; + + return point; + } + + if (masklay_r) + *masklay_r = NULL; + + if (spline_r) + *spline_r = NULL; + + if (is_handle_r) + *is_handle_r = FALSE; + + return NULL; +} + +int ED_mask_feather_find_nearest(bContext *C, Mask *mask, float normal_co[2], int threshold, + MaskLayer **masklay_r, MaskSpline **spline_r, MaskSplinePoint **point_r, + MaskSplinePointUW **uw_r, float *score) +{ + MaskLayer *masklay, *point_masklay = NULL; + MaskSpline *point_spline = NULL; + MaskSplinePoint *point = NULL; + MaskSplinePointUW *uw = NULL; + float len = FLT_MAX, co[2]; + float scalex, scaley, aspx, aspy; + int width, height; + + ED_mask_size(C, &width, &height); + ED_mask_aspect(C, &aspx, &aspy); + ED_mask_pixelspace_factor(C, &scalex, &scaley); + + co[0] = normal_co[0] * scalex; + co[1] = normal_co[1] * scaley; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + + for (spline = masklay->splines.first; spline; spline = spline->next) { + //MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline); + + int i, tot_feather_point; + float (*feather_points)[2], (*fp)[2]; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + feather_points = fp = BKE_mask_spline_feather_points(spline, &tot_feather_point); + + for (i = 0; i < spline->tot_point; i++) { + int j; + MaskSplinePoint *cur_point = &spline->points[i]; + + for (j = 0; j < cur_point->tot_uw + 1; j++) { + float cur_len, vec[2]; + + vec[0] = (*fp)[0] * scalex; + vec[1] = (*fp)[1] * scaley; + + cur_len = len_v2v2(vec, co); + + if (point == NULL || cur_len < len) { + if (j == 0) + uw = NULL; + else + uw = &cur_point->uw[j - 1]; + + point_masklay = masklay; + point_spline = spline; + point = cur_point; + len = cur_len; + } + + fp++; + } + } + + MEM_freeN(feather_points); + } + } + + if (len < threshold) { + if (masklay_r) + *masklay_r = point_masklay; + + if (spline_r) + *spline_r = point_spline; + + if (point_r) + *point_r = point; + + if (uw_r) + *uw_r = uw; + + if (score) + *score = len; + + return TRUE; + } + + if (masklay_r) + *masklay_r = NULL; + + if (spline_r) + *spline_r = NULL; + + if (point_r) + *point_r = NULL; + + return FALSE; +} + + +/******************** create new mask *********************/ + +static int mask_new_exec(bContext *C, wmOperator *op) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + Mask *mask; + char name[MAX_ID_NAME - 2]; + + RNA_string_get(op->ptr, "name", name); + + mask = BKE_mask_new(name); + + if (sc) + ED_space_clip_set_mask(C, sc, mask); + + return OPERATOR_FINISHED; +} + +void MASK_OT_new(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "New Mask"; + ot->description = "Create new mask"; + ot->idname = "MASK_OT_new"; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* api callbacks */ + ot->exec = mask_new_exec; + ot->poll = ED_operator_mask; + + /* properties */ + RNA_def_string(ot->srna, "name", "", MAX_ID_NAME - 2, "Name", "Name of new mask"); +} + +/******************** create new masklay *********************/ + +static int masklay_new_exec(bContext *C, wmOperator *op) +{ + Mask *mask = CTX_data_edit_mask(C); + char name[MAX_ID_NAME - 2]; + + RNA_string_get(op->ptr, "name", name); + + BKE_mask_layer_new(mask, name); + mask->masklay_act = mask->masklay_tot - 1; + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); + + return OPERATOR_FINISHED; +} + +void MASK_OT_layer_new(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Add Mask Layer"; + ot->description = "Add new mask layer for masking"; + ot->idname = "MASK_OT_layer_new"; + + /* api callbacks */ + ot->exec = masklay_new_exec; + ot->poll = ED_maskedit_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + RNA_def_string(ot->srna, "name", "", MAX_ID_NAME - 2, "Name", "Name of new mask layer"); +} + +/******************** remove mask layer *********************/ + +static int masklay_remove_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay = BKE_mask_layer_active(mask); + + if (masklay) { + BKE_mask_layer_remove(mask, masklay); + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); + } + + return OPERATOR_FINISHED; +} + +void MASK_OT_layer_remove(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Remove Mask Layer"; + ot->description = "Remove mask layer"; + ot->idname = "MASK_OT_layer_remove"; + + /* api callbacks */ + ot->exec = masklay_remove_exec; + ot->poll = ED_maskedit_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +/******************** slide *********************/ + +enum { + SLIDE_ACTION_NONE = 0, + SLIDE_ACTION_POINT = 1, + SLIDE_ACTION_HANDLE = 2, + SLIDE_ACTION_FEATHER = 3 +}; + +typedef struct SlidePointData { + int action; + + float co[2]; + float vec[3][3]; + + Mask *mask; + MaskLayer *masklay; + MaskSpline *spline, *orig_spline; + MaskSplinePoint *point; + MaskSplinePointUW *uw; + float handle[2], no[2], feather[2]; + int width, height; + float weight; + + short curvature_only, accurate; + short initial_feather, overall_feather; +} SlidePointData; + +static int slide_point_check_initial_feather(MaskSpline *spline) +{ + int i; + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (point->bezt.weight != 0.0f) + return FALSE; + + /* comment for now. if all bezt weights are zero - this is as good-as initial */ +#if 0 + int j; + for (j = 0; j < point->tot_uw; j++) { + if (point->uw[j].w != 0.0f) + return FALSE; + } +#endif + } + + return TRUE; +} + +static void *slide_point_customdata(bContext *C, wmOperator *op, wmEvent *event) +{ + Mask *mask = CTX_data_edit_mask(C); + SlidePointData *customdata = NULL; + MaskLayer *masklay, *cv_masklay, *feather_masklay; + MaskSpline *spline, *cv_spline, *feather_spline; + MaskSplinePoint *point, *cv_point, *feather_point; + MaskSplinePointUW *uw = NULL; + int is_handle = FALSE, width, height, action = SLIDE_ACTION_NONE; + int slide_feather = RNA_boolean_get(op->ptr, "slide_feather"); + float co[2], cv_score, feather_score; + const float threshold = 19; + + ED_mask_mouse_pos(C, event, co); + ED_mask_size(C, &width, &height); + + cv_point = ED_mask_point_find_nearest(C, mask, co, threshold, &cv_masklay, &cv_spline, &is_handle, &cv_score); + + if (ED_mask_feather_find_nearest(C, mask, co, threshold, &feather_masklay, &feather_spline, &feather_point, &uw, &feather_score)) { + if (slide_feather || !cv_point || feather_score < cv_score) { + action = SLIDE_ACTION_FEATHER; + + masklay = feather_masklay; + spline = feather_spline; + point = feather_point; + } + } + + if (cv_point && action == SLIDE_ACTION_NONE) { + if (is_handle) + action = SLIDE_ACTION_HANDLE; + else + action = SLIDE_ACTION_POINT; + + masklay = cv_masklay; + spline = cv_spline; + point = cv_point; + } + + if (action != SLIDE_ACTION_NONE) { + customdata = MEM_callocN(sizeof(SlidePointData), "mask slide point data"); + + customdata->mask = mask; + customdata->masklay = masklay; + customdata->spline = spline; + customdata->point = point; + customdata->width = width; + customdata->height = height; + customdata->action = action; + customdata->uw = uw; + + if (uw) { + float co[2]; + float weight_scalar = BKE_mask_point_weight_scalar(spline, point, uw->u); + + customdata->weight = uw->w; + BKE_mask_point_segment_co(spline, point, uw->u, co); + BKE_mask_point_normal(spline, point, uw->u, customdata->no); + + madd_v2_v2v2fl(customdata->feather, co, customdata->no, uw->w * weight_scalar); + } + else { + BezTriple *bezt = &point->bezt; + + customdata->weight = bezt->weight; + BKE_mask_point_normal(spline, point, 0.0f, customdata->no); + + madd_v2_v2v2fl(customdata->feather, bezt->vec[1], customdata->no, bezt->weight); + } + + if (customdata->action == SLIDE_ACTION_FEATHER) + customdata->initial_feather = slide_point_check_initial_feather(spline); + + copy_m3_m3(customdata->vec, point->bezt.vec); + if (BKE_mask_point_has_handle(point)) + BKE_mask_point_handle(point, customdata->handle); + ED_mask_mouse_pos(C, event, customdata->co); + } + + return customdata; +} + +static int slide_point_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + SlidePointData *slidedata = slide_point_customdata(C, op, event); + + if (slidedata) { + Mask *mask = CTX_data_edit_mask(C); + + op->customdata = slidedata; + + WM_event_add_modal_handler(C, op); + + if (slidedata->uw) { + if ((slidedata->uw->flag & SELECT) == 0) { + ED_mask_select_toggle_all(mask, SEL_DESELECT); + + slidedata->uw->flag |= SELECT; + + ED_mask_select_flush_all(mask); + } + } + else if (!MASKPOINT_ISSEL_ANY(slidedata->point)) { + ED_mask_select_toggle_all(mask, SEL_DESELECT); + + BKE_mask_point_select_set(slidedata->point, TRUE); + + ED_mask_select_flush_all(mask); + } + + slidedata->masklay->act_spline = slidedata->spline; + slidedata->masklay->act_point = slidedata->point; + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + + return OPERATOR_RUNNING_MODAL; + } + + return OPERATOR_PASS_THROUGH; +} + +static void slide_point_delta_all_feather(SlidePointData *data, float delta) +{ + int i; + + for (i = 0; i < data->spline->tot_point; i++) { + MaskSplinePoint *point = &data->spline->points[i]; + MaskSplinePoint *orig_point = &data->orig_spline->points[i]; + + point->bezt.weight = orig_point->bezt.weight + delta; + if (point->bezt.weight < 0.0f) + point->bezt.weight = 0.0f; + + /* not needed anymore */ +#if 0 + int j; + for (j = 0; j < point->tot_uw; j++) { + point->uw[j].w = orig_point->uw[j].w + delta; + if (point->uw[j].w < 0.0f) + point->uw[j].w = 0.0f; + } +#endif + } +} + +static void slide_point_restore_spline(SlidePointData *data) +{ + int i; + + for (i = 0; i < data->spline->tot_point; i++) { + MaskSplinePoint *point = &data->spline->points[i]; + MaskSplinePoint *orig_point = &data->orig_spline->points[i]; + int j; + + point->bezt = orig_point->bezt; + + for (j = 0; j < point->tot_uw; j++) + point->uw[j] = orig_point->uw[j]; + } +} + +static void cancel_slide_point(SlidePointData *data) +{ + /* cancel sliding */ + + if (data->orig_spline) { + slide_point_restore_spline(data); + } + else { + if (data->action == SLIDE_ACTION_FEATHER) { + if (data->uw) + data->uw->w = data->weight; + else + data->point->bezt.weight = data->weight; + } + else { + copy_m3_m3(data->point->bezt.vec, data->vec); + } + } +} + +static void free_slide_point_data(SlidePointData *data) +{ + if (data->orig_spline) + BKE_mask_spline_free(data->orig_spline); + + MEM_freeN(data); +} + +static int slide_point_modal(bContext *C, wmOperator *op, wmEvent *event) +{ + SlidePointData *data = (SlidePointData *)op->customdata; + BezTriple *bezt = &data->point->bezt; + float co[2], dco[2]; + + switch (event->type) { + case LEFTCTRLKEY: + case RIGHTCTRLKEY: + case LEFTSHIFTKEY: + case RIGHTSHIFTKEY: + if (ELEM(event->type, LEFTCTRLKEY, RIGHTCTRLKEY)) { + if (data->action == SLIDE_ACTION_FEATHER) + data->overall_feather = event->val == KM_PRESS; + else + data->curvature_only = event->val == KM_PRESS; + } + + if (ELEM(event->type, LEFTSHIFTKEY, RIGHTSHIFTKEY)) + data->accurate = event->val == KM_PRESS; + + /* no break! update CV position */ + + case MOUSEMOVE: + ED_mask_mouse_pos(C, event, co); + sub_v2_v2v2(dco, co, data->co); + + if (data->action == SLIDE_ACTION_HANDLE) { + float delta[2], offco[2]; + + sub_v2_v2v2(delta, data->handle, data->co); + + sub_v2_v2v2(offco, co, data->co); + if (data->accurate) + mul_v2_fl(offco, 0.2f); + add_v2_v2(offco, data->co); + add_v2_v2(offco, delta); + + BKE_mask_point_set_handle(data->point, offco, data->curvature_only, data->handle, data->vec); + } + else if (data->action == SLIDE_ACTION_POINT) { + float delta[2]; + + copy_v2_v2(delta, dco); + if (data->accurate) + mul_v2_fl(delta, 0.2f); + + add_v2_v2v2(bezt->vec[0], data->vec[0], delta); + add_v2_v2v2(bezt->vec[1], data->vec[1], delta); + add_v2_v2v2(bezt->vec[2], data->vec[2], delta); + } + else if (data->action == SLIDE_ACTION_FEATHER) { + float vec[2], no[2], p[2], c[2], w, offco[2]; + float *weight = NULL; + float weight_scalar = 1.0f; + int overall_feather = data->overall_feather || data->initial_feather; + + add_v2_v2v2(offco, data->feather, dco); + + if (data->uw) { + /* project on both sides and find the closest one, + * prevents flickering when projecting onto both sides can happen */ + const float u_pos = BKE_mask_spline_project_co(data->spline, data->point, + data->uw->u, offco, MASK_PROJ_NEG); + const float u_neg = BKE_mask_spline_project_co(data->spline, data->point, + data->uw->u, offco, MASK_PROJ_POS); + float dist_pos = FLT_MAX; + float dist_neg = FLT_MAX; + float co_pos[2]; + float co_neg[2]; + float u; + + if (u_pos > 0.0f && u_pos < 1.0f) { + BKE_mask_point_segment_co(data->spline, data->point, u_pos, co_pos); + dist_pos = len_squared_v2v2(offco, co_pos); + } + + if (u_neg > 0.0f && u_neg < 1.0f) { + BKE_mask_point_segment_co(data->spline, data->point, u_neg, co_neg); + dist_neg = len_squared_v2v2(offco, co_neg); + } + + u = dist_pos < dist_neg ? u_pos : u_neg; + + if (u > 0.0f && u < 1.0f) { + data->uw->u = u; + + data->uw = BKE_mask_point_sort_uw(data->point, data->uw); + weight = &data->uw->w; + weight_scalar = BKE_mask_point_weight_scalar(data->spline, data->point, u); + if (weight_scalar != 0.0f) { + weight_scalar = 1.0f / weight_scalar; + } + + BKE_mask_point_normal(data->spline, data->point, data->uw->u, no); + BKE_mask_point_segment_co(data->spline, data->point, data->uw->u, p); + } + } + else { + weight = &bezt->weight; + /* weight_scalar = 1.0f; keep as is */ + copy_v2_v2(no, data->no); + copy_v2_v2(p, bezt->vec[1]); + } + + if (weight) { + sub_v2_v2v2(c, offco, p); + project_v2_v2v2(vec, c, no); + + w = len_v2(vec); + + if (overall_feather) { + float delta; + + if (dot_v2v2(no, vec) <= 0.0f) + w = -w; + + delta = w - data->weight; + + if (data->orig_spline == NULL) { + /* restore weight for currently sliding point, so orig_spline would be created + * with original weights used + */ + *weight = data->weight * weight_scalar; + + data->orig_spline = BKE_mask_spline_copy(data->spline); + } + + slide_point_delta_all_feather(data, delta); + } + else { + if (dot_v2v2(no, vec) <= 0.0f) + w = 0.0f; + + if (data->orig_spline) { + /* restore possible overall feather changes */ + slide_point_restore_spline(data); + + BKE_mask_spline_free(data->orig_spline); + data->orig_spline = NULL; + } + + if (weight_scalar != 0.0f) { + *weight = w * weight_scalar; + } + } + } + } + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, data->mask); + DAG_id_tag_update(&data->mask->id, 0); + + break; + + case LEFTMOUSE: + if (event->val == KM_RELEASE) { + Scene *scene = CTX_data_scene(C); + + /* dont key sliding feather uw's */ + if ((data->action == SLIDE_ACTION_FEATHER && data->uw) == FALSE) { + if (IS_AUTOKEY_ON(scene)) { + ED_mask_layer_shape_auto_key(data->masklay, CFRA); + } + } + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, data->mask); + DAG_id_tag_update(&data->mask->id, 0); + + free_slide_point_data(op->customdata); /* keep this last! */ + return OPERATOR_FINISHED; + } + + break; + + case ESCKEY: + cancel_slide_point(op->customdata); + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, data->mask); + DAG_id_tag_update(&data->mask->id, 0); + + free_slide_point_data(op->customdata); /* keep this last! */ + return OPERATOR_CANCELLED; + } + + return OPERATOR_RUNNING_MODAL; +} + +void MASK_OT_slide_point(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Slide Point"; + ot->description = "Slide control points"; + ot->idname = "MASK_OT_slide_point"; + + /* api callbacks */ + ot->invoke = slide_point_invoke; + ot->modal = slide_point_modal; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + RNA_def_boolean(ot->srna, "slide_feather", 0, "Slide Feather", "First try to slide feather instead of vertex"); +} + +/******************** toggle cyclic *********************/ + +static int cyclic_toggle_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + if (ED_mask_spline_select_check(spline)) { + spline->flag ^= MASK_SPLINE_CYCLIC; + } + } + } + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); + + return OPERATOR_FINISHED; +} + +void MASK_OT_cyclic_toggle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Toggle Cyclic"; + ot->description = "Toggle cyclic for selected splines"; + ot->idname = "MASK_OT_cyclic_toggle"; + + /* api callbacks */ + ot->exec = cyclic_toggle_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +/******************** delete *********************/ + +static void delete_feather_points(MaskSplinePoint *point) +{ + int i, count = 0; + + if (!point->tot_uw) + return; + + for (i = 0; i < point->tot_uw; i++) { + if ((point->uw[i].flag & SELECT) == 0) + count++; + } + + if (count == 0) { + MEM_freeN(point->uw); + point->uw = NULL; + point->tot_uw = 0; + } + else { + MaskSplinePointUW *new_uw; + int j = 0; + + new_uw = MEM_callocN(count * sizeof(MaskSplinePointUW), "new mask uw points"); + + for (i = 0; i < point->tot_uw; i++) { + if ((point->uw[i].flag & SELECT) == 0) { + new_uw[j++] = point->uw[i]; + } + } + + MEM_freeN(point->uw); + + point->uw = new_uw; + point->tot_uw = count; + } +} + +static int delete_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + int mask_layer_shape_ofs = 0; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + spline = masklay->splines.first; + + while (spline) { + const int tot_point_orig = spline->tot_point; + int i, count = 0; + MaskSpline *next_spline = spline->next; + + /* count unselected points */ + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (!MASKPOINT_ISSEL_ANY(point)) + count++; + } + + if (count == 0) { + + /* delete the whole spline */ + BLI_remlink(&masklay->splines, spline); + BKE_mask_spline_free(spline); + + if (spline == masklay->act_spline) { + masklay->act_spline = NULL; + masklay->act_point = NULL; + } + + BKE_mask_layer_shape_changed_remove(masklay, mask_layer_shape_ofs, tot_point_orig); + } + else { + MaskSplinePoint *new_points; + int j; + + new_points = MEM_callocN(count * sizeof(MaskSplinePoint), "deleteMaskPoints"); + + for (i = 0, j = 0; i < tot_point_orig; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (!MASKPOINT_ISSEL_ANY(point)) { + if (point == masklay->act_point) + masklay->act_point = &new_points[j]; + + delete_feather_points(point); + + new_points[j] = *point; + j++; + } + else { + if (point == masklay->act_point) + masklay->act_point = NULL; + + BKE_mask_point_free(point); + spline->tot_point--; + + BKE_mask_layer_shape_changed_remove(masklay, mask_layer_shape_ofs + j, 1); + } + } + + mask_layer_shape_ofs += spline->tot_point; + + MEM_freeN(spline->points); + spline->points = new_points; + + ED_mask_select_flush_all(mask); + } + + spline = next_spline; + } + + /* not essential but confuses users when there are keys with no data! + * assume if they delete all data from the layer they also dont care about keys */ + if (masklay->splines.first == NULL) { + BKE_mask_layer_free_shapes(masklay); + } + } + + /* TODO: only update edited splines */ + BKE_mask_update_display(mask, CTX_data_scene(C)->r.cfra); + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); + + return OPERATOR_FINISHED; +} + +void MASK_OT_delete(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Delete"; + ot->description = "Delete selected control points or splines"; + ot->idname = "MASK_OT_delete"; + + /* api callbacks */ + ot->invoke = WM_operator_confirm; + ot->exec = delete_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +/* *** switch direction *** */ +static int mask_switch_direction_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Scene *scene = CTX_data_scene(C); + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + + int change = FALSE; + + /* do actual selection */ + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + int change_layer = FALSE; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + if (ED_mask_spline_select_check(spline)) { + BKE_mask_spline_direction_switch(masklay, spline); + change = TRUE; + change_layer = TRUE; + } + } + + if (change_layer) { + if (IS_AUTOKEY_ON(scene)) { + ED_mask_layer_shape_auto_key(masklay, CFRA); + } + } + } + + if (change) { + /* TODO: only update this spline */ + BKE_mask_update_display(mask, CTX_data_scene(C)->r.cfra); + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void MASK_OT_switch_direction(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Switch Direction"; + ot->description = "Switch direction of selected splines"; + ot->idname = "MASK_OT_switch_direction"; + + /* api callbacks */ + ot->exec = mask_switch_direction_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + + +/* *** recalc normals *** */ +static int mask_normals_make_consistent_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Scene *scene = CTX_data_scene(C); + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + int i; + + int change = FALSE; + + /* do actual selection */ + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + int change_layer = FALSE; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (MASKPOINT_ISSEL_ANY(point)) { + BKE_mask_calc_handle_point_auto(spline, point, FALSE); + change = TRUE; + change_layer = TRUE; + } + } + } + + if (change_layer) { + if (IS_AUTOKEY_ON(scene)) { + ED_mask_layer_shape_auto_key(masklay, CFRA); + } + } + } + + if (change) { + /* TODO: only update this spline */ + BKE_mask_update_display(mask, CTX_data_scene(C)->r.cfra); + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +/* named to match mesh recalc normals */ +void MASK_OT_normals_make_consistent(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Recalc Normals"; + ot->description = "Re-calculate the direction of selected handles"; + ot->idname = "MASK_OT_normals_make_consistent"; + + /* api callbacks */ + ot->exec = mask_normals_make_consistent_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + + +/******************** set handle type *********************/ + +static int set_handle_type_exec(bContext *C, wmOperator *op) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + int handle_type = RNA_enum_get(op->ptr, "type"); + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + int i; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (MASKPOINT_ISSEL_ANY(point)) { + BezTriple *bezt = &point->bezt; + + bezt->h1 = bezt->h2 = handle_type; + } + } + } + } + + WM_event_add_notifier(C, NC_MASK | ND_DATA, mask); + DAG_id_tag_update(&mask->id, 0); + + return OPERATOR_FINISHED; +} + +void MASK_OT_handle_type_set(wmOperatorType *ot) +{ + static EnumPropertyItem editcurve_handle_type_items[] = { + {HD_AUTO, "AUTO", 0, "Auto", ""}, + {HD_VECT, "VECTOR", 0, "Vector", ""}, + {HD_ALIGN, "ALIGNED", 0, "Aligned", ""}, + {0, NULL, 0, NULL, NULL} + }; + + /* identifiers */ + ot->name = "Set Handle Type"; + ot->description = "Set type of handles for selected control points"; + ot->idname = "MASK_OT_handle_type_set"; + + /* api callbacks */ + ot->invoke = WM_menu_invoke; + ot->exec = set_handle_type_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + ot->prop = RNA_def_enum(ot->srna, "type", editcurve_handle_type_items, 1, "Type", "Spline type"); +} + + +/* ********* clear/set restrict view *********/ +static int mask_hide_view_clear_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + int changed = FALSE; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + + if (masklay->restrictflag & OB_RESTRICT_VIEW) { + ED_mask_layer_select_set(masklay, TRUE); + masklay->restrictflag &= ~OB_RESTRICT_VIEW; + changed = 1; + } + } + + if (changed) { + WM_event_add_notifier(C, NC_MASK | ND_DRAW, mask); + DAG_id_tag_update(&mask->id, 0); + + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; + } +} + +void MASK_OT_hide_view_clear(wmOperatorType *ot) +{ + + /* identifiers */ + ot->name = "Clear Restrict View"; + ot->description = "Reveal the layer by setting the hide flag"; + ot->idname = "MASK_OT_hide_view_clear"; + + /* api callbacks */ + ot->exec = mask_hide_view_clear_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +static int mask_hide_view_set_exec(bContext *C, wmOperator *op) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + const int unselected = RNA_boolean_get(op->ptr, "unselected"); + int changed = FALSE; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + + if (masklay->restrictflag & MASK_RESTRICT_SELECT) { + continue; + } + + if (!unselected) { + if (ED_mask_layer_select_check(masklay)) { + ED_mask_layer_select_set(masklay, FALSE); + + masklay->restrictflag |= OB_RESTRICT_VIEW; + changed = 1; + if (masklay == BKE_mask_layer_active(mask)) { + BKE_mask_layer_active_set(mask, NULL); + } + } + } + else { + if (!ED_mask_layer_select_check(masklay)) { + masklay->restrictflag |= OB_RESTRICT_VIEW; + changed = 1; + if (masklay == BKE_mask_layer_active(mask)) { + BKE_mask_layer_active_set(mask, NULL); + } + } + } + } + + if (changed) { + WM_event_add_notifier(C, NC_MASK | ND_DRAW, mask); + DAG_id_tag_update(&mask->id, 0); + + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; + } +} + +void MASK_OT_hide_view_set(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Set Restrict View"; + ot->description = "Hide the layer by setting the hide flag"; + ot->idname = "MASK_OT_hide_view_set"; + + /* api callbacks */ + ot->exec = mask_hide_view_set_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "Hide unselected rather than selected layers"); +} + + +static int mask_feather_weight_clear_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + int changed = FALSE; + int i; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + + if (masklay->restrictflag & (MASK_RESTRICT_SELECT | MASK_RESTRICT_VIEW)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (MASKPOINT_ISSEL_ANY(point)) { + BezTriple *bezt = &point->bezt; + bezt->weight = 0.0f; + changed = TRUE; + } + } + } + } + + if (changed) { + /* TODO: only update edited splines */ + BKE_mask_update_display(mask, CTX_data_scene(C)->r.cfra); + + WM_event_add_notifier(C, NC_MASK | ND_DRAW, mask); + DAG_id_tag_update(&mask->id, 0); + + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; + } +} + +void MASK_OT_feather_weight_clear(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Clear Feather Weight"; + ot->description = "Reset the feather weight to zero"; + ot->idname = "MASK_OT_feather_weight_clear"; + + /* api callbacks */ + ot->exec = mask_feather_weight_clear_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} diff --git a/source/blender/editors/mask/mask_relationships.c b/source/blender/editors/mask/mask_relationships.c new file mode 100644 index 00000000000..7ba3c27e18d --- /dev/null +++ b/source/blender/editors/mask/mask_relationships.c @@ -0,0 +1,172 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/mask/mask_relationships.c + * \ingroup edmask + */ + + +#include "BLI_math.h" + +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_mask.h" +#include "BKE_tracking.h" + +#include "DNA_mask_types.h" +#include "DNA_object_types.h" /* SELECT */ + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_screen.h" +#include "ED_mask.h" /* own include */ + +#include "mask_intern.h" /* own include */ + +static int mask_parent_clear_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + int i; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (MASKPOINT_ISSEL_ANY(point)) { + point->parent.id = NULL; + } + } + } + } + + WM_event_add_notifier(C, NC_MASK | ND_DATA, mask); + DAG_id_tag_update(&mask->id, 0); + + return OPERATOR_FINISHED; +} + +void MASK_OT_parent_clear(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Clear Parent"; + ot->description = "Clear the mask's parenting"; + ot->idname = "MASK_OT_parent_clear"; + + /* api callbacks */ + ot->exec = mask_parent_clear_exec; + + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +static int mask_parent_set_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + + /* parent info */ + SpaceClip *sc; + MovieClip *clip; + MovieTrackingTrack *track; + MovieTrackingMarker *marker; + MovieTrackingObject *tracking; + /* done */ + + float marker_pos_ofs[2]; + float parmask_pos[2]; + + if ((NULL == (sc = CTX_wm_space_clip(C))) || + (NULL == (clip = sc->clip)) || + (NULL == (track = clip->tracking.act_track)) || + (NULL == (marker = BKE_tracking_marker_get(track, sc->user.framenr))) || + (NULL == (tracking = BKE_tracking_object_get_active(&clip->tracking)))) + { + return OPERATOR_CANCELLED; + } + + add_v2_v2v2(marker_pos_ofs, marker->pos, track->offset); + + BKE_mask_coord_from_movieclip(clip, &sc->user, parmask_pos, marker_pos_ofs); + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + int i; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (MASKPOINT_ISSEL_ANY(point)) { + point->parent.id_type = ID_MC; + point->parent.id = &clip->id; + strcpy(point->parent.parent, tracking->name); + strcpy(point->parent.sub_parent, track->name); + + copy_v2_v2(point->parent.parent_orig, parmask_pos); + } + } + } + } + + WM_event_add_notifier(C, NC_MASK | ND_DATA, mask); + DAG_id_tag_update(&mask->id, 0); + + return OPERATOR_FINISHED; +} + +/** based on #OBJECT_OT_parent_set */ +void MASK_OT_parent_set(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Make Parent"; + ot->description = "Set the mask's parenting"; + ot->idname = "MASK_OT_parent_set"; + + /* api callbacks */ + //ot->invoke = mask_parent_set_invoke; + ot->exec = mask_parent_set_exec; + + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} diff --git a/source/blender/editors/mask/mask_select.c b/source/blender/editors/mask/mask_select.c new file mode 100644 index 00000000000..55e09529320 --- /dev/null +++ b/source/blender/editors/mask/mask_select.c @@ -0,0 +1,766 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/mask/mask_select.c + * \ingroup edmask + */ + +#include "MEM_guardedalloc.h" + +#include "BLI_utildefines.h" +#include "BLI_rect.h" +#include "BLI_lasso.h" + +#include "BKE_context.h" +#include "BKE_mask.h" + +#include "DNA_mask_types.h" +#include "DNA_object_types.h" /* SELECT */ + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_screen.h" +#include "ED_clip.h" +#include "ED_mask.h" /* own include */ + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "mask_intern.h" /* own include */ + +/* 'check' select */ +int ED_mask_spline_select_check(MaskSpline *spline) +{ + int i; + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (MASKPOINT_ISSEL_ANY(point)) + return TRUE; + } + + return FALSE; +} + +int ED_mask_layer_select_check(MaskLayer *masklay) +{ + MaskSpline *spline; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + return FALSE; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + if (ED_mask_spline_select_check(spline)) { + return TRUE; + } + } + + return FALSE; +} + +int ED_mask_select_check(Mask *mask) +{ + MaskLayer *masklay; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + if (ED_mask_layer_select_check(masklay)) { + return TRUE; + } + } + + return FALSE; +} + +/* 'sel' select */ +void ED_mask_spline_select_set(MaskSpline *spline, const short do_select) +{ + int i; + + if (do_select) + spline->flag |= SELECT; + else + spline->flag &= ~SELECT; + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + BKE_mask_point_select_set(point, do_select); + } +} + +void ED_mask_layer_select_set(MaskLayer *masklay, const short do_select) +{ + MaskSpline *spline; + + if (masklay->restrictflag & MASK_RESTRICT_SELECT) { + if (do_select == TRUE) { + return; + } + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + ED_mask_spline_select_set(spline, do_select); + } +} + +void ED_mask_select_toggle_all(Mask *mask, int action) +{ + MaskLayer *masklay; + + if (action == SEL_TOGGLE) { + if (ED_mask_select_check(mask)) + action = SEL_DESELECT; + else + action = SEL_SELECT; + } + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + + if (masklay->restrictflag & MASK_RESTRICT_VIEW) { + continue; + } + + ED_mask_layer_select_set(masklay, (action == SEL_SELECT) ? TRUE : FALSE); + } +} + +void ED_mask_select_flush_all(Mask *mask) +{ + MaskLayer *masklay; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + + for (spline = masklay->splines.first; spline; spline = spline->next) { + int i; + + spline->flag &= ~SELECT; + + /* intentionally _dont_ do this in the masklay loop + * so we clear flags on all splines */ + if (masklay->restrictflag & MASK_RESTRICT_VIEW) { + continue; + } + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *cur_point = &spline->points[i]; + + if (MASKPOINT_ISSEL_ANY(cur_point)) { + spline->flag |= SELECT; + } + else { + int j; + + for (j = 0; j < cur_point->tot_uw; j++) { + if (cur_point->uw[j].flag & SELECT) { + spline->flag |= SELECT; + break; + } + } + } + } + } + } +} + +/******************** toggle selection *********************/ + +static int select_all_exec(bContext *C, wmOperator *op) +{ + Mask *mask = CTX_data_edit_mask(C); + int action = RNA_enum_get(op->ptr, "action"); + + ED_mask_select_toggle_all(mask, action); + ED_mask_select_flush_all(mask); + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + + return OPERATOR_FINISHED; +} + +void MASK_OT_select_all(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "(De)select All"; + ot->description = "Change selection of all curve points"; + ot->idname = "MASK_OT_select_all"; + + /* api callbacks */ + ot->exec = select_all_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + WM_operator_properties_select_all(ot); +} + +/******************** select *********************/ + +static int select_exec(bContext *C, wmOperator *op) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + MaskSpline *spline; + MaskSplinePoint *point = NULL; + float co[2]; + short extend = RNA_boolean_get(op->ptr, "extend"); + short deselect = RNA_boolean_get(op->ptr, "deselect"); + short toggle = RNA_boolean_get(op->ptr, "toggle"); + + int is_handle = 0; + const float threshold = 19; + + RNA_float_get_array(op->ptr, "location", co); + + point = ED_mask_point_find_nearest(C, mask, co, threshold, &masklay, &spline, &is_handle, NULL); + + if (extend == 0 && deselect == 0 && toggle == 0) + ED_mask_select_toggle_all(mask, SEL_DESELECT); + + if (point) { + + if (is_handle) { + if (extend) { + masklay->act_spline = spline; + masklay->act_point = point; + + BKE_mask_point_select_set_handle(point, TRUE); + } + else if (deselect) { + BKE_mask_point_select_set_handle(point, FALSE); + } + else { + masklay->act_spline = spline; + masklay->act_point = point; + + if (!MASKPOINT_ISSEL_HANDLE(point)) { + BKE_mask_point_select_set_handle(point, TRUE); + } + else if (toggle) { + BKE_mask_point_select_set_handle(point, FALSE); + } + } + } + else { + if (extend) { + masklay->act_spline = spline; + masklay->act_point = point; + + BKE_mask_point_select_set(point, TRUE); + } + else if (deselect) { + BKE_mask_point_select_set(point, FALSE); + } + else { + masklay->act_spline = spline; + masklay->act_point = point; + + if (!MASKPOINT_ISSEL_ANY(point)) { + BKE_mask_point_select_set(point, TRUE); + } + else if (toggle) { + BKE_mask_point_select_set(point, FALSE); + } + } + } + + masklay->act_spline = spline; + masklay->act_point = point; + + ED_mask_select_flush_all(mask); + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + + return OPERATOR_FINISHED; + } + else { + MaskSplinePointUW *uw; + + if (ED_mask_feather_find_nearest(C, mask, co, threshold, &masklay, &spline, &point, &uw, NULL)) { + + if (extend) { + masklay->act_spline = spline; + masklay->act_point = point; + + if (uw) uw->flag |= SELECT; + } + else if (deselect) { + if (uw) uw->flag &= ~SELECT; + } + else { + masklay->act_spline = spline; + masklay->act_point = point; + + if (uw) { + if (!(uw->flag & SELECT)) { + uw->flag |= SELECT; + } + else if (toggle) { + uw->flag &= ~SELECT; + } + } + } + + ED_mask_select_flush_all(mask); + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + + return OPERATOR_FINISHED; + } + } + + return OPERATOR_PASS_THROUGH; +} + +static int select_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + float co[2]; + + ED_mask_mouse_pos(C, event, co); + + RNA_float_set_array(op->ptr, "location", co); + + return select_exec(C, op); +} + +void MASK_OT_select(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Select"; + ot->description = "Select spline points"; + ot->idname = "MASK_OT_select"; + + /* api callbacks */ + ot->exec = select_exec; + ot->invoke = select_invoke; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_UNDO; + + /* properties */ + WM_operator_properties_mouse_select(ot); + + RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MIN, FLT_MAX, + "Location", "Location of vertex in normalized space", -1.0f, 1.0f); +} + + + +/********************** border select operator *********************/ + +static int border_select_exec(bContext *C, wmOperator *op) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + int i; + + rcti rect; + rctf rectf; + int change = FALSE, mode, extend; + + /* get rectangle from operator */ + rect.xmin = RNA_int_get(op->ptr, "xmin"); + rect.ymin = RNA_int_get(op->ptr, "ymin"); + rect.xmax = RNA_int_get(op->ptr, "xmax"); + rect.ymax = RNA_int_get(op->ptr, "ymax"); + + ED_mask_point_pos(C, rect.xmin, rect.ymin, &rectf.xmin, &rectf.ymin); + ED_mask_point_pos(C, rect.xmax, rect.ymax, &rectf.xmax, &rectf.ymax); + + mode = RNA_int_get(op->ptr, "gesture_mode"); + extend = RNA_boolean_get(op->ptr, "extend"); + + /* do actual selection */ + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline); + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + MaskSplinePoint *point_deform = &points_array[i]; + + /* TODO: handles? */ + /* TODO: uw? */ + + if (BLI_in_rctf(&rectf, point_deform->bezt.vec[1][0], point_deform->bezt.vec[1][1])) { + BKE_mask_point_select_set(point, mode == GESTURE_MODAL_SELECT); + BKE_mask_point_select_set_handle(point, mode == GESTURE_MODAL_SELECT); + } + else if (!extend) { + BKE_mask_point_select_set(point, FALSE); + BKE_mask_point_select_set_handle(point, FALSE); + } + + change = TRUE; + } + } + } + + if (change) { + ED_mask_select_flush_all(mask); + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void MASK_OT_select_border(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Border Select"; + ot->description = "Select markers using border selection"; + ot->idname = "MASK_OT_select_border"; + + /* api callbacks */ + ot->invoke = WM_border_select_invoke; + ot->exec = border_select_exec; + ot->modal = WM_border_select_modal; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_UNDO; + + /* properties */ + WM_operator_properties_gesture_border(ot, TRUE); +} + +static int do_lasso_select_mask(bContext *C, int mcords[][2], short moves, short select) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + int i; + + rcti rect; + int change = FALSE; + + /* get rectangle from operator */ + BLI_lasso_boundbox(&rect, mcords, moves); + + /* do actual selection */ + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline); + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + MaskSplinePoint *point_deform = &points_array[i]; + + /* TODO: handles? */ + /* TODO: uw? */ + + float screen_co[2]; + + /* marker in screen coords */ + ED_mask_point_pos__reverse(C, + point_deform->bezt.vec[1][0], point_deform->bezt.vec[1][1], + &screen_co[0], &screen_co[1]); + + if (BLI_in_rcti(&rect, screen_co[0], screen_co[1]) && + BLI_lasso_is_point_inside(mcords, moves, screen_co[0], screen_co[1], INT_MAX)) + { + BKE_mask_point_select_set(point, select); + BKE_mask_point_select_set_handle(point, select); + } + + change = TRUE; + } + } + } + + if (change) { + ED_mask_select_flush_all(mask); + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + } + + return change; +} + +static int clip_lasso_select_exec(bContext *C, wmOperator *op) +{ + int mcords_tot; + int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot); + + if (mcords) { + short select; + + select = !RNA_boolean_get(op->ptr, "deselect"); + do_lasso_select_mask(C, mcords, mcords_tot, select); + + MEM_freeN(mcords); + + return OPERATOR_FINISHED; + } + return OPERATOR_PASS_THROUGH; +} + +void MASK_OT_select_lasso(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Lasso Select"; + ot->description = "Select markers using lasso selection"; + ot->idname = "MASK_OT_select_lasso"; + + /* api callbacks */ + ot->invoke = WM_gesture_lasso_invoke; + ot->modal = WM_gesture_lasso_modal; + ot->exec = clip_lasso_select_exec; + ot->poll = ED_maskedit_mask_poll; + ot->cancel = WM_gesture_lasso_cancel; + + /* flags */ + ot->flag = OPTYPE_UNDO; + + /* properties */ + RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", ""); + RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Deselect rather than select items"); + RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection instead of deselecting everything first"); +} + +/********************** circle select operator *********************/ + +static int mask_spline_point_inside_ellipse(BezTriple *bezt, float offset[2], float ellipse[2]) +{ + /* normalized ellipse: ell[0] = scaleX, ell[1] = scaleY */ + float x, y; + + x = (bezt->vec[1][0] - offset[0]) * ellipse[0]; + y = (bezt->vec[1][1] - offset[1]) * ellipse[1]; + + return x * x + y * y < 1.0f; +} + +static int circle_select_exec(bContext *C, wmOperator *op) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + int i; + + SpaceClip *sc = CTX_wm_space_clip(C); + ARegion *ar = CTX_wm_region(C); + int x, y, radius, width, height, mode, change = FALSE; + float zoomx, zoomy, offset[2], ellipse[2]; + + /* get operator properties */ + x = RNA_int_get(op->ptr, "x"); + y = RNA_int_get(op->ptr, "y"); + radius = RNA_int_get(op->ptr, "radius"); + + mode = RNA_int_get(op->ptr, "gesture_mode"); + + /* TODO - make generic! - this is SpaceClip only! */ + /* compute ellipse and position in unified coordinates */ + ED_space_clip_size(sc, &width, &height); + ED_space_clip_zoom(sc, ar, &zoomx, &zoomy); + width = height = MAX2(width, height); + + ellipse[0] = width * zoomx / radius; + ellipse[1] = height * zoomy / radius; + + ED_mask_point_pos(C, x, y, &offset[0], &offset[1]); + + /* do actual selection */ + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline); + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + MaskSplinePoint *point_deform = &points_array[i]; + + if (mask_spline_point_inside_ellipse(&point_deform->bezt, offset, ellipse)) { + BKE_mask_point_select_set(point, mode == GESTURE_MODAL_SELECT); + BKE_mask_point_select_set_handle(point, mode == GESTURE_MODAL_SELECT); + + change = TRUE; + } + } + } + } + + if (change) { + ED_mask_select_flush_all(mask); + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void MASK_OT_select_circle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Circle Select"; + ot->description = "Select markers using circle selection"; + ot->idname = "MASK_OT_select_circle"; + + /* api callbacks */ + ot->invoke = WM_gesture_circle_invoke; + ot->modal = WM_gesture_circle_modal; + ot->exec = circle_select_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "radius", 0, INT_MIN, INT_MAX, "Radius", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); +} + +static int mask_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + MaskSpline *spline; + MaskSplinePoint *point = NULL; + float co[2]; + int do_select = !RNA_boolean_get(op->ptr, "deselect"); + + int is_handle = 0; + const float threshold = 19; + int change = FALSE; + + ED_mask_mouse_pos(C, event, co); + + point = ED_mask_point_find_nearest(C, mask, co, threshold, &masklay, &spline, &is_handle, NULL); + + if (point) { + ED_mask_spline_select_set(spline, do_select); + masklay->act_spline = spline; + masklay->act_point = point; + + change = TRUE; + } + + if (change) { + ED_mask_select_flush_all(mask); + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void MASK_OT_select_linked_pick(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Select Linked"; + ot->idname = "MASK_OT_select_linked_pick"; + ot->description = "(De)select all points linked to the curve under the mouse cursor"; + + /* api callbacks */ + ot->invoke = mask_select_linked_pick_invoke; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", ""); +} + +static int mask_select_linked_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + + int change = FALSE; + + /* do actual selection */ + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + if (ED_mask_spline_select_check(spline)) { + ED_mask_spline_select_set(spline, TRUE); + change = TRUE; + } + } + } + + if (change) { + ED_mask_select_flush_all(mask); + + WM_event_add_notifier(C, NC_MASK | ND_SELECT, mask); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void MASK_OT_select_linked(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Select Linked All"; + ot->idname = "MASK_OT_select_linked"; + ot->description = "Select all vertices linked to the active mesh"; + + /* api callbacks */ + ot->exec = mask_select_linked_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} diff --git a/source/blender/editors/mask/mask_shapekey.c b/source/blender/editors/mask/mask_shapekey.c new file mode 100644 index 00000000000..8da083ab400 --- /dev/null +++ b/source/blender/editors/mask/mask_shapekey.c @@ -0,0 +1,276 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2012 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/mask/mask_shapekey.c + * \ingroup edmask + */ + +#include "BLI_utildefines.h" + +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_mask.h" + +#include "DNA_object_types.h" +#include "DNA_mask_types.h" +#include "DNA_scene_types.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_mask.h" /* own include */ + +#include "mask_intern.h" /* own include */ + +static int mask_shape_key_insert_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Scene *scene = CTX_data_scene(C); + const int frame = CFRA; + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + int change = FALSE; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskLayerShape *masklay_shape; + + if (!ED_mask_layer_select_check(masklay)) { + continue; + } + + masklay_shape = BKE_mask_layer_shape_varify_frame(masklay, frame); + BKE_mask_layer_shape_from_mask(masklay, masklay_shape); + change = TRUE; + } + + if (change) { + WM_event_add_notifier(C, NC_MASK | ND_DATA, mask); + DAG_id_tag_update(&mask->id, 0); + + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; + } +} + +void MASK_OT_shape_key_insert(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Insert Shape Key"; + ot->description = ""; + ot->idname = "MASK_OT_shape_key_insert"; + + /* api callbacks */ + ot->exec = mask_shape_key_insert_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +static int mask_shape_key_clear_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Scene *scene = CTX_data_scene(C); + const int frame = CFRA; + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + int change = FALSE; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskLayerShape *masklay_shape; + + if (!ED_mask_layer_select_check(masklay)) { + continue; + } + + masklay_shape = BKE_mask_layer_shape_find_frame(masklay, frame); + + if (masklay_shape) { + BKE_mask_layer_shape_unlink(masklay, masklay_shape); + change = TRUE; + } + } + + if (change) { + WM_event_add_notifier(C, NC_MASK | ND_DATA, mask); + DAG_id_tag_update(&mask->id, 0); + + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; + } +} + +void MASK_OT_shape_key_clear(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Clear Shape Key"; + ot->description = ""; + ot->idname = "MASK_OT_shape_key_clear"; + + /* api callbacks */ + ot->exec = mask_shape_key_clear_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +static int mask_shape_key_feather_reset_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Scene *scene = CTX_data_scene(C); + const int frame = CFRA; + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + int change = FALSE; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + if (masklay->splines_shapes.first) { + MaskLayerShape *masklay_shape_reset; + MaskLayerShape *masklay_shape; + + /* get the shapekey of the current state */ + masklay_shape_reset = BKE_mask_layer_shape_alloc(masklay, frame); + /* initialize from mask - as if inseting a keyframe */ + BKE_mask_layer_shape_from_mask(masklay, masklay_shape_reset); + + for (masklay_shape = masklay->splines_shapes.first; + masklay_shape; + masklay_shape = masklay_shape->next) + { + + if (masklay_shape_reset->tot_vert == masklay_shape->tot_vert) { + int i_abs = 0; + int i; + MaskSpline *spline; + MaskLayerShapeElem *shape_ele_src; + MaskLayerShapeElem *shape_ele_dst; + + shape_ele_src = (MaskLayerShapeElem *)masklay_shape_reset->data; + shape_ele_dst = (MaskLayerShapeElem *)masklay_shape->data; + + for (spline = masklay->splines.first; spline; spline = spline->next) { + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (MASKPOINT_ISSEL_ANY(point)) { + /* TODO - nicer access here */ + shape_ele_dst->value[6] = shape_ele_src->value[6]; + } + + shape_ele_src++; + shape_ele_dst++; + + i_abs++; + } + } + + } + else { + // printf("%s: skipping\n", __func__); + } + + change = TRUE; + } + + BKE_mask_layer_shape_free(masklay_shape_reset); + } + } + + if (change) { + WM_event_add_notifier(C, NC_MASK | ND_DATA, mask); + DAG_id_tag_update(&mask->id, 0); + + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; + } +} + +void MASK_OT_shape_key_feather_reset(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Feather Reset Animation"; + ot->description = "Resets fearther weights on all selected points animation values"; + ot->idname = "MASK_OT_shape_key_feather_reset"; + + /* api callbacks */ + ot->exec = mask_shape_key_feather_reset_exec; + ot->poll = ED_maskedit_mask_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + + +/* *** Shape Key Utils *** */ + +void ED_mask_layer_shape_auto_key(MaskLayer *masklay, const int frame) +{ + MaskLayerShape *masklay_shape; + + masklay_shape = BKE_mask_layer_shape_varify_frame(masklay, frame); + BKE_mask_layer_shape_from_mask(masklay, masklay_shape); +} + +int ED_mask_layer_shape_auto_key_all(Mask *mask, const int frame) +{ + MaskLayer *masklay; + int change = FALSE; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + ED_mask_layer_shape_auto_key(masklay, frame); + change = TRUE; + } + + return change; +} + +int ED_mask_layer_shape_auto_key_select(Mask *mask, const int frame) +{ + MaskLayer *masklay; + int change = FALSE; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + + if (!ED_mask_layer_select_check(masklay)) { + continue; + } + + ED_mask_layer_shape_auto_key(masklay, frame); + change = TRUE; + } + + return change; +} diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index 60c0ebbc7b3..9cbd9e0b7da 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -53,39 +53,11 @@ #include "mesh_intern.h" -/* uses context to figure out transform for primitive */ -/* returns standard diameter */ -static float new_primitive_matrix(bContext *C, float *loc, float *rot, float primmat[][4]) -{ - Object *obedit = CTX_data_edit_object(C); - View3D *v3d = CTX_wm_view3d(C); - float mat[3][3], rmat[3][3], cmat[3][3], imat[3][3]; - - unit_m4(primmat); - - eul_to_mat3(rmat, rot); - invert_m3(rmat); - - /* inverse transform for initial rotation and object */ - copy_m3_m4(mat, obedit->obmat); - mul_m3_m3m3(cmat, rmat, mat); - invert_m3_m3(imat, cmat); - copy_m4_m3(primmat, imat); - - /* center */ - copy_v3_v3(primmat[3], loc); - sub_v3_v3(primmat[3], obedit->obmat[3]); - invert_m3_m3(imat, mat); - mul_m3_v3(imat, primmat[3]); - - return v3d ? v3d->grid : 1.0f; -} - /* ********* add primitive operators ************* */ static void make_prim_init(bContext *C, const char *idname, float *dia, float mat[][4], - int *state, float *loc, float *rot, unsigned int layer) + int *state, const float loc[3], const float rot[3], const unsigned int layer) { Object *obedit = CTX_data_edit_object(C); @@ -101,7 +73,7 @@ static void make_prim_init(bContext *C, const char *idname, *state = 1; } - *dia = new_primitive_matrix(C, loc, rot, mat); + *dia = ED_object_new_primitive_matrix(C, obedit, loc, rot, mat); } static void make_prim_finish(bContext *C, int *state, int enter_editmode) diff --git a/source/blender/editors/mesh/editmesh_bvh.c b/source/blender/editors/mesh/editmesh_bvh.c index 16948a2372d..2cb03104874 100644 --- a/source/blender/editors/mesh/editmesh_bvh.c +++ b/source/blender/editors/mesh/editmesh_bvh.c @@ -308,7 +308,7 @@ static void vertsearchcallback(void *userdata, int index, const float *UNUSED(co } } -BMVert *BMBVH_FindClosestVert(BMBVHTree *tree, float *co, float maxdist) +BMVert *BMBVH_FindClosestVert(BMBVHTree *tree, const float co[3], float maxdist) { BVHTreeNearest hit; @@ -370,7 +370,7 @@ int BMBVH_VertVisible(BMBVHTree *tree, BMEdge *e, RegionView3D *r3d) } #endif -static BMFace *edge_ray_cast(BMBVHTree *tree, float *co, float *dir, float *hitout, BMEdge *e) +static BMFace *edge_ray_cast(BMBVHTree *tree, const float co[3], const float dir[3], float *hitout, BMEdge *e) { BMFace *f = BMBVH_RayCast(tree, co, dir, hitout, NULL); @@ -380,7 +380,7 @@ static BMFace *edge_ray_cast(BMBVHTree *tree, float *co, float *dir, float *hito return f; } -static void scale_point(float *c1, float *p, float s) +static void scale_point(float c1[3], const float p[3], const float s) { sub_v3_v3(c1, p); mul_v3_fl(c1, s); diff --git a/source/blender/editors/mesh/editmesh_bvh.h b/source/blender/editors/mesh/editmesh_bvh.h index 6512f054c1b..53d1c36119e 100644 --- a/source/blender/editors/mesh/editmesh_bvh.h +++ b/source/blender/editors/mesh/editmesh_bvh.h @@ -57,8 +57,8 @@ int BMBVH_EdgeVisible(struct BMBVHTree *tree, struct BMEdge *e, struct ARegion *ar, struct View3D *v3d, struct Object *obedit); /*find a vert closest to co in a sphere of radius maxdist*/ -struct BMVert *BMBVH_FindClosestVert(struct BMBVHTree *tree, float *co, float maxdist); - +struct BMVert *BMBVH_FindClosestVert(struct BMBVHTree *tree, const float co[3], const float maxdist); + /* BMBVH_NewBVH flag parameter */ enum { BMBVH_USE_CAGE = 1, /* project geometry onto modifier cage */ diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 6bbcd1d253e..f154aec2eb4 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -2247,7 +2247,7 @@ static int find_hole_chains(KnifeTool_OpData *kcd, ListBase *hole, BMFace *f, Li ListBase *chain; BMVert *v; BMIter iter; - int nh, nf, i, j, k, m, ax, ay, ok, sep, bestsep; + int nh, nf, i, j, k, m, ax, ay, ok, sep = 0 /* Quite warnings */, bestsep; int besti[2], bestj[2]; float d, bestd; diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c index 7298153791e..15e3033b7eb 100644 --- a/source/blender/editors/mesh/editmesh_loopcut.c +++ b/source/blender/editors/mesh/editmesh_loopcut.c @@ -86,7 +86,7 @@ /* ringsel operator */ /* struct for properties used while drawing */ -typedef struct tringselOpData { +typedef struct RingSelOpData { ARegion *ar; /* region that ringsel was activated in */ void *draw_handle; /* for drawing preview loop */ @@ -102,13 +102,13 @@ typedef struct tringselOpData { int extend; int do_cut; -} tringselOpData; +} RingSelOpData; /* modal loop selection drawing callback */ static void ringsel_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) { View3D *v3d = CTX_wm_view3d(C); - tringselOpData *lcd = arg; + RingSelOpData *lcd = arg; int i; if (lcd->totedge > 0) { @@ -176,7 +176,7 @@ static void edgering_find_order(BMEdge *lasteed, BMEdge *eed, } } -static void edgering_sel(tringselOpData *lcd, int previewlines, int select) +static void edgering_sel(RingSelOpData *lcd, int previewlines, int select) { BMEditMesh *em = lcd->em; BMEdge *startedge = lcd->eed; @@ -290,7 +290,7 @@ static void edgering_sel(tringselOpData *lcd, int previewlines, int select) lcd->totedge = tot; } -static void ringsel_find_edge(tringselOpData *lcd, int cuts) +static void ringsel_find_edge(RingSelOpData *lcd, int cuts) { if (lcd->eed) { edgering_sel(lcd, cuts, 0); @@ -304,7 +304,7 @@ static void ringsel_find_edge(tringselOpData *lcd, int cuts) static void ringsel_finish(bContext *C, wmOperator *op) { - tringselOpData *lcd = op->customdata; + RingSelOpData *lcd = op->customdata; int cuts = RNA_int_get(op->ptr, "number_cuts"); if (lcd->eed) { @@ -329,6 +329,8 @@ static void ringsel_finish(bContext *C, wmOperator *op) WM_event_add_notifier(C, NC_SCENE | ND_TOOLSETTINGS, CTX_data_scene(C)); } + else + EDBM_selectmode_flush(lcd->em); WM_event_add_notifier(C, NC_GEOM | ND_SELECT | ND_DATA, lcd->ob->data); DAG_id_tag_update(lcd->ob->data, 0); @@ -350,7 +352,7 @@ static void ringsel_finish(bContext *C, wmOperator *op) /* called when modal loop selection is done... */ static void ringsel_exit(bContext *UNUSED(C), wmOperator *op) { - tringselOpData *lcd = op->customdata; + RingSelOpData *lcd = op->customdata; /* deactivate the extra drawing stuff in 3D-View */ ED_region_draw_cb_exit(lcd->ar->type, lcd->draw_handle); @@ -368,10 +370,10 @@ static void ringsel_exit(bContext *UNUSED(C), wmOperator *op) /* called when modal loop selection gets set up... */ static int ringsel_init(bContext *C, wmOperator *op, int do_cut) { - tringselOpData *lcd; + RingSelOpData *lcd; /* alloc new customdata */ - lcd = op->customdata = MEM_callocN(sizeof(tringselOpData), "ringsel Modal Op Data"); + lcd = op->customdata = MEM_callocN(sizeof(RingSelOpData), "ringsel Modal Op Data"); /* assign the drawing handle for drawing preview line... */ lcd->ar = CTX_wm_region(C); @@ -402,7 +404,7 @@ static int ringcut_cancel(bContext *C, wmOperator *op) static int ringcut_invoke(bContext *C, wmOperator *op, wmEvent *evt) { Object *obedit = CTX_data_edit_object(C); - tringselOpData *lcd; + RingSelOpData *lcd; BMEdge *edge; int dist = 75; @@ -434,7 +436,7 @@ static int ringcut_invoke(bContext *C, wmOperator *op, wmEvent *evt) static int loopcut_modal(bContext *C, wmOperator *op, wmEvent *event) { int cuts = RNA_int_get(op->ptr, "number_cuts"); - tringselOpData *lcd = op->customdata; + RingSelOpData *lcd = op->customdata; int show_cuts = 0; view3d_operator_needs_opengl(C); diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 0a8fe142aaf..44ec8bd6aaa 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -676,6 +676,7 @@ static EnumPropertyItem prop_similar_types[] = { {SIMVERT_NORMAL, "NORMAL", 0, "Normal", ""}, {SIMVERT_FACE, "FACE", 0, "Amount of Adjacent Faces", ""}, {SIMVERT_VGROUP, "VGROUP", 0, "Vertex Groups", ""}, + {SIMVERT_EDGE, "EDGE", 0, "Amount of connecting edges", ""}, {SIMEDGE_LENGTH, "LENGTH", 0, "Length", ""}, {SIMEDGE_DIR, "DIR", 0, "Direction", ""}, @@ -1889,7 +1890,7 @@ static int edbm_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent * } BMW_end(&walker); - BM_mesh_select_mode_flush(bm); + EDBM_selectmode_flush(em); } WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 708273df109..0f7d4c5c547 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -3676,14 +3676,14 @@ enum { SRT_REVERSE, /* Reverse current order of selected elements. */ }; -typedef struct bmelemsort { +typedef struct BMElemSort { float srt; /* Sort factor */ int org_idx; /* Original index of this element _in its mempool_ */ -} bmelemsort; +} BMElemSort; static int bmelemsort_comp(const void *v1, const void *v2) { - const bmelemsort *x1 = v1, *x2 = v2; + const BMElemSort *x1 = v1, *x2 = v2; return (x1->srt > x2->srt) - (x1->srt < x2->srt); } @@ -3704,7 +3704,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const /* In all five elements below, 0 = vertices, 1 = edges, 2 = faces. */ /* Just to mark protected elements. */ char *pblock[3] = {NULL, NULL, NULL}, *pb; - bmelemsort *sblock[3] = {NULL, NULL, NULL}, *sb; + BMElemSort *sblock[3] = {NULL, NULL, NULL}, *sb; int *map[3] = {NULL, NULL, NULL}, *mp; int totelem[3] = {0, 0, 0}, tot; int affected[3] = {0, 0, 0}, aff; @@ -3733,7 +3733,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const if (totelem[0]) { pb = pblock[0] = MEM_callocN(sizeof(char) * totelem[0], "sort_bmelem vert pblock"); - sb = sblock[0] = MEM_callocN(sizeof(bmelemsort) * totelem[0], "sort_bmelem vert sblock"); + sb = sblock[0] = MEM_callocN(sizeof(BMElemSort) * totelem[0], "sort_bmelem vert sblock"); BM_ITER_MESH_INDEX (ve, &iter, em->bm, BM_VERTS_OF_MESH, i) { if (BM_elem_flag_test(ve, flag)) { @@ -3752,7 +3752,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const if (totelem[1]) { pb = pblock[1] = MEM_callocN(sizeof(char) * totelem[1], "sort_bmelem edge pblock"); - sb = sblock[1] = MEM_callocN(sizeof(bmelemsort) * totelem[1], "sort_bmelem edge sblock"); + sb = sblock[1] = MEM_callocN(sizeof(BMElemSort) * totelem[1], "sort_bmelem edge sblock"); BM_ITER_MESH_INDEX (ed, &iter, em->bm, BM_EDGES_OF_MESH, i) { if (BM_elem_flag_test(ed, flag)) { @@ -3772,7 +3772,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const if (totelem[2]) { pb = pblock[2] = MEM_callocN(sizeof(char) * totelem[2], "sort_bmelem face pblock"); - sb = sblock[2] = MEM_callocN(sizeof(bmelemsort) * totelem[2], "sort_bmelem face sblock"); + sb = sblock[2] = MEM_callocN(sizeof(BMElemSort) * totelem[2], "sort_bmelem face sblock"); BM_ITER_MESH_INDEX (fa, &iter, em->bm, BM_FACES_OF_MESH, i) { if (BM_elem_flag_test(fa, flag)) { @@ -3806,7 +3806,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const if (totelem[0]) { pb = pblock[0] = MEM_callocN(sizeof(char) * totelem[0], "sort_bmelem vert pblock"); - sb = sblock[0] = MEM_callocN(sizeof(bmelemsort) * totelem[0], "sort_bmelem vert sblock"); + sb = sblock[0] = MEM_callocN(sizeof(BMElemSort) * totelem[0], "sort_bmelem vert sblock"); BM_ITER_MESH_INDEX (ve, &iter, em->bm, BM_VERTS_OF_MESH, i) { if (BM_elem_flag_test(ve, flag)) { @@ -3822,7 +3822,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const if (totelem[1]) { pb = pblock[1] = MEM_callocN(sizeof(char) * totelem[1], "sort_bmelem edge pblock"); - sb = sblock[1] = MEM_callocN(sizeof(bmelemsort) * totelem[1], "sort_bmelem edge sblock"); + sb = sblock[1] = MEM_callocN(sizeof(BMElemSort) * totelem[1], "sort_bmelem edge sblock"); BM_ITER_MESH_INDEX (ed, &iter, em->bm, BM_EDGES_OF_MESH, i) { if (BM_elem_flag_test(ed, flag)) { @@ -3841,7 +3841,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const if (totelem[2]) { pb = pblock[2] = MEM_callocN(sizeof(char) * totelem[2], "sort_bmelem face pblock"); - sb = sblock[2] = MEM_callocN(sizeof(bmelemsort) * totelem[2], "sort_bmelem face sblock"); + sb = sblock[2] = MEM_callocN(sizeof(BMElemSort) * totelem[2], "sort_bmelem face sblock"); BM_ITER_MESH_INDEX (fa, &iter, em->bm, BM_FACES_OF_MESH, i) { if (BM_elem_flag_test(fa, flag)) { @@ -3862,7 +3862,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const /* Faces only! */ else if (action == SRT_MATERIAL && totelem[2]) { pb = pblock[2] = MEM_callocN(sizeof(char) * totelem[2], "sort_bmelem face pblock"); - sb = sblock[2] = MEM_callocN(sizeof(bmelemsort) * totelem[2], "sort_bmelem face sblock"); + sb = sblock[2] = MEM_callocN(sizeof(BMElemSort) * totelem[2], "sort_bmelem face sblock"); BM_ITER_MESH_INDEX (fa, &iter, em->bm, BM_FACES_OF_MESH, i) { if (BM_elem_flag_test(fa, flag)) { @@ -3966,7 +3966,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const * enabling/disabling an element type. */ BLI_srandom(seed); pb = pblock[0] = MEM_callocN(sizeof(char) * totelem[0], "sort_bmelem vert pblock"); - sb = sblock[0] = MEM_callocN(sizeof(bmelemsort) * totelem[0], "sort_bmelem vert sblock"); + sb = sblock[0] = MEM_callocN(sizeof(BMElemSort) * totelem[0], "sort_bmelem vert sblock"); BM_ITER_MESH_INDEX (ve, &iter, em->bm, BM_VERTS_OF_MESH, i) { if (BM_elem_flag_test(ve, flag)) { @@ -3983,7 +3983,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const if (totelem[1]) { BLI_srandom(seed); pb = pblock[1] = MEM_callocN(sizeof(char) * totelem[1], "sort_bmelem edge pblock"); - sb = sblock[1] = MEM_callocN(sizeof(bmelemsort) * totelem[1], "sort_bmelem edge sblock"); + sb = sblock[1] = MEM_callocN(sizeof(BMElemSort) * totelem[1], "sort_bmelem edge sblock"); BM_ITER_MESH_INDEX (ed, &iter, em->bm, BM_EDGES_OF_MESH, i) { if (BM_elem_flag_test(ed, flag)) { @@ -4000,7 +4000,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const if (totelem[2]) { BLI_srandom(seed); pb = pblock[2] = MEM_callocN(sizeof(char) * totelem[2], "sort_bmelem face pblock"); - sb = sblock[2] = MEM_callocN(sizeof(bmelemsort) * totelem[2], "sort_bmelem face sblock"); + sb = sblock[2] = MEM_callocN(sizeof(BMElemSort) * totelem[2], "sort_bmelem face sblock"); BM_ITER_MESH_INDEX (fa, &iter, em->bm, BM_FACES_OF_MESH, i) { if (BM_elem_flag_test(fa, flag)) { @@ -4018,7 +4018,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const else if (action == SRT_REVERSE) { if (totelem[0]) { pb = pblock[0] = MEM_callocN(sizeof(char) * totelem[0], "sort_bmelem vert pblock"); - sb = sblock[0] = MEM_callocN(sizeof(bmelemsort) * totelem[0], "sort_bmelem vert sblock"); + sb = sblock[0] = MEM_callocN(sizeof(BMElemSort) * totelem[0], "sort_bmelem vert sblock"); BM_ITER_MESH_INDEX (ve, &iter, em->bm, BM_VERTS_OF_MESH, i) { if (BM_elem_flag_test(ve, flag)) { @@ -4034,7 +4034,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const if (totelem[1]) { pb = pblock[1] = MEM_callocN(sizeof(char) * totelem[1], "sort_bmelem edge pblock"); - sb = sblock[1] = MEM_callocN(sizeof(bmelemsort) * totelem[1], "sort_bmelem edge sblock"); + sb = sblock[1] = MEM_callocN(sizeof(BMElemSort) * totelem[1], "sort_bmelem edge sblock"); BM_ITER_MESH_INDEX (ed, &iter, em->bm, BM_EDGES_OF_MESH, i) { if (BM_elem_flag_test(ed, flag)) { @@ -4050,7 +4050,7 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const if (totelem[2]) { pb = pblock[2] = MEM_callocN(sizeof(char) * totelem[2], "sort_bmelem face pblock"); - sb = sblock[2] = MEM_callocN(sizeof(bmelemsort) * totelem[2], "sort_bmelem face sblock"); + sb = sblock[2] = MEM_callocN(sizeof(BMElemSort) * totelem[2], "sort_bmelem face sblock"); BM_ITER_MESH_INDEX (fa, &iter, em->bm, BM_FACES_OF_MESH, i) { if (BM_elem_flag_test(fa, flag)) { @@ -4065,9 +4065,9 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const } } -/* printf("%d vertices: %d to be affected…\n", totelem[0], affected[0]);*/ -/* printf("%d edges: %d to be affected…\n", totelem[1], affected[1]);*/ -/* printf("%d faces: %d to be affected…\n", totelem[2], affected[2]);*/ +/* printf("%d vertices: %d to be affected...\n", totelem[0], affected[0]);*/ +/* printf("%d edges: %d to be affected...\n", totelem[1], affected[1]);*/ +/* printf("%d faces: %d to be affected...\n", totelem[2], affected[2]);*/ if (affected[0] == 0 && affected[1] == 0 && affected[2] == 0) { for (j = 3; j--; ) { if (pblock[j]) @@ -4086,11 +4086,11 @@ static void sort_bmelem_flag(bContext *C, const int types, const int flag, const sb = sblock[j]; if (pb && sb && !map[j]) { char *p_blk; - bmelemsort *s_blk; + BMElemSort *s_blk; tot = totelem[j]; aff = affected[j]; - qsort(sb, aff, sizeof(bmelemsort), bmelemsort_comp); + qsort(sb, aff, sizeof(BMElemSort), bmelemsort_comp); mp = map[j] = MEM_mallocN(sizeof(int) * tot, "sort_bmelem map"); p_blk = pb + tot - 1; @@ -4498,13 +4498,18 @@ static int edbm_bevel_invoke(bContext *C, wmOperator *op, wmEvent *event) BevelData *opdata; float mlen[2]; - if (!edbm_bevel_init(C, op, TRUE)) + if (!edbm_bevel_init(C, op, TRUE)) { return OPERATOR_CANCELLED; + } - /* initialize mouse values */ opdata = op->customdata; - calculateTransformCenter(C, V3D_CENTROID, NULL, opdata->mcenter); + /* initialize mouse values */ + if (!calculateTransformCenter(C, V3D_CENTROID, NULL, opdata->mcenter)) { + /* in this case the tool will likely do nothing, + * ideally this will never happen and should be checked for above */ + opdata->mcenter[0] = opdata->mcenter[1] = 0; + } mlen[0] = opdata->mcenter[0] - event->mval[0]; mlen[1] = opdata->mcenter[1] - event->mval[1]; opdata->initial_length = len_v2(mlen); @@ -4795,8 +4800,12 @@ static int edbm_inset_invoke(bContext *C, wmOperator *op, wmEvent *event) opdata = op->customdata; - calculateTransformCenter(C, V3D_CENTROID, NULL, opdata->mcenter); /* initialize mouse values */ + if (!calculateTransformCenter(C, V3D_CENTROID, NULL, opdata->mcenter)) { + /* in this case the tool will likely do nothing, + * ideally this will never happen and should be checked for above */ + opdata->mcenter[0] = opdata->mcenter[1] = 0; + } mlen[0] = opdata->mcenter[0] - event->mval[0]; mlen[1] = opdata->mcenter[1] - event->mval[1]; opdata->initial_length = len_v2(mlen); @@ -4830,13 +4839,11 @@ static int edbm_inset_modal(bContext *C, wmOperator *op, wmEvent *event) mdiff[1] = opdata->mcenter[1] - event->mval[1]; if (opdata->modify_depth) { - amount = opdata->old_depth + (len_v2(mdiff) - - opdata->initial_length) / opdata->initial_length; + amount = opdata->old_depth + (len_v2(mdiff) - opdata->initial_length) / opdata->initial_length; RNA_float_set(op->ptr, "depth", amount); } else { - amount = opdata->old_thickness - (len_v2(mdiff) - - opdata->initial_length) / opdata->initial_length; + amount = opdata->old_thickness - (len_v2(mdiff) - opdata->initial_length) / opdata->initial_length; amount = MAX2(amount, 0.0f); RNA_float_set(op->ptr, "thickness", amount); diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index a77a6f4b430..dfa1beb614f 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -376,7 +376,9 @@ void ED_keymap_mesh(wmKeyConfig *keyconf) RNA_int_set(kmi->ptr, "level", i); } - ED_object_generic_keymap(keyconf, keymap, 3); + ED_keymap_proportional_cycle(keyconf, keymap); + ED_keymap_proportional_editmode(keyconf, keymap, TRUE); + knifetool_modal_keymap(keyconf); } diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index 989f1a36f99..59a0475ebb5 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -690,7 +690,8 @@ static void mesh_octree_free_node(MocNode **bt) /* temporal define, just to make nicer code below */ #define MOC_INDEX(vx, vy, vz) (((vx) * MOC_RES * MOC_RES) + (vy) * MOC_RES + (vz)) -static void mesh_octree_add_nodes(MocNode **basetable, float *co, float *offs, float *div, intptr_t index) +static void mesh_octree_add_nodes(MocNode **basetable, const float co[3], const float offs[3], + const float div[3], intptr_t index) { float fx, fy, fz; int vx, vy, vz; diff --git a/source/blender/editors/metaball/mball_ops.c b/source/blender/editors/metaball/mball_ops.c index 1c77eba2019..e98654f589a 100644 --- a/source/blender/editors/metaball/mball_ops.c +++ b/source/blender/editors/metaball/mball_ops.c @@ -79,6 +79,7 @@ void ED_keymap_metaball(wmKeyConfig *keyconf) kmi = WM_keymap_add_item(keymap, "MBALL_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0); RNA_enum_set(kmi->ptr, "action", SEL_INVERT); - ED_object_generic_keymap(keyconf, keymap, 3); + ED_keymap_proportional_cycle(keyconf, keymap); + ED_keymap_proportional_editmode(keyconf, keymap, TRUE); } diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index fe5fafb0ca0..ba26b92f354 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -107,9 +107,21 @@ #include "object_intern.h" +/* this is an exact copy of the define in rna_lamp.c + * kept here because of linking order. + * Icons are only defined here */ +EnumPropertyItem lamp_type_items[] = { + {LA_LOCAL, "POINT", ICON_LAMP_POINT, "Point", "Omnidirectional point light source"}, + {LA_SUN, "SUN", ICON_LAMP_SUN, "Sun", "Constant direction parallel ray light source"}, + {LA_SPOT, "SPOT", ICON_LAMP_SPOT, "Spot", "Directional cone light source"}, + {LA_HEMI, "HEMI", ICON_LAMP_HEMI, "Hemi", "180 degree constant light source"}, + {LA_AREA, "AREA", ICON_LAMP_AREA, "Area", "Directional area light source"}, + {0, NULL, 0, NULL, NULL} +}; + /************************** Exported *****************************/ -void ED_object_location_from_view(bContext *C, float *loc) +void ED_object_location_from_view(bContext *C, float loc[3]) { View3D *v3d = CTX_wm_view3d(C); Scene *scene = CTX_data_scene(C); @@ -120,7 +132,7 @@ void ED_object_location_from_view(bContext *C, float *loc) copy_v3_v3(loc, cursor); } -void ED_object_rotation_from_view(bContext *C, float *rot) +void ED_object_rotation_from_view(bContext *C, float rot[3]) { RegionView3D *rv3d = CTX_wm_region_view3d(C); if (rv3d) { @@ -134,7 +146,7 @@ void ED_object_rotation_from_view(bContext *C, float *rot) } } -void ED_object_base_init_transform(bContext *C, Base *base, float *loc, float *rot) +void ED_object_base_init_transform(bContext *C, Base *base, const float loc[3], const float rot[3]) { Object *ob = base->object; Scene *scene = CTX_data_scene(C); @@ -152,8 +164,10 @@ void ED_object_base_init_transform(bContext *C, Base *base, float *loc, float *r /* uses context to figure out transform for primitive */ /* returns standard diameter */ -float ED_object_new_primitive_matrix(bContext *C, Object *obedit, float *loc, float *rot, float primmat[][4]) +float ED_object_new_primitive_matrix(bContext *C, Object *obedit, + const float loc[3], const float rot[3], float primmat[][4]) { + Scene *scene = CTX_data_scene(C); View3D *v3d = CTX_wm_view3d(C); float mat[3][3], rmat[3][3], cmat[3][3], imat[3][3]; @@ -174,7 +188,9 @@ float ED_object_new_primitive_matrix(bContext *C, Object *obedit, float *loc, fl invert_m3_m3(imat, mat); mul_m3_v3(imat, primmat[3]); - if (v3d) return v3d->grid; + if (v3d) + return ED_view3d_grid_scale(scene, v3d, NULL); + return 1.0f; } @@ -249,8 +265,8 @@ int ED_object_add_generic_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(ev return op->type->exec(C, op); } -int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, - float *rot, int *enter_editmode, unsigned int *layer, int *is_view_aligned) +int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float loc[3], float rot[3], + int *enter_editmode, unsigned int *layer, int *is_view_aligned) { View3D *v3d = CTX_wm_view3d(C); int a, layer_values[20]; @@ -313,7 +329,7 @@ int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, /* for object add primitive operators */ /* do not call undo push in this function (users of this function have to) */ -Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, +Object *ED_object_add_type(bContext *C, int type, const float loc[3], const float rot[3], int enter_editmode, unsigned int layer) { Main *bmain = CTX_data_main(C); @@ -742,15 +758,7 @@ static int object_lamp_add_exec(bContext *C, wmOperator *op) } void OBJECT_OT_lamp_add(wmOperatorType *ot) -{ - static EnumPropertyItem lamp_type_items[] = { - {LA_LOCAL, "POINT", ICON_LAMP_POINT, "Point", "Omnidirectional point light source"}, - {LA_SUN, "SUN", ICON_LAMP_SUN, "Sun", "Constant direction parallel ray light source"}, - {LA_SPOT, "SPOT", ICON_LAMP_SPOT, "Spot", "Directional cone light source"}, - {LA_HEMI, "HEMI", ICON_LAMP_HEMI, "Hemi", "180 degree constant light source"}, - {LA_AREA, "AREA", ICON_LAMP_AREA, "Area", "Directional area light source"}, - {0, NULL, 0, NULL, NULL}}; - +{ /* identifiers */ ot->name = "Add Lamp"; ot->description = "Add a lamp object to the scene"; diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index 7cc11fa0209..a38c69fba8a 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -418,15 +418,15 @@ static void test_constraints(Object *owner, bPoseChannel *pchan) MovieTrackingObject *tracking_object; if (data->object[0]) - tracking_object = BKE_tracking_named_object(tracking, data->object); + tracking_object = BKE_tracking_object_get_named(tracking, data->object); else - tracking_object = BKE_tracking_get_camera_object(tracking); + tracking_object = BKE_tracking_object_get_camera(tracking); if (!tracking_object) { curcon->flag |= CONSTRAINT_DISABLE; } else { - if (!BKE_tracking_named_track(tracking, tracking_object, data->track)) + if (!BKE_tracking_track_get_named(tracking, tracking_object, data->track)) curcon->flag |= CONSTRAINT_DISABLE; } } diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 107b19b0ed7..5ad663b92d3 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -109,8 +109,7 @@ static void waitcursor(int UNUSED(val)) {} static int pupmenu(const char *UNUSED(msg)) {return 0;} /* port over here */ -static void error_libdata(void) { -} +static void error_libdata(void) {} Object *ED_object_context(bContext *C) { @@ -181,7 +180,7 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op) short changed = 0; const int unselected = RNA_boolean_get(op->ptr, "unselected"); - CTX_DATA_BEGIN (C, Base *, base, visible_bases) + CTX_DATA_BEGIN(C, Base *, base, visible_bases) { if (!unselected) { if (base->flag & SELECT) { @@ -198,6 +197,9 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op) if (!(base->flag & SELECT)) { base->object->restrictflag |= OB_RESTRICT_VIEW; changed = 1; + if (base == BASACT) { + ED_base_object_activate(C, NULL); + } } } } @@ -238,7 +240,7 @@ static int object_hide_render_clear_exec(bContext *C, wmOperator *UNUSED(op)) short changed = 0; /* XXX need a context loop to handle such cases */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + CTX_DATA_BEGIN(C, Object *, ob, selected_editable_objects) { if (ob->restrictflag & OB_RESTRICT_RENDER) { ob->restrictflag &= ~OB_RESTRICT_RENDER; @@ -273,7 +275,7 @@ static int object_hide_render_set_exec(bContext *C, wmOperator *op) { const int unselected = RNA_boolean_get(op->ptr, "unselected"); - CTX_DATA_BEGIN (C, Base *, base, visible_bases) + CTX_DATA_BEGIN(C, Base *, base, visible_bases) { if (!unselected) { if (base->flag & SELECT) { @@ -1112,7 +1114,7 @@ void ED_objects_recalculate_paths(bContext *C, Scene *scene) ListBase targets = {NULL, NULL}; /* loop over objects in scene */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + CTX_DATA_BEGIN(C, Object *, ob, selected_editable_objects) { /* set flag to force recalc, then grab path(s) from object */ ob->avs.recalc |= ANIMVIZ_RECALC_PATHS; @@ -1155,7 +1157,7 @@ static int object_calculate_paths_exec(bContext *C, wmOperator *op) int end = RNA_int_get(op->ptr, "end_frame"); /* set up path data for bones being calculated */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + CTX_DATA_BEGIN(C, Object *, ob, selected_editable_objects) { bAnimVizSettings *avs = &ob->avs; @@ -1194,9 +1196,9 @@ void OBJECT_OT_paths_calculate(wmOperatorType *ot) /* properties */ RNA_def_int(ot->srna, "start_frame", 1, MINAFRAME, MAXFRAME, "Start", - "First frame to calculate object paths on", MINFRAME, MAXFRAME/2.0); + "First frame to calculate object paths on", MINFRAME, MAXFRAME / 2.0); RNA_def_int(ot->srna, "end_frame", 250, MINAFRAME, MAXFRAME, "End", - "Last frame to calculate object paths on", MINFRAME, MAXFRAME/2.0); + "Last frame to calculate object paths on", MINFRAME, MAXFRAME / 2.0); } /* --------- */ @@ -1229,7 +1231,7 @@ void OBJECT_OT_paths_update(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* TODO: this should probably check for existing paths */ /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /* --------- */ @@ -1238,7 +1240,7 @@ void OBJECT_OT_paths_update(wmOperatorType *ot) void ED_objects_clear_paths(bContext *C) { /* loop over objects in scene */ - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + CTX_DATA_BEGIN(C, Object *, ob, selected_editable_objects) { if (ob->mpath) { animviz_free_motionpath(ob->mpath); @@ -1286,7 +1288,7 @@ static int shade_smooth_exec(bContext *C, wmOperator *op) int clear = (strcmp(op->idname, "OBJECT_OT_shade_flat") == 0); int done = FALSE; - CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) + CTX_DATA_BEGIN(C, Object *, ob, selected_editable_objects) { if (ob->type == OB_MESH) { @@ -1664,10 +1666,12 @@ static EnumPropertyItem game_properties_copy_operations[] = { {COPY_PROPERTIES_REPLACE, "REPLACE", 0, "Replace Properties", ""}, {COPY_PROPERTIES_MERGE, "MERGE", 0, "Merge Properties", ""}, {COPY_PROPERTIES_COPY, "COPY", 0, "Copy a Property", ""}, - {0, NULL, 0, NULL, NULL}}; + {0, NULL, 0, NULL, NULL} +}; -static EnumPropertyItem gameprops_items[]= { - {0, NULL, 0, NULL, NULL}}; +static EnumPropertyItem gameprops_items[] = { + {0, NULL, 0, NULL, NULL} +}; static EnumPropertyItem *gameprops_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), int *free) { @@ -1704,7 +1708,7 @@ static int game_property_copy_exec(bContext *C, wmOperator *op) prop = BLI_findlink(&ob->prop, propid - 1); if (prop) { - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + CTX_DATA_BEGIN(C, Object *, ob_iter, selected_editable_objects) { if (ob != ob_iter) set_ob_property(ob_iter, prop); @@ -1713,7 +1717,7 @@ static int game_property_copy_exec(bContext *C, wmOperator *op) } else { - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + CTX_DATA_BEGIN(C, Object *, ob_iter, selected_editable_objects) { if (ob != ob_iter) { if (type == COPY_PROPERTIES_REPLACE) @@ -1754,7 +1758,7 @@ void OBJECT_OT_game_property_copy(wmOperatorType *ot) static int game_property_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + CTX_DATA_BEGIN(C, Object *, ob_iter, selected_editable_objects) { free_properties(&ob_iter->prop); } @@ -1766,7 +1770,7 @@ static int game_property_clear_exec(bContext *C, wmOperator *UNUSED(op)) void OBJECT_OT_game_property_clear(wmOperatorType *ot) { /* identifiers */ - ot->name = "Clear Game Property"; + ot->name = "Clear Game Properties"; ot->idname = "OBJECT_OT_game_property_clear"; ot->description = "Remove all game properties from all selected objects"; @@ -1784,7 +1788,7 @@ static int logicbricks_copy_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = ED_object_active_context(C); - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + CTX_DATA_BEGIN(C, Object *, ob_iter, selected_editable_objects) { if (ob != ob_iter) { /* first: free all logic */ @@ -1841,7 +1845,7 @@ static int game_physics_copy_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = ED_object_active_context(C); - CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) + CTX_DATA_BEGIN(C, Object *, ob_iter, selected_editable_objects) { if (ob != ob_iter) { ob_iter->gameflag = ob->gameflag; diff --git a/source/blender/editors/object/object_lattice.c b/source/blender/editors/object/object_lattice.c index f6e8ccf4ec9..0a9944debe1 100644 --- a/source/blender/editors/object/object_lattice.c +++ b/source/blender/editors/object/object_lattice.c @@ -344,18 +344,17 @@ int mouse_lattice(bContext *C, const int mval[2], int extend, int deselect, int bp = findnearestLattvert(&vc, mval, 1); if (bp) { - if (extend) { - bp->f1 |= SELECT; - } - else if (deselect) { - bp->f1 &= ~SELECT; - } + if (extend) { + bp->f1 |= SELECT; + } + else if (deselect) { + bp->f1 &= ~SELECT; + } else if (toggle) { bp->f1 ^= SELECT; /* swap */ } - else - { - ED_setflagsLatt(vc.obedit, 0); + else { + ED_setflagsLatt(vc.obedit, 0); bp->f1 |= SELECT; } diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 79a9a29ae8f..d6b5fb9fc10 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -88,6 +88,7 @@ #include "object_intern.h" static void modifier_skin_customdata_ensure(struct Object *ob); +static void modifier_skin_customdata_delete(struct Object *ob); /******************************** API ****************************/ @@ -231,6 +232,21 @@ static int object_modifier_remove(Object *ob, ModifierData *md, int *sort_depsgr multires_customdata_delete(ob->data); } } + else if (md->type == eModifierType_Skin) { + int ok = 1; + ModifierData *tmpmd; + + /* ensure skin CustomData layer isn't used by another skin modifier */ + for (tmpmd = ob->modifiers.first; tmpmd; tmpmd = tmpmd->next) { + if (tmpmd != md && tmpmd->type == eModifierType_Skin) { + ok = 0; + break; + } + } + + if (ok) + modifier_skin_customdata_delete(ob); + } if (ELEM(md->type, eModifierType_Softbody, eModifierType_Cloth) && ob->particlesystem.first == NULL) @@ -626,8 +642,10 @@ int ED_object_modifier_apply(ReportList *reports, Scene *scene, Object *ob, Modi BLI_remlink(&ob->modifiers, md); modifier_free(md); - /* ensure mesh paint mask layer remains after applying */ - ED_sculpt_mask_layers_ensure(ob, NULL); + if (ob->type == OB_MESH) { + /* ensure mesh paint mask layer remains after applying */ + ED_sculpt_mask_layers_ensure(ob, NULL); + } return 1; } @@ -1369,6 +1387,17 @@ static void modifier_skin_customdata_ensure(Object *ob) } } +static void modifier_skin_customdata_delete(Object *ob) +{ + Mesh *me = ob->data; + BMEditMesh *em = me->edit_btmesh; + + if (em) + BM_data_layer_free(em->bm, &em->bm->vdata, CD_MVERT_SKIN); + else + CustomData_free_layer_active(&me->vdata, CD_MVERT_SKIN, me->totvert); +} + static int skin_poll(bContext *C) { return (!CTX_data_edit_object(C) && diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 0c50ab58487..addc6cd4277 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -298,7 +298,8 @@ void ED_keymap_object(wmKeyConfig *keyconf) keymap->poll = object_mode_poll; /* object mode supports PET now */ - ED_object_generic_keymap(keyconf, keymap, 1); + ED_keymap_proportional_cycle(keyconf, keymap); + ED_keymap_proportional_obmode(keyconf, keymap); WM_keymap_add_item(keymap, "VIEW3D_OT_game_start", PKEY, KM_PRESS, 0, 0); @@ -421,41 +422,49 @@ void ED_keymap_object(wmKeyConfig *keyconf) /* menus */ WM_keymap_add_menu(keymap, "VIEW3D_MT_hook", HKEY, KM_PRESS, KM_CTRL, 0); - ED_object_generic_keymap(keyconf, keymap, 2); + ED_keymap_proportional_cycle(keyconf, keymap); + ED_keymap_proportional_editmode(keyconf, keymap, FALSE); } -void ED_object_generic_keymap(struct wmKeyConfig *UNUSED(keyconf), struct wmKeyMap *keymap, int do_pet) +void ED_keymap_proportional_cycle(struct wmKeyConfig *UNUSED(keyconf), struct wmKeyMap *keymap) { wmKeyMapItem *kmi; - /* used by mesh, curve & lattice only */ - if (do_pet) { - /* context ops */ - kmi = WM_keymap_add_item(keymap, "WM_OT_context_cycle_enum", OKEY, KM_PRESS, KM_SHIFT, 0); - RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit_falloff"); - - // Object mode - if (do_pet == TRUE) { - - kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", OKEY, KM_PRESS, 0, 0); - RNA_string_set(kmi->ptr, "data_path", "tool_settings.use_proportional_edit_objects"); - - } - else { // Edit mode - - kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, 0, 0); - RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit"); - RNA_string_set(kmi->ptr, "value_1", "DISABLED"); - RNA_string_set(kmi->ptr, "value_2", "ENABLED"); - - /* for modes/object types that allow 'connected' mode, add the Alt O key */ - if (do_pet == 3) { - kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, KM_ALT, 0); - RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit"); - RNA_string_set(kmi->ptr, "value_1", "DISABLED"); - RNA_string_set(kmi->ptr, "value_2", "CONNECTED"); - } - } - } + kmi = WM_keymap_add_item(keymap, "WM_OT_context_cycle_enum", OKEY, KM_PRESS, KM_SHIFT, 0); + RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit_falloff"); +} + +void ED_keymap_proportional_obmode(struct wmKeyConfig *UNUSED(keyconf), struct wmKeyMap *keymap) +{ + wmKeyMapItem *kmi; + + kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", OKEY, KM_PRESS, 0, 0); + RNA_string_set(kmi->ptr, "data_path", "tool_settings.use_proportional_edit_objects"); +} + +void ED_keymap_proportional_maskmode(struct wmKeyConfig *UNUSED(keyconf), struct wmKeyMap *keymap) +{ + wmKeyMapItem *kmi; + + kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", OKEY, KM_PRESS, 0, 0); + RNA_string_set(kmi->ptr, "data_path", "tool_settings.use_proportional_edit_mask"); } +void ED_keymap_proportional_editmode(struct wmKeyConfig *UNUSED(keyconf), struct wmKeyMap *keymap, + const short do_connected) +{ + wmKeyMapItem *kmi; + + kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, 0, 0); + RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit"); + RNA_string_set(kmi->ptr, "value_1", "DISABLED"); + RNA_string_set(kmi->ptr, "value_2", "ENABLED"); + + /* for modes/object types that allow 'connected' mode, add the Alt O key */ + if (do_connected) { + kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, KM_ALT, 0); + RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit"); + RNA_string_set(kmi->ptr, "value_1", "DISABLED"); + RNA_string_set(kmi->ptr, "value_2", "CONNECTED"); + } +} diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 2b622b21d2c..fc0aa39e733 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -424,27 +424,35 @@ EnumPropertyItem prop_clear_parent_types[] = { {0, NULL, 0, NULL, NULL} }; -void ED_object_parent_clear(bContext *C, int type) +void ED_object_parent_clear(Object *ob, int type) +{ + + if (ob->parent == NULL) + return; + + if (type == 0) { + ob->parent = NULL; + } + else if (type == 1) { + ob->parent = NULL; + BKE_object_apply_mat4(ob, ob->obmat, TRUE, FALSE); + } + else if (type == 2) + unit_m4(ob->parentinv); + + ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; +} + +/* note, poll should check for editable scene */ +static int parent_clear_exec(bContext *C, wmOperator *op) { Main *bmain = CTX_data_main(C); Scene *scene = CTX_data_scene(C); + int type = RNA_enum_get(op->ptr, "type"); CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { - if (ob->parent == NULL) - continue; - - if (type == 0) { - ob->parent = NULL; - } - else if (type == 1) { - ob->parent = NULL; - BKE_object_apply_mat4(ob, ob->obmat, TRUE, FALSE); - } - else if (type == 2) - unit_m4(ob->parentinv); - - ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; + ED_object_parent_clear(ob, type); } CTX_DATA_END; @@ -452,13 +460,6 @@ void ED_object_parent_clear(bContext *C, int type) DAG_ids_flush_update(bmain, 0); WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL); -} - -/* note, poll should check for editable scene */ -static int parent_clear_exec(bContext *C, wmOperator *op) -{ - ED_object_parent_clear(C, RNA_enum_get(op->ptr, "type")); - return OPERATOR_FINISHED; } @@ -541,7 +542,7 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object if (partype == PAR_FOLLOW) { /* get or create F-Curve */ bAction *act = verify_adt_action(&cu->id, 1); - FCurve *fcu = verify_fcurve(act, NULL, "eval_time", 0, 1); + FCurve *fcu = verify_fcurve(act, NULL, NULL, "eval_time", 0, 1); /* setup dummy 'generator' modifier here to get 1-1 correspondence still working */ if (!fcu->bezt && !fcu->fpt && !fcu->modifiers.first) @@ -1195,13 +1196,27 @@ static void link_to_scene(Main *UNUSED(bmain), unsigned short UNUSED(nr)) } #endif +Base *ED_object_scene_link(Scene *scene, Object *ob) +{ + Base *base; + + if (BKE_scene_base_find(scene, ob)) { + return NULL; + } + + base = BKE_scene_base_add(scene, ob); + id_us_plus(&ob->id); + + return base; +} + static int make_links_scene_exec(bContext *C, wmOperator *op) { Main *bmain = CTX_data_main(C); Scene *scene_to = BLI_findlink(&CTX_data_main(C)->scene, RNA_enum_get(op->ptr, "scene")); if (scene_to == NULL) { - BKE_report(op->reports, RPT_ERROR, "Scene not found"); + BKE_report(op->reports, RPT_ERROR, "Couldn't find scene"); return OPERATOR_CANCELLED; } @@ -1217,12 +1232,7 @@ static int make_links_scene_exec(bContext *C, wmOperator *op) CTX_DATA_BEGIN (C, Base *, base, selected_bases) { - if (!BKE_scene_base_find(scene_to, base->object)) { - Base *nbase = MEM_mallocN(sizeof(Base), "newbase"); - *nbase = *base; - BLI_addhead(&(scene_to->base), nbase); - id_us_plus((ID *)base->object); - } + ED_object_scene_link(scene_to, base->object); } CTX_DATA_END; @@ -1919,6 +1929,7 @@ static int drop_named_material_invoke(bContext *C, wmOperator *op, wmEvent *even DAG_ids_flush_update(bmain, 0); WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C)); + WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING, ma); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index fa86f089387..89f018a1b76 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -708,10 +708,11 @@ void OBJECT_OT_select_grouped(wmOperatorType *ot) static int object_select_by_layer_exec(bContext *C, wmOperator *op) { unsigned int layernum; - short extend; + short extend, match; extend = RNA_boolean_get(op->ptr, "extend"); layernum = RNA_int_get(op->ptr, "layers"); + match = RNA_enum_get(op->ptr, "match"); if (extend == 0) { CTX_DATA_BEGIN (C, Base *, base, visible_bases) @@ -723,7 +724,14 @@ static int object_select_by_layer_exec(bContext *C, wmOperator *op) CTX_DATA_BEGIN (C, Base *, base, visible_bases) { - if (base->lay == (1 << (layernum - 1))) + int ok = 0; + + if (match == 1) /* exact */ + ok = (base->lay == (1 << (layernum - 1))); + else /* shared layers */ + ok = (base->lay & (1 << (layernum - 1))); + + if (ok) ED_base_object_select(base, BA_SELECT); } CTX_DATA_END; @@ -736,6 +744,12 @@ static int object_select_by_layer_exec(bContext *C, wmOperator *op) void OBJECT_OT_select_by_layer(wmOperatorType *ot) { + static EnumPropertyItem match_items[] = { + {1, "EXACT", 0, "Exact Match", ""}, + {2, "SHARED", 0, "Shared Layers", ""}, + {0, NULL, 0, NULL, NULL} + }; + /* identifiers */ ot->name = "Select by Layer"; ot->description = "Select all visible objects on a layer"; @@ -750,6 +764,7 @@ void OBJECT_OT_select_by_layer(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ + RNA_def_enum(ot->srna, "match", match_items, 0, "Match", ""); RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first"); RNA_def_int(ot->srna, "layers", 1, 1, 20, "Layer", "", 1, 20); } diff --git a/source/blender/editors/object/object_shapekey.c b/source/blender/editors/object/object_shapekey.c index 19864ed58cf..40b653a62fd 100644 --- a/source/blender/editors/object/object_shapekey.c +++ b/source/blender/editors/object/object_shapekey.c @@ -455,7 +455,7 @@ static int shape_key_move_exec(bContext *C, wmOperator *op) ob->shapenr++; } - SWAP(float, kb_other->pos, kb->pos) /* for absolute shape keys */ + SWAP(float, kb_other->pos, kb->pos); /* for absolute shape keys */ } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index 5a2a9a06e39..f56f9f657bc 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -2085,7 +2085,6 @@ static void vgroup_active_remove_verts(Object *ob, const int allverts, bDeformGr } else { MVert *mv; - MDeformVert *dv; int i; if (!me->dvert) { diff --git a/source/blender/editors/physics/physics_ops.c b/source/blender/editors/physics/physics_ops.c index 272e13e2a62..89ddfe02208 100644 --- a/source/blender/editors/physics/physics_ops.c +++ b/source/blender/editors/physics/physics_ops.c @@ -136,7 +136,8 @@ static void keymap_particle(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "PARTICLE_OT_weight_set", KKEY, KM_PRESS, KM_SHIFT, 0); - ED_object_generic_keymap(keyconf, keymap, 2); + ED_keymap_proportional_cycle(keyconf, keymap); + ED_keymap_proportional_editmode(keyconf, keymap, FALSE); } /******************************* boids *************************************/ diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index b7bd027ba7f..8fa3c6f992f 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -288,11 +288,12 @@ static void make_renderinfo_string(RenderStats *rs, Scene *scene, char *str) else if (scene->r.scemode & R_SINGLE_LAYER) spos += sprintf(spos, "Single Layer | "); + spos += sprintf(spos, "Frame:%d ", (scene->r.cfra)); + if (rs->statstr) { - spos += sprintf(spos, "%s ", rs->statstr); + spos += sprintf(spos, "| %s ", rs->statstr); } else { - spos += sprintf(spos, "Fra:%d ", (scene->r.cfra)); if (rs->totvert) spos += sprintf(spos, "Ve:%d ", rs->totvert); if (rs->totface) spos += sprintf(spos, "Fa:%d ", rs->totface); if (rs->tothalo) spos += sprintf(spos, "Ha:%d ", rs->tothalo); @@ -407,8 +408,12 @@ static void render_endjob(void *rjv) free_main(rj->main); /* else the frame will not update for the original value */ - if (!(rj->scene->r.scemode & R_NO_FRAME_UPDATE)) - ED_update_for_newframe(G.main, rj->scene, 1); + if (!(rj->scene->r.scemode & R_NO_FRAME_UPDATE)) { + /* possible this fails of loading new file while rendering */ + if (G.main->wm.first) { + ED_update_for_newframe(G.main, rj->scene, 1); + } + } /* XXX above function sets all tags in nodes */ ntreeCompositClearTags(rj->scene->nodetree); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 5faa2deb266..4e98d2ae967 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -46,6 +46,7 @@ #include "DNA_scene_types.h" #include "DNA_meta_types.h" #include "DNA_mesh_types.h" +#include "DNA_mask_types.h" #include "DNA_userdef_types.h" #include "BKE_context.h" @@ -59,6 +60,7 @@ #include "BKE_screen.h" #include "BKE_tessmesh.h" #include "BKE_sound.h" +#include "BKE_mask.h" #include "WM_api.h" #include "WM_types.h" @@ -71,6 +73,7 @@ #include "ED_screen_types.h" #include "ED_keyframes_draw.h" #include "ED_view3d.h" +#include "ED_clip.h" #include "RNA_access.h" #include "RNA_define.h" @@ -304,13 +307,15 @@ int ED_operator_object_active_editable(bContext *C) int ED_operator_object_active_editable_mesh(bContext *C) { Object *ob = ED_object_active_context(C); - return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW) && ob->type == OB_MESH && !(((ID *)ob->data)->lib)); + return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW) && + (ob->type == OB_MESH) && !(((ID *)ob->data)->lib)); } int ED_operator_object_active_editable_font(bContext *C) { Object *ob = ED_object_active_context(C); - return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW) && ob->type == OB_FONT); + return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW) && + (ob->type == OB_FONT)); } int ED_operator_editmesh(bContext *C) @@ -451,6 +456,13 @@ int ED_operator_editmball(bContext *C) return 0; } +int ED_operator_mask(bContext *C) +{ + SpaceClip *sc= CTX_wm_space_clip(C); + + return ED_space_clip_show_maskedit(sc); +} + /* *************************** action zone operator ************************** */ /* operator state vars used: @@ -1601,10 +1613,16 @@ static int area_max_regionsize(ScrArea *sa, ARegion *scalear, AZEdge edge) /* case of regions in regions, like operator properties panel */ /* these can sit on top of other regions such as headers, so account for this */ - else if (edge == AE_BOTTOM_TO_TOPLEFT && scalear->alignment & RGN_ALIGN_TOP && ar->alignment == RGN_ALIGN_TOP && ar->regiontype == RGN_TYPE_HEADER) + else if (edge == AE_BOTTOM_TO_TOPLEFT && scalear->alignment & RGN_ALIGN_TOP && + ar->alignment == RGN_ALIGN_TOP && ar->regiontype == RGN_TYPE_HEADER) + { dist -= ar->winy; - else if (edge == AE_TOP_TO_BOTTOMRIGHT && scalear->alignment & RGN_ALIGN_BOTTOM && ar->alignment == RGN_ALIGN_BOTTOM && ar->regiontype == RGN_TYPE_HEADER) + } + else if (edge == AE_TOP_TO_BOTTOMRIGHT && scalear->alignment & RGN_ALIGN_BOTTOM && + ar->alignment == RGN_ALIGN_BOTTOM && ar->regiontype == RGN_TYPE_HEADER) + { dist -= ar->winy; + } } return dist; @@ -1929,7 +1947,17 @@ static int keyframe_jump_exec(bContext *C, wmOperator *op) if (ob) ob_to_keylist(&ads, ob, &keys, NULL); - + + { + SpaceClip *sc = CTX_wm_space_clip(C); + if (sc) { + if ((sc->mode == SC_MODE_MASKEDIT) && sc->mask) { + MaskLayer *masklay = BKE_mask_layer_active(sc->mask); + mask_to_keylist(&ads, masklay, &keys); + } + } + } + /* build linked-list for searching */ BLI_dlrbTree_linkedlist_sync(&keys); @@ -1951,20 +1979,24 @@ static int keyframe_jump_exec(bContext *C, wmOperator *op) cfra = ak->cfra; } } - } while ((ak != NULL) && (done == 0)); - - /* any success? */ - if (done == 0) - BKE_report(op->reports, RPT_INFO, "No more keyframes to jump to in this direction"); - + } while ((ak != NULL) && (done == FALSE)); + /* free temp stuff */ BLI_dlrbTree_free(&keys); - - sound_seek_scene(bmain, scene); - WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene); - - return OPERATOR_FINISHED; + /* any success? */ + if (done == FALSE) { + BKE_report(op->reports, RPT_INFO, "No more keyframes to jump to in this direction"); + + return OPERATOR_CANCELLED; + } + else { + sound_seek_scene(bmain, scene); + + WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene); + + return OPERATOR_FINISHED; + } } static void SCREEN_OT_keyframe_jump(wmOperatorType *ot) @@ -2571,6 +2603,15 @@ static void SCREEN_OT_redo_last(wmOperatorType *ot) /* ************** region four-split operator ***************************** */ +static void view3d_localview_update_rv3d(struct RegionView3D *rv3d) +{ + if (rv3d->localvd) { + rv3d->localvd->view = rv3d->view; + rv3d->localvd->persp = rv3d->persp; + copy_qt_qt(rv3d->localvd->viewquat, rv3d->viewquat); + } +} + /* insert a region in the area region list */ static int region_quadview_exec(bContext *C, wmOperator *op) { @@ -2627,29 +2668,29 @@ static int region_quadview_exec(bContext *C, wmOperator *op) * We could avoid manipulating rv3d->localvd here if exiting * localview with a 4-split would assign these view locks */ RegionView3D *rv3d; - + rv3d = ar->regiondata; rv3d->viewlock = RV3D_LOCKED; rv3d->view = RV3D_VIEW_FRONT; rv3d->persp = RV3D_ORTHO; ED_view3d_lock(rv3d); - if (rv3d->localvd) { rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; copy_qt_qt(rv3d->localvd->viewquat, rv3d->viewquat); } + view3d_localview_update_rv3d(rv3d); ar = ar->next; rv3d = ar->regiondata; rv3d->viewlock = RV3D_LOCKED; rv3d->view = RV3D_VIEW_TOP; rv3d->persp = RV3D_ORTHO; ED_view3d_lock(rv3d); - if (rv3d->localvd) { rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; copy_qt_qt(rv3d->localvd->viewquat, rv3d->viewquat); } + view3d_localview_update_rv3d(rv3d); ar = ar->next; rv3d = ar->regiondata; rv3d->viewlock = RV3D_LOCKED; rv3d->view = RV3D_VIEW_RIGHT; rv3d->persp = RV3D_ORTHO; ED_view3d_lock(rv3d); - if (rv3d->localvd) { rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; copy_qt_qt(rv3d->localvd->viewquat, rv3d->viewquat); } + view3d_localview_update_rv3d(rv3d); ar = ar->next; rv3d = ar->regiondata; rv3d->view = RV3D_VIEW_CAMERA; rv3d->persp = RV3D_CAMOB; ED_view3d_lock(rv3d); - if (rv3d->localvd) {rv3d->localvd->view = rv3d->view; rv3d->localvd->persp = rv3d->persp; copy_qt_qt(rv3d->localvd->viewquat, rv3d->viewquat); } + view3d_localview_update_rv3d(rv3d); } ED_area_tag_redraw(sa); WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL); diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c index b5d44676cf6..5ca436b07b2 100644 --- a/source/blender/editors/sculpt_paint/paint_cursor.c +++ b/source/blender/editors/sculpt_paint/paint_cursor.c @@ -333,7 +333,7 @@ static int sculpt_get_brush_geometry(bContext *C, ViewContext *vc, float location[3]) { Scene *scene = CTX_data_scene(C); - Paint *paint = paint_get_active(scene); + Paint *paint = paint_get_active_from_context(C); Brush *brush = paint_brush(paint); float window[2]; int hit; @@ -503,7 +503,7 @@ static void paint_cursor_on_hit(Sculpt *sd, Brush *brush, ViewContext *vc, static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused)) { Scene *scene = CTX_data_scene(C); - Paint *paint = paint_get_active(scene); + Paint *paint = paint_get_active_from_context(C); Brush *brush = paint_brush(paint); ViewContext vc; float final_radius; @@ -605,7 +605,7 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused)) void paint_cursor_start(bContext *C, int (*poll)(bContext *C)) { - Paint *p = paint_get_active(CTX_data_scene(C)); + Paint *p = paint_get_active_from_context(C); if (p && !p->paint_cursor) p->paint_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), poll, paint_draw_cursor, NULL); diff --git a/source/blender/editors/sculpt_paint/paint_hide.c b/source/blender/editors/sculpt_paint/paint_hide.c index cd8b9164862..89c328e71d8 100644 --- a/source/blender/editors/sculpt_paint/paint_hide.c +++ b/source/blender/editors/sculpt_paint/paint_hide.c @@ -265,7 +265,7 @@ static void get_pbvh_nodes(PBVH *pbvh, float clip_planes[4][4], PartialVisArea mode) { - BLI_pbvh_SearchCallback cb; + BLI_pbvh_SearchCallback cb = NULL; /* select search callback */ switch (mode) { @@ -277,7 +277,6 @@ static void get_pbvh_nodes(PBVH *pbvh, break; case PARTIALVIS_ALL: case PARTIALVIS_MASKED: - cb = NULL; break; } diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index 88fb728f334..4dee83dbb82 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -2242,11 +2242,11 @@ static void project_bucket_clip_face( * * i = l * while i < len(me.verts): - * ii = i+1 - * if ii==len(me.verts): + * ii = i + 1 + * if ii == len(me.verts): * ii = l * me.edges.extend([i, ii]) - * i+=1 + * i += 1 * * if __name__ == '__main__': * main() @@ -5215,7 +5215,7 @@ static void brush_drawcursor(bContext *C, int x, int y, void *UNUSED(customdata) Scene *scene = CTX_data_scene(C); //Brush *brush= image_paint_brush(C); - Paint *paint = paint_get_active(scene); + Paint *paint = paint_get_active_from_context(C); Brush *brush = paint_brush(paint); if (paint && brush && paint->flags & PAINT_SHOW_BRUSH) { @@ -5420,13 +5420,12 @@ void PAINT_OT_grab_clone(wmOperatorType *ot) static int sample_color_exec(bContext *C, wmOperator *op) { - Scene *scene = CTX_data_scene(C); Brush *brush = image_paint_brush(C); ARegion *ar = CTX_wm_region(C); int location[2]; RNA_int_get_array(op->ptr, "location", location); - paint_sample_color(scene, ar, location[0], location[1]); + paint_sample_color(C, ar, location[0], location[1]); WM_event_add_notifier(C, NC_BRUSH | NA_EDITED, brush); diff --git a/source/blender/editors/sculpt_paint/paint_intern.h b/source/blender/editors/sculpt_paint/paint_intern.h index de149bf2806..794e7755636 100644 --- a/source/blender/editors/sculpt_paint/paint_intern.h +++ b/source/blender/editors/sculpt_paint/paint_intern.h @@ -137,7 +137,7 @@ float paint_get_tex_pixel(struct Brush *br, float u, float v); int imapaint_pick_face(struct ViewContext *vc, const int mval[2], unsigned int *index, unsigned int totface); void imapaint_pick_uv(struct Scene *scene, struct Object *ob, unsigned int faceindex, const int xy[2], float uv[2]); -void paint_sample_color(struct Scene *scene, struct ARegion *ar, int x, int y); +void paint_sample_color(const struct bContext *C, struct ARegion *ar, int x, int y); void BRUSH_OT_curve_preset(struct wmOperatorType *ot); void PAINT_OT_face_select_linked(struct wmOperatorType *ot); diff --git a/source/blender/editors/sculpt_paint/paint_mask.c b/source/blender/editors/sculpt_paint/paint_mask.c index 298ecf764d6..e309bdb99cb 100644 --- a/source/blender/editors/sculpt_paint/paint_mask.c +++ b/source/blender/editors/sculpt_paint/paint_mask.c @@ -61,16 +61,16 @@ #include <stdlib.h> static void mask_flood_fill_set_elem(float *elem, - PaintMaskFloodMode mode, - float value) + PaintMaskFloodMode mode, + float value) { switch (mode) { - case PAINT_MASK_FLOOD_VALUE: - (*elem) = value; - break; - case PAINT_MASK_INVERT: - (*elem) = 1.0f - (*elem); - break; + case PAINT_MASK_FLOOD_VALUE: + (*elem) = value; + break; + case PAINT_MASK_INVERT: + (*elem) = 1.0f - (*elem); + break; } } diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c index 23d1c0090a0..7df6a893b5c 100644 --- a/source/blender/editors/sculpt_paint/paint_ops.c +++ b/source/blender/editors/sculpt_paint/paint_ops.c @@ -60,7 +60,7 @@ static int brush_add_exec(bContext *C, wmOperator *UNUSED(op)) { /*int type = RNA_enum_get(op->ptr, "type");*/ - Paint *paint = paint_get_active(CTX_data_scene(C)); + Paint *paint = paint_get_active_from_context(C); struct Brush *br = paint_brush(paint); if (br) @@ -68,7 +68,7 @@ static int brush_add_exec(bContext *C, wmOperator *UNUSED(op)) else br = BKE_brush_add("Brush"); - paint_brush_set(paint_get_active(CTX_data_scene(C)), br); + paint_brush_set(paint, br); return OPERATOR_FINISHED; } @@ -91,7 +91,7 @@ static void BRUSH_OT_add(wmOperatorType *ot) static int brush_scale_size_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); - Paint *paint = paint_get_active(scene); + Paint *paint = paint_get_active_from_context(C); struct Brush *brush = paint_brush(paint); // Object *ob= CTX_data_active_object(C); float scalar = RNA_float_get(op->ptr, "scalar"); @@ -173,7 +173,7 @@ static void PAINT_OT_vertex_color_set(wmOperatorType *ot) static int brush_reset_exec(bContext *C, wmOperator *UNUSED(op)) { - Paint *paint = paint_get_active(CTX_data_scene(C)); + Paint *paint = paint_get_active_from_context(C); struct Brush *brush = paint_brush(paint); Object *ob = CTX_data_active_object(C); diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index 987ab932fd6..b53edeadb51 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -100,10 +100,11 @@ typedef struct PaintStroke { /*** Cursor ***/ static void paint_draw_smooth_stroke(bContext *C, int x, int y, void *customdata) { - Brush *brush = paint_brush(paint_get_active(CTX_data_scene(C))); + Paint *paint = paint_get_active_from_context(C); + Brush *brush = paint_brush(paint); PaintStroke *stroke = customdata; - glColor4ubv(paint_get_active(CTX_data_scene(C))->paint_cursor_col); + glColor4ubv(paint->paint_cursor_col); glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); @@ -141,7 +142,7 @@ static float event_tablet_data(wmEvent *event, int *pen_flip) static void paint_brush_stroke_add_step(bContext *C, wmOperator *op, wmEvent *event, float mouse_in[2]) { Scene *scene = CTX_data_scene(C); - Paint *paint = paint_get_active(scene); + Paint *paint = paint_get_active_from_context(C); Brush *brush = paint_brush(paint); PaintStroke *stroke = op->customdata; float mouse[3]; @@ -202,10 +203,10 @@ static int paint_smooth_stroke(PaintStroke *stroke, float output[2], if ((stroke->brush->flag & BRUSH_SMOOTH_STROKE) && !ELEM4(stroke->brush->sculpt_tool, - SCULPT_TOOL_GRAB, - SCULPT_TOOL_THUMB, - SCULPT_TOOL_ROTATE, - SCULPT_TOOL_SNAKE_HOOK) && + SCULPT_TOOL_GRAB, + SCULPT_TOOL_THUMB, + SCULPT_TOOL_ROTATE, + SCULPT_TOOL_SNAKE_HOOK) && !(stroke->brush->flag & BRUSH_ANCHORED) && !(stroke->brush->flag & BRUSH_RESTORE_MESH)) { @@ -281,7 +282,7 @@ PaintStroke *paint_stroke_new(bContext *C, { PaintStroke *stroke = MEM_callocN(sizeof(PaintStroke), "PaintStroke"); - stroke->brush = paint_brush(paint_get_active(CTX_data_scene(C))); + stroke->brush = paint_brush(paint_get_active_from_context(C)); view3d_set_viewcontext(C, &stroke->vc); view3d_get_transformation(stroke->vc.ar, stroke->vc.rv3d, stroke->vc.obact, &stroke->mats); @@ -358,12 +359,12 @@ struct wmKeyMap *paint_stroke_modal_keymap(struct wmKeyConfig *keyconf) } static void paint_stroke_add_sample(const Paint *paint, - PaintStroke *stroke, - float x, float y) + PaintStroke *stroke, + float x, float y) { PaintSample *sample = &stroke->samples[stroke->cur_sample]; int max_samples = MIN2(PAINT_MAX_INPUT_SAMPLES, - MAX2(paint->num_input_samples, 1)); + MAX2(paint->num_input_samples, 1)); sample->mouse[0] = x; sample->mouse[1] = y; @@ -376,7 +377,7 @@ static void paint_stroke_add_sample(const Paint *paint, } static void paint_stroke_sample_average(const PaintStroke *stroke, - PaintSample *average) + PaintSample *average) { int i; @@ -394,7 +395,7 @@ static void paint_stroke_sample_average(const PaintStroke *stroke, int paint_stroke_modal(bContext *C, wmOperator *op, wmEvent *event) { - Paint *p = paint_get_active(CTX_data_scene(C)); + Paint *p = paint_get_active_from_context(C); PaintStroke *stroke = op->customdata; PaintSample sample_average; float mouse[2]; @@ -518,7 +519,7 @@ void paint_stroke_set_mode_data(PaintStroke *stroke, void *mode_data) int paint_poll(bContext *C) { - Paint *p = paint_get_active(CTX_data_scene(C)); + Paint *p = paint_get_active_from_context(C); Object *ob = CTX_data_active_object(C); return p && ob && paint_brush(p) && diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index 4c374674c9a..082e40f8e4c 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -333,9 +333,9 @@ int imapaint_pick_face(ViewContext *vc, const int mval[2], unsigned int *index, } /* used for both 3d view and image window */ -void paint_sample_color(Scene *scene, ARegion *ar, int x, int y) /* frontbuf */ +void paint_sample_color(const bContext *C, ARegion *ar, int x, int y) /* frontbuf */ { - Brush *br = paint_brush(paint_get_active(scene)); + Brush *br = paint_brush(paint_get_active_from_context(C)); unsigned int col; char *cp; @@ -357,7 +357,7 @@ void paint_sample_color(Scene *scene, ARegion *ar, int x, int y) /* frontbuf static int brush_curve_preset_exec(bContext *C, wmOperator *op) { - Brush *br = paint_brush(paint_get_active(CTX_data_scene(C))); + Brush *br = paint_brush(paint_get_active_from_context(C)); BKE_brush_curve_preset(br, RNA_enum_get(op->ptr, "shape")); return OPERATOR_FINISHED; @@ -365,7 +365,7 @@ static int brush_curve_preset_exec(bContext *C, wmOperator *op) static int brush_curve_preset_poll(bContext *C) { - Brush *br = paint_brush(paint_get_active(CTX_data_scene(C))); + Brush *br = paint_brush(paint_get_active_from_context(C)); return br && br->curve; } diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index c5c08a94ae5..3c37ad8cf2a 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -1877,7 +1877,8 @@ static void do_weight_paint_vertex( /* use locks and/or multipaint */ float oldw; float neww; - float testw = 0; + /* float testw = 0; */ /* UNUSED */ + float observedChange = 0; float change = 0; float oldChange = 0; int i; @@ -1889,13 +1890,14 @@ static void do_weight_paint_vertex( wpi->brush_alpha_value, wpi->do_flip, do_multipaint_totsel); /* setup multi-paint */ - if (do_multipaint_totsel) { + observedChange = neww - oldw; + if (do_multipaint_totsel && observedChange) { dv_copy.dw = MEM_dupallocN(dv->dw); dv_copy.flag = dv->flag; dv_copy.totweight = dv->totweight; tdw = dw; tdw_prev = dw_prev; - change = get_mp_change(&wp->wpaint_prev[index], wpi->defbase_tot, wpi->defbase_sel, neww - oldw); + change = get_mp_change(&wp->wpaint_prev[index], wpi->defbase_tot, wpi->defbase_sel, observedChange); if (change) { if (!tdw->weight) { i = get_first_selected_nonzero_weight(dv, wpi->defbase_tot, wpi->defbase_sel); @@ -1910,8 +1912,8 @@ static void do_weight_paint_vertex( if (change && tdw_prev->weight && tdw_prev->weight * change) { if (tdw->weight != tdw_prev->weight) { oldChange = tdw->weight / tdw_prev->weight; - testw = tdw_prev->weight * change; - if (testw > tdw_prev->weight) { + /* testw = tdw_prev->weight * change; */ /* UNUSED */ + if (observedChange > 0) { if (change > oldChange) { /* reset the weights and use the new change */ defvert_reset_to_prev(wp->wpaint_prev + index, dv); @@ -2100,8 +2102,7 @@ static char *wpaint_make_validmap(Object *ob) if (chan->bone->flag & BONE_NO_DEFORM) continue; - if (BLI_ghash_haskey(gh, chan->name)) { - BLI_ghash_remove(gh, chan->name, NULL, NULL); + if (BLI_ghash_remove(gh, chan->name, NULL, NULL)) { BLI_ghash_insert(gh, chan->name, SET_INT_IN_POINTER(1)); } } @@ -2460,6 +2461,8 @@ static void wpaint_stroke_done(const bContext *C, struct PaintStroke *stroke) } DAG_id_tag_update(ob->data, 0); + + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); } @@ -2621,10 +2624,10 @@ void PAINT_OT_vertex_paint_toggle(wmOperatorType *ot) * - revise whether op->customdata should be added in object, in set_vpaint */ -typedef struct polyfacemap_e { - struct polyfacemap_e *next, *prev; +typedef struct PolyFaceMap { + struct PolyFaceMap *next, *prev; int facenr; -} polyfacemap_e; +} PolyFaceMap; typedef struct VPaintData { ViewContext vc; @@ -2645,7 +2648,7 @@ typedef struct VPaintData { static void vpaint_build_poly_facemap(struct VPaintData *vd, Mesh *me) { MFace *mf; - polyfacemap_e *e; + PolyFaceMap *e; int *origIndex; int i; @@ -2664,7 +2667,7 @@ static void vpaint_build_poly_facemap(struct VPaintData *vd, Mesh *me) if (*origIndex == ORIGINDEX_NONE) continue; - e = BLI_memarena_alloc(vd->polyfacemap_arena, sizeof(polyfacemap_e)); + e = BLI_memarena_alloc(vd->polyfacemap_arena, sizeof(PolyFaceMap)); e->facenr = i; BLI_addtail(&vd->polyfacemap[*origIndex], e); @@ -2781,7 +2784,7 @@ static void vpaint_paint_poly(VPaint *vp, VPaintData *vpd, Object *ob, MCol *mc; MLoop *ml; MLoopCol *mlc; - polyfacemap_e *e; + PolyFaceMap *e; unsigned int *lcol = ((unsigned int *)me->mloopcol) + mpoly->loopstart; unsigned int *lcolorig = ((unsigned int *)vp->vpaint_prev) + mpoly->loopstart; float alpha; @@ -2953,6 +2956,8 @@ static void vpaint_stroke_done(const bContext *C, struct PaintStroke *stroke) { ToolSettings *ts = CTX_data_tool_settings(C); struct VPaintData *vpd = paint_stroke_mode_data(stroke); + ViewContext *vc = &vpd->vc; + Object *ob = vc->obact; if (vpd->vertexcosnos) MEM_freeN(vpd->vertexcosnos); @@ -2965,6 +2970,8 @@ static void vpaint_stroke_done(const bContext *C, struct PaintStroke *stroke) BLI_memarena_free(vpd->polyfacemap_arena); } + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); + MEM_freeN(vpd); } diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 7b8337ff957..89dbe14f62a 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -212,6 +212,11 @@ typedef struct StrokeCache { float clip_tolerance[3]; float initial_mouse[2]; + /* Pre-allocated temporary storage used during smoothing */ + int num_threads; + float (**tmpgrid_co)[3], (**tmprow_co)[3]; + float **tmpgrid_mask, **tmprow_mask; + /* Variants */ float radius; float radius_squared; @@ -753,8 +758,8 @@ static float tex_strength(SculptSession *ss, Brush *br, float point[3], else if (ss->texcache) { float rotation = -mtex->rot; float symm_point[3], point_2d[2]; - float x, y; - float radius; + float x = 0.0f, y = 0.0f; /* Quite warnings */ + float radius = 1.0f; /* Quite warnings */ /* if the active area is being applied for symmetry, flip it * across the symmetry axis and rotate it back to the original @@ -919,7 +924,7 @@ static void calc_area_normal(Sculpt *sd, Object *ob, float an[3], PBVHNode **nod /* Grab brush requires to test on original data (see r33888 and * bug #25371) */ original = (paint_brush(&sd->paint)->sculpt_tool == SCULPT_TOOL_GRAB ? - TRUE : ss->cache->original); + TRUE : ss->cache->original); (void)sd; /* unused w/o openmp */ @@ -981,8 +986,8 @@ static void calc_area_normal(Sculpt *sd, Object *ob, float an[3], PBVHNode **nod /* Calculate primary direction of movement for many brushes */ static void calc_sculpt_normal(Sculpt *sd, Object *ob, - PBVHNode **nodes, int totnode, - float an[3]) + PBVHNode **nodes, int totnode, + float an[3]) { const Brush *brush = paint_brush(&sd->paint); const SculptSession *ss = ob->sculpt; @@ -990,8 +995,8 @@ static void calc_sculpt_normal(Sculpt *sd, Object *ob, switch (brush->sculpt_plane) { case SCULPT_DISP_DIR_VIEW: ED_view3d_global_to_vector(ss->cache->vc->rv3d, - ss->cache->vc->rv3d->twmat[3], - an); + ss->cache->vc->rv3d->twmat[3], + an); break; case SCULPT_DISP_DIR_X: @@ -1021,7 +1026,7 @@ static void calc_sculpt_normal(Sculpt *sd, Object *ob, } static void update_sculpt_normal(Sculpt *sd, Object *ob, - PBVHNode **nodes, int totnode) + PBVHNode **nodes, int totnode) { const Brush *brush = paint_brush(&sd->paint); StrokeCache *cache = ob->sculpt->cache; @@ -1056,7 +1061,7 @@ static void calc_local_y(ViewContext *vc, const float center[3], float y[3]) } static void calc_brush_local_mat(const Brush *brush, Object *ob, - float local_mat[4][4]) + float local_mat[4][4]) { const StrokeCache *cache = ob->sculpt->cache; float tmat[4][4]; @@ -1105,10 +1110,10 @@ static void update_brush_local_mat(Sculpt *sd, Object *ob) StrokeCache *cache = ob->sculpt->cache; if (cache->mirror_symmetry_pass == 0 && - cache->radial_symmetry_pass == 0) + cache->radial_symmetry_pass == 0) { calc_brush_local_mat(paint_brush(&sd->paint), ob, - cache->brush_local_mat); + cache->brush_local_mat); } } @@ -1117,21 +1122,21 @@ static void update_brush_local_mat(Sculpt *sd, Object *ob) static int brush_needs_sculpt_normal(const Brush *brush) { return ((ELEM(brush->sculpt_tool, - SCULPT_TOOL_GRAB, - SCULPT_TOOL_SNAKE_HOOK) && - ((brush->normal_weight > 0) || - (brush->flag & BRUSH_FRONTFACE))) || - - ELEM7(brush->sculpt_tool, - SCULPT_TOOL_BLOB, - SCULPT_TOOL_CREASE, - SCULPT_TOOL_DRAW, - SCULPT_TOOL_LAYER, - SCULPT_TOOL_NUDGE, - SCULPT_TOOL_ROTATE, - SCULPT_TOOL_THUMB) || - - (brush->mtex.brush_map_mode == MTEX_MAP_MODE_AREA)); + SCULPT_TOOL_GRAB, + SCULPT_TOOL_SNAKE_HOOK) && + ((brush->normal_weight > 0) || + (brush->flag & BRUSH_FRONTFACE))) || + + ELEM7(brush->sculpt_tool, + SCULPT_TOOL_BLOB, + SCULPT_TOOL_CREASE, + SCULPT_TOOL_DRAW, + SCULPT_TOOL_LAYER, + SCULPT_TOOL_NUDGE, + SCULPT_TOOL_ROTATE, + SCULPT_TOOL_THUMB) || + + (brush->mtex.brush_map_mode == MTEX_MAP_MODE_AREA)); } /* For the smooth brush, uses the neighboring vertices around vert to calculate @@ -1257,6 +1262,7 @@ static void do_multires_smooth_brush(Sculpt *sd, SculptSession *ss, PBVHNode *no float (*tmpgrid_co)[3], (*tmprow_co)[3]; float *tmpgrid_mask, *tmprow_mask; int v1, v2, v3, v4; + int thread_num; int *grid_indices, totgrid, gridsize, i, x, y; sculpt_brush_test_init(ss, &test); @@ -1267,17 +1273,15 @@ static void do_multires_smooth_brush(Sculpt *sd, SculptSession *ss, PBVHNode *no NULL, &gridsize, &griddata, &gridadj); BLI_pbvh_get_grid_key(ss->pbvh, &key); - #pragma omp critical - { - if (smooth_mask) { - tmpgrid_mask = MEM_mallocN(sizeof(float) * gridsize * gridsize, "tmpgrid_mask"); - tmprow_mask = MEM_mallocN(sizeof(float) * gridsize, "tmprow_mask"); - } - else { - tmpgrid_co = MEM_mallocN(sizeof(float) * 3 * gridsize * gridsize, "tmpgrid_co"); - tmprow_co = MEM_mallocN(sizeof(float) * 3 * gridsize, "tmprow_co"); - } - } + thread_num = 0; +#ifdef _OPENMP + if (sd->flags & SCULPT_USE_OPENMP) + thread_num = omp_get_thread_num(); +#endif + tmpgrid_co = ss->cache->tmpgrid_co[thread_num]; + tmprow_co = ss->cache->tmprow_co[thread_num]; + tmpgrid_mask = ss->cache->tmpgrid_mask[thread_num]; + tmprow_mask = ss->cache->tmprow_mask[thread_num]; for (i = 0; i < totgrid; ++i) { data = griddata[grid_indices[i]]; @@ -1393,18 +1397,6 @@ static void do_multires_smooth_brush(Sculpt *sd, SculptSession *ss, PBVHNode *no } } } - - #pragma omp critical - { - if (smooth_mask) { - MEM_freeN(tmpgrid_mask); - MEM_freeN(tmprow_mask); - } - else { - MEM_freeN(tmpgrid_co); - MEM_freeN(tmprow_co); - } - } } static void smooth(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, @@ -1413,6 +1405,7 @@ static void smooth(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, SculptSession *ss = ob->sculpt; const int max_iterations = 4; const float fract = 1.0f / max_iterations; + PBVHType type = BLI_pbvh_type(ss->pbvh); int iteration, n, count; float last; @@ -1421,16 +1414,25 @@ static void smooth(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, count = (int)(bstrength * max_iterations); last = max_iterations * (bstrength - count * fract); + if (type == PBVH_FACES && !ss->pmap) { + BLI_assert(!"sculpt smooth: pmap missing"); + return; + } + for (iteration = 0; iteration <= count; ++iteration) { + float strength = (iteration != count) ? 1.0f : last; + #pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP) for (n = 0; n < totnode; n++) { - if (ss->multires) { - do_multires_smooth_brush(sd, ss, nodes[n], - iteration != count ? 1.0f : last, smooth_mask); - } - else if (ss->pmap) { - do_mesh_smooth_brush(sd, ss, nodes[n], - iteration != count ? 1.0f : last, smooth_mask); + switch (type) { + case PBVH_GRIDS: + do_multires_smooth_brush(sd, ss, nodes[n], strength, + smooth_mask); + break; + case PBVH_FACES: + do_mesh_smooth_brush(sd, ss, nodes[n], strength, + smooth_mask); + break; } } @@ -1522,7 +1524,7 @@ static void do_draw_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode) /* offset vertex */ float fade = tex_strength(ss, brush, vd.co, test.dist, ss->cache->sculpt_normal_symm, vd.no, - vd.fno, *vd.mask); + vd.fno, *vd.mask); mul_v3_v3fl(proxy[vd.i], offset, fade); @@ -1578,7 +1580,7 @@ static void do_crease_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnod /* offset vertex */ const float fade = tex_strength(ss, brush, vd.co, test.dist, ss->cache->sculpt_normal_symm, - vd.no, vd.fno, *vd.mask); + vd.no, vd.fno, *vd.mask); float val1[3]; float val2[3]; @@ -1716,7 +1718,7 @@ static void do_nudge_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode if (sculpt_brush_test(&test, vd.co)) { const float fade = bstrength * tex_strength(ss, brush, vd.co, test.dist, ss->cache->sculpt_normal_symm, - vd.no, vd.fno, *vd.mask); + vd.no, vd.fno, *vd.mask); mul_v3_v3fl(proxy[vd.i], cono, fade); @@ -1765,7 +1767,7 @@ static void do_snake_hook_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int to if (sculpt_brush_test(&test, vd.co)) { const float fade = bstrength * tex_strength(ss, brush, vd.co, test.dist, ss->cache->sculpt_normal_symm, - vd.no, vd.fno, *vd.mask); + vd.no, vd.fno, *vd.mask); mul_v3_v3fl(proxy[vd.i], grab_delta, fade); @@ -1813,7 +1815,7 @@ static void do_thumb_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode if (sculpt_brush_test(&test, origco[vd.i])) { const float fade = bstrength * tex_strength(ss, brush, origco[vd.i], test.dist, ss->cache->sculpt_normal_symm, - origno[vd.i], NULL, *vd.mask); + origno[vd.i], NULL, *vd.mask); mul_v3_v3fl(proxy[vd.i], cono, fade); @@ -1866,7 +1868,7 @@ static void do_rotate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnod if (sculpt_brush_test(&test, origco[vd.i])) { const float fade = bstrength * tex_strength(ss, brush, origco[vd.i], test.dist, ss->cache->sculpt_normal_symm, - origno[vd.i], NULL, *vd.mask); + origno[vd.i], NULL, *vd.mask); mul_v3_m4v3(proxy[vd.i], m, origco[vd.i]); sub_v3_v3(proxy[vd.i], origco[vd.i]); @@ -1919,7 +1921,7 @@ static void do_layer_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode if (sculpt_brush_test(&test, origco[vd.i])) { const float fade = bstrength * tex_strength(ss, brush, vd.co, test.dist, ss->cache->sculpt_normal_symm, - vd.no, vd.fno, *vd.mask); + vd.no, vd.fno, *vd.mask); float *disp = &layer_disp[vd.i]; float val[3]; @@ -3223,6 +3225,69 @@ static void sculpt_init_mirror_clipping(Object *ob, SculptSession *ss) } } +static void sculpt_omp_start(Sculpt *sd, SculptSession *ss) +{ + StrokeCache *cache = ss->cache; + +#ifdef _OPENMP + /* If using OpenMP then create a number of threads two times the + * number of processor cores. + * Justification: Empirically I've found that two threads per + * processor gives higher throughput. */ + if (sd->flags & SCULPT_USE_OPENMP) { + cache->num_threads = 2 * omp_get_num_procs(); + omp_set_num_threads(cache->num_threads); + } + else +#endif + { + (void)sd; + cache->num_threads = 1; + } + + if (ss->multires) { + int i, gridsize, array_mem_size; + BLI_pbvh_node_get_grids(ss->pbvh, NULL, NULL, NULL, NULL, + &gridsize, NULL, NULL); + + array_mem_size = cache->num_threads * sizeof(void*); + + cache->tmpgrid_co = MEM_mallocN(array_mem_size, "tmpgrid_co array"); + cache->tmprow_co = MEM_mallocN(array_mem_size, "tmprow_co array"); + cache->tmpgrid_mask = MEM_mallocN(array_mem_size, "tmpgrid_mask array"); + cache->tmprow_mask = MEM_mallocN(array_mem_size, "tmprow_mask array"); + + for (i = 0; i < cache->num_threads; i++) { + const size_t row_size = sizeof(float) * gridsize; + const size_t co_row_size = 3 * row_size; + + cache->tmprow_co[i] = MEM_mallocN(co_row_size, "tmprow_co"); + cache->tmpgrid_co[i] = MEM_mallocN(co_row_size * gridsize, "tmpgrid_co"); + cache->tmprow_mask[i] = MEM_mallocN(row_size, "tmprow_mask"); + cache->tmpgrid_mask[i] = MEM_mallocN(row_size * gridsize, "tmpgrid_mask"); + } + } +} + +static void sculpt_omp_done(SculptSession *ss) +{ + if (ss->multires) { + int i; + + for (i = 0; i < ss->cache->num_threads; i++) { + MEM_freeN(ss->cache->tmpgrid_co[i]); + MEM_freeN(ss->cache->tmprow_co[i]); + MEM_freeN(ss->cache->tmpgrid_mask[i]); + MEM_freeN(ss->cache->tmprow_mask[i]); + } + + MEM_freeN(ss->cache->tmpgrid_co); + MEM_freeN(ss->cache->tmprow_co); + MEM_freeN(ss->cache->tmpgrid_mask); + MEM_freeN(ss->cache->tmprow_mask); + } +} + /* Initialize the stroke cache invariants from operator properties */ static void sculpt_update_cache_invariants(bContext *C, Sculpt *sd, SculptSession *ss, wmOperator *op, const float mouse[2]) { @@ -3336,6 +3401,8 @@ static void sculpt_update_cache_invariants(bContext *C, Sculpt *sd, SculptSessio cache->first_time = 1; cache->vertex_rotation = 0; + + sculpt_omp_start(sd, ss); } static void sculpt_update_brush_delta(Sculpt *sd, Object *ob, Brush *brush) @@ -3571,6 +3638,21 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, Object *ob, sd->special_rotation = cache->special_rotation; } +/* Returns true iff any of the smoothing modes are active (currently + one of smooth brush, autosmooth, mask smooth, or shift-key + smooth) */ +static int sculpt_any_smooth_mode(const Brush *brush, + StrokeCache *cache, + int stroke_mode) +{ + return ((stroke_mode == BRUSH_STROKE_SMOOTH) || + (cache && cache->alt_smooth) || + (brush->sculpt_tool == SCULPT_TOOL_SMOOTH) || + (brush->autosmooth_factor > 0) || + ((brush->sculpt_tool == SCULPT_TOOL_MASK) && + (brush->mask_tool == BRUSH_MASK_SMOOTH))); +} + static void sculpt_stroke_modifiers_check(const bContext *C, Object *ob) { SculptSession *ss = ob->sculpt; @@ -3579,7 +3661,8 @@ static void sculpt_stroke_modifiers_check(const bContext *C, Object *ob) Sculpt *sd = CTX_data_tool_settings(C)->sculpt; Brush *brush = paint_brush(&sd->paint); - sculpt_update_mesh_elements(CTX_data_scene(C), sd, ob, brush->sculpt_tool == SCULPT_TOOL_SMOOTH); + sculpt_update_mesh_elements(CTX_data_scene(C), sd, ob, + sculpt_any_smooth_mode(brush, ss->cache, 0)); } } @@ -3689,11 +3772,7 @@ static int sculpt_brush_stroke_init(bContext *C, wmOperator *op) view3d_operator_needs_opengl(C); sculpt_brush_init_tex(scene, sd, ss); - is_smooth |= mode == BRUSH_STROKE_SMOOTH; - is_smooth |= brush->sculpt_tool == SCULPT_TOOL_SMOOTH; - is_smooth |= ((brush->sculpt_tool == SCULPT_TOOL_MASK) && - (brush->mask_tool == BRUSH_MASK_SMOOTH)); - + is_smooth = sculpt_any_smooth_mode(brush, NULL, mode); sculpt_update_mesh_elements(scene, sd, ob, is_smooth); return 1; @@ -3776,19 +3855,6 @@ static int sculpt_stroke_test_start(bContext *C, struct wmOperator *op, sculpt_undo_push_begin(sculpt_tool_name(sd)); -#ifdef _OPENMP - /* If using OpenMP then create a number of threads two times the - * number of processor cores. - * Justification: Empirically I've found that two threads per - * processor gives higher throughput. */ - if (sd->flags & SCULPT_USE_OPENMP) { - int num_procs; - - num_procs = omp_get_num_procs(); - omp_set_num_threads(2 * num_procs); - } -#endif - return 1; } else @@ -3825,6 +3891,8 @@ static void sculpt_stroke_done(const bContext *C, struct PaintStroke *UNUSED(str SculptSession *ss = ob->sculpt; Sculpt *sd = CTX_data_tool_settings(C)->sculpt; + sculpt_omp_done(ss); + /* reset values used to draw brush after completing the stroke */ sd->draw_anchored = 0; sd->draw_pressure = 0; diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c index af7f3bd4aed..9827ffdc324 100644 --- a/source/blender/editors/sound/sound_ops.c +++ b/source/blender/editors/sound/sound_ops.c @@ -676,7 +676,7 @@ static int sound_poll(bContext *C) { Editing *ed = CTX_data_scene(C)->ed; - if (!ed || !ed->act_seq || ed->act_seq->type != SEQ_SOUND) + if (!ed || !ed->act_seq || ed->act_seq->type != SEQ_TYPE_SOUND_RAM) return 0; return 1; @@ -689,7 +689,7 @@ static int sound_pack_exec(bContext *C, wmOperator *op) Editing *ed = CTX_data_scene(C)->ed; bSound *sound; - if (!ed || !ed->act_seq || ed->act_seq->type != SEQ_SOUND) + if (!ed || !ed->act_seq || ed->act_seq->type != SEQ_TYPE_SOUND_RAM) return OPERATOR_CANCELLED; sound = ed->act_seq->sound; @@ -751,7 +751,7 @@ static int sound_unpack_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(even if (RNA_struct_property_is_set(op->ptr, "id")) return sound_unpack_exec(C, op); - if (!ed || !ed->act_seq || ed->act_seq->type != SEQ_SOUND) + if (!ed || !ed->act_seq || ed->act_seq->type != SEQ_TYPE_SOUND_RAM) return OPERATOR_CANCELLED; sound = ed->act_seq->sound; diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index 3961e566f80..edec57d9e93 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -236,8 +236,8 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) switch (ale->type) { case ANIMTYPE_SUMMARY: { - // FIXME: hardcoded colors - reddish color from NLA - glColor4f(0.8f, 0.2f, 0.0f, 0.4f); + /* reddish color from NLA */ + UI_ThemeColor4(TH_ANIM_ACTIVE); } break; @@ -290,6 +290,18 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) else glColor4ub(col2[0], col2[1], col2[2], 0x44); glRectf(v2d->cur.xmin, (float)y - ACHANNEL_HEIGHT_HALF, v2d->cur.xmax + EXTRA_SCROLL_PAD, (float)y + ACHANNEL_HEIGHT_HALF); } + else if (ac->datatype == ANIMCONT_MASK) { + /* TODO --- this is a copy of gpencil */ + /* frames less than one get less saturated background */ + if (sel) glColor4ub(col1[0], col1[1], col1[2], 0x22); + else glColor4ub(col2[0], col2[1], col2[2], 0x22); + glRectf(0.0f, (float)y - ACHANNEL_HEIGHT_HALF, v2d->cur.xmin, (float)y + ACHANNEL_HEIGHT_HALF); + + /* frames one and higher get a saturated background */ + if (sel) glColor4ub(col1[0], col1[1], col1[2], 0x44); + else glColor4ub(col2[0], col2[1], col2[2], 0x44); + glRectf(v2d->cur.xmin, (float)y - ACHANNEL_HEIGHT_HALF, v2d->cur.xmax + EXTRA_SCROLL_PAD, (float)y + ACHANNEL_HEIGHT_HALF); + } } } @@ -340,6 +352,9 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) case ALE_GPFRAME: draw_gpl_channel(v2d, ads, ale->data, y); break; + case ALE_MASKLAY: + draw_masklay_channel(v2d, ads, ale->data, y); + break; } } } diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 73c36fd8086..b5cd49cc15c 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -44,6 +44,7 @@ #include "DNA_gpencil_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "DNA_mask_types.h" #include "RNA_access.h" #include "RNA_define.h" @@ -64,6 +65,7 @@ #include "ED_screen.h" #include "ED_transform.h" #include "ED_markers.h" +#include "ED_mask.h" #include "WM_api.h" #include "WM_types.h" @@ -256,6 +258,19 @@ static void get_keyframe_extents(bAnimContext *ac, float *min, float *max, const *max = MAX2(*max, gpf->framenum); } } + else if (ale->datatype == ALE_MASKLAY) { + MaskLayer *masklay = ale->data; + MaskLayerShape *masklay_shape; + + /* find mask layer which is less than or equal to cframe */ + for (masklay_shape = masklay->splines_shapes.first; + masklay_shape; + masklay_shape = masklay_shape->next) + { + *min = MIN2(*min, masklay_shape->frame); + *max = MAX2(*max, masklay_shape->frame); + } + } else { FCurve *fcu = (FCurve *)ale->key_data; float tmin, tmax; @@ -445,9 +460,16 @@ static short paste_action_keys(bAnimContext *ac, ListBase anim_data = {NULL, NULL}; int filter, ok = 0; - /* filter data */ - filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS); - ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + /* filter data + * - First time we try to filter more strictly, allowing only selected channels + * to allow copying animation between channels + * - Second time, we loosen things up if nothing was found the first time, allowing + * users to just paste keyframes back into the original curve again [#31670] + */ + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS); + + if (ANIM_animdata_filter(ac, &anim_data, filter | ANIMFILTER_SEL, ac->data, ac->datatype) == 0) + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* paste keyframes */ ok = paste_animedit_keys(ac, &anim_data, offset_mode, merge_mode); @@ -469,11 +491,16 @@ static int actkeys_copy_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; /* copy keyframes */ - if (ac.datatype == ANIMCONT_GPENCIL) { + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) { // FIXME... BKE_report(op->reports, RPT_ERROR, "Keyframe pasting is not available for Grease Pencil mode"); return OPERATOR_CANCELLED; } + else if (ac.datatype == ANIMCONT_MASK) { + // FIXME... + BKE_report(op->reports, RPT_ERROR, "Keyframe pasting is not available for mask mode"); + return OPERATOR_CANCELLED; + } else { if (copy_action_keys(&ac)) { BKE_report(op->reports, RPT_ERROR, "No keyframes copied to keyframes copy/paste buffer"); @@ -514,9 +541,9 @@ static int actkeys_paste_exec(bContext *C, wmOperator *op) ac.reports = op->reports; /* paste keyframes */ - if (ac.datatype == ANIMCONT_GPENCIL) { + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) { // FIXME... - BKE_report(op->reports, RPT_ERROR, "Keyframe pasting is not available for Grease Pencil mode"); + BKE_report(op->reports, RPT_ERROR, "Keyframe pasting is not available for Grease Pencil or Mask mode"); return OPERATOR_CANCELLED; } else { @@ -618,7 +645,7 @@ static int actkeys_insertkey_exec(bContext *C, wmOperator *op) /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - if (ac.datatype == ANIMCONT_GPENCIL) + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) return OPERATOR_CANCELLED; /* what channels to affect? */ @@ -664,7 +691,7 @@ static void duplicate_action_keys(bAnimContext *ac) int filter; /* filter data */ - if (ac->datatype == ANIMCONT_GPENCIL) + if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS); else filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS); @@ -674,8 +701,12 @@ static void duplicate_action_keys(bAnimContext *ac) for (ale = anim_data.first; ale; ale = ale->next) { if (ale->type == ANIMTYPE_FCURVE) duplicate_fcurve_keys((FCurve *)ale->key_data); + else if (ale->type == ANIMTYPE_GPLAYER) + ED_gplayer_frames_duplicate((bGPDlayer *)ale->data); + else if (ale->type == ANIMTYPE_MASKLAYER) + ED_masklayer_frames_duplicate((MaskLayer *)ale->data); else - duplicate_gplayer_frames((bGPDlayer *)ale->data); + BLI_assert(0); } /* free filtered list */ @@ -696,7 +727,7 @@ static int actkeys_duplicate_exec(bContext *C, wmOperator *UNUSED(op)) duplicate_action_keys(&ac); /* validate keyframes after editing */ - if (ac.datatype != ANIMCONT_GPENCIL) + if (!ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) ANIM_editkeyframes_refresh(&ac); /* set notifier that keyframes have changed */ @@ -737,7 +768,7 @@ static void delete_action_keys(bAnimContext *ac) int filter; /* filter data */ - if (ac->datatype == ANIMCONT_GPENCIL) + if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS); else filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS); @@ -745,7 +776,13 @@ static void delete_action_keys(bAnimContext *ac) /* loop through filtered data and delete selected keys */ for (ale = anim_data.first; ale; ale = ale->next) { - if (ale->type != ANIMTYPE_GPLAYER) { + if (ale->type == ANIMTYPE_GPLAYER) { + ED_gplayer_frames_delete((bGPDlayer *)ale->data); + } + else if (ale->type == ANIMTYPE_MASKLAYER) { + ED_masklayer_frames_delete((MaskLayer *)ale->data); + } + else { FCurve *fcu = (FCurve *)ale->key_data; AnimData *adt = ale->adt; @@ -756,8 +793,6 @@ static void delete_action_keys(bAnimContext *ac) if ((fcu->totvert == 0) && (list_has_suitable_fmodifier(&fcu->modifiers, 0, FMI_TYPE_GENERATE_CURVE) == 0)) ANIM_fcurve_delete_from_animdata(ac, adt, fcu); } - else - delete_gplayer_frames((bGPDlayer *)ale->data); } /* free filtered list */ @@ -778,7 +813,7 @@ static int actkeys_delete_exec(bContext *C, wmOperator *UNUSED(op)) delete_action_keys(&ac); /* validate keyframes after editing */ - if (ac.datatype != ANIMCONT_GPENCIL) + if (!ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) ANIM_editkeyframes_refresh(&ac); /* set notifier that keyframes have changed */ @@ -833,7 +868,7 @@ static int actkeys_clean_exec(bContext *C, wmOperator *op) /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - if (ac.datatype == ANIMCONT_GPENCIL) + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) return OPERATOR_PASS_THROUGH; /* get cleaning threshold */ @@ -900,7 +935,7 @@ static int actkeys_sample_exec(bContext *C, wmOperator *UNUSED(op)) /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - if (ac.datatype == ANIMCONT_GPENCIL) + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) return OPERATOR_PASS_THROUGH; /* sample keyframes */ @@ -1007,7 +1042,7 @@ static int actkeys_expo_exec(bContext *C, wmOperator *op) /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - if (ac.datatype == ANIMCONT_GPENCIL) + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) return OPERATOR_PASS_THROUGH; /* get handle setting mode */ @@ -1078,7 +1113,7 @@ static int actkeys_ipo_exec(bContext *C, wmOperator *op) /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - if (ac.datatype == ANIMCONT_GPENCIL) + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) return OPERATOR_PASS_THROUGH; /* get handle setting mode */ @@ -1158,7 +1193,7 @@ static int actkeys_handletype_exec(bContext *C, wmOperator *op) /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - if (ac.datatype == ANIMCONT_GPENCIL) + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) return OPERATOR_PASS_THROUGH; /* get handle setting mode */ @@ -1229,7 +1264,7 @@ static int actkeys_keytype_exec(bContext *C, wmOperator *op) /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - if (ac.datatype == ANIMCONT_GPENCIL) + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) return OPERATOR_PASS_THROUGH; /* get handle setting mode */ @@ -1352,7 +1387,7 @@ static void snap_action_keys(bAnimContext *ac, short mode) KeyframeEditFunc edit_cb; /* filter data */ - if (ac->datatype == ANIMCONT_GPENCIL) + if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT); else filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS); @@ -1397,7 +1432,7 @@ static int actkeys_snap_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; // XXX... - if (ac.datatype == ANIMCONT_GPENCIL) + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) return OPERATOR_PASS_THROUGH; /* get snapping mode */ @@ -1475,7 +1510,7 @@ static void mirror_action_keys(bAnimContext *ac, short mode) } /* filter data */ - if (ac->datatype == ANIMCONT_GPENCIL) + if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS); else filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS); @@ -1511,7 +1546,7 @@ static int actkeys_mirror_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; // XXX... - if (ac.datatype == ANIMCONT_GPENCIL) + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) return OPERATOR_PASS_THROUGH; /* get mirroring mode */ diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 0c6b0f5eb3d..539a32161e5 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -43,6 +43,7 @@ #include "DNA_gpencil_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "DNA_mask_types.h" #include "RNA_access.h" #include "RNA_define.h" @@ -55,6 +56,7 @@ #include "ED_anim_api.h" #include "ED_gpencil.h" +#include "ED_mask.h" #include "ED_keyframes_draw.h" #include "ED_keyframes_edit.h" #include "ED_markers.h" @@ -92,7 +94,7 @@ static void deselect_action_keys(bAnimContext *ac, short test, short sel) KeyframeEditFunc test_cb, sel_cb; /* determine type-based settings */ - if (ac->datatype == ANIMCONT_GPENCIL) + if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_NODUPLIS); else filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS); @@ -107,7 +109,13 @@ static void deselect_action_keys(bAnimContext *ac, short test, short sel) if (test) { for (ale = anim_data.first; ale; ale = ale->next) { if (ale->type == ANIMTYPE_GPLAYER) { - if (is_gplayer_frame_selected(ale->data)) { + if (ED_gplayer_frame_select_check(ale->data)) { + sel = SELECT_SUBTRACT; + break; + } + } + else if (ale->type == ANIMTYPE_MASKLAYER) { + if (ED_masklayer_frame_select_check(ale->data)) { sel = SELECT_SUBTRACT; break; } @@ -127,7 +135,9 @@ static void deselect_action_keys(bAnimContext *ac, short test, short sel) /* Now set the flags */ for (ale = anim_data.first; ale; ale = ale->next) { if (ale->type == ANIMTYPE_GPLAYER) - set_gplayer_frame_selection(ale->data, sel); + ED_gplayer_frame_select_set(ale->data, sel); + else if (ale->type == ANIMTYPE_MASKLAYER) + ED_masklayer_frame_select_set(ale->data, sel); else ANIM_fcurve_keyframes_loop(&ked, ale->key_data, NULL, sel_cb, NULL); } @@ -249,7 +259,9 @@ static void borderselect_action(bAnimContext *ac, rcti rect, short mode, short s { /* loop over data selecting */ if (ale->type == ANIMTYPE_GPLAYER) - borderselect_gplayer_frames(ale->data, rectf.xmin, rectf.xmax, selectmode); + ED_gplayer_frames_select_border(ale->data, rectf.xmin, rectf.xmax, selectmode); + else if (ale->type == ANIMTYPE_MASKLAYER) + ED_masklayer_frames_select_border(ale->data, rectf.xmin, rectf.xmax, selectmode); else ANIM_animchannel_keyframes_loop(&ked, ac->ads, ale, ok_cb, select_cb, NULL); } @@ -398,7 +410,10 @@ static void markers_selectkeys_between(bAnimContext *ac) ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } else if (ale->type == ANIMTYPE_GPLAYER) { - borderselect_gplayer_frames(ale->data, min, max, SELECT_ADD); + ED_gplayer_frames_select_border(ale->data, min, max, SELECT_ADD); + } + else if (ale->type == ANIMTYPE_MASKLAYER) { + ED_masklayer_frames_select_border(ale->data, min, max, SELECT_ADD); } else { ANIM_fcurve_keyframes_loop(&ked, ale->key_data, ok_cb, select_cb, NULL); @@ -432,7 +447,7 @@ static void columnselect_action_keys(bAnimContext *ac, short mode) ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); for (ale = anim_data.first; ale; ale = ale->next) - gplayer_make_cfra_list(ale->data, &ked.list, 1); + ED_gplayer_make_cfra_list(ale->data, &ked.list, 1); } else { filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE /*| ANIMFILTER_CURVESONLY*/); @@ -467,7 +482,7 @@ static void columnselect_action_keys(bAnimContext *ac, short mode) /* loop through all of the keys and select additional keyframes * based on the keys found to be selected above */ - if (ac->datatype == ANIMCONT_GPENCIL) + if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE); else filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE /*| ANIMFILTER_CURVESONLY*/); @@ -488,7 +503,9 @@ static void columnselect_action_keys(bAnimContext *ac, short mode) /* select elements with frame number matching cfraelem */ if (ale->type == ANIMTYPE_GPLAYER) - select_gpencil_frame(ale->data, ce->cfra, SELECT_ADD); + ED_gpencil_select_frame(ale->data, ce->cfra, SELECT_ADD); + else if (ale->type == ANIMTYPE_MASKLAYER) + ED_mask_select_frame(ale->data, ce->cfra, SELECT_ADD); else ANIM_fcurve_keyframes_loop(&ked, ale->key_data, ok_cb, select_cb, NULL); } @@ -755,7 +772,7 @@ static void actkeys_select_leftright(bAnimContext *ac, short leftright, short se } /* filter data */ - if (ac->datatype == ANIMCONT_GPENCIL) + if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_NODUPLIS); else filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE /*| ANIMFILTER_CURVESONLY*/ | ANIMFILTER_NODUPLIS); @@ -771,7 +788,9 @@ static void actkeys_select_leftright(bAnimContext *ac, short leftright, short se ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } else if (ale->type == ANIMTYPE_GPLAYER) - borderselect_gplayer_frames(ale->data, ked.f1, ked.f2, select_mode); + ED_gplayer_frames_select_border(ale->data, ked.f1, ked.f2, select_mode); + else if (ale->type == ANIMTYPE_MASKLAYER) + ED_masklayer_frames_select_border(ale->data, ked.f1, ked.f2, select_mode); else ANIM_fcurve_keyframes_loop(&ked, ale->key_data, ok_cb, select_cb, NULL); } @@ -908,7 +927,9 @@ static void actkeys_mselect_single(bAnimContext *ac, bAnimListElem *ale, short s /* select the nominated keyframe on the given frame */ if (ale->type == ANIMTYPE_GPLAYER) - select_gpencil_frame(ale->data, selx, select_mode); + ED_gpencil_select_frame(ale->data, selx, select_mode); + else if (ale->type == ANIMTYPE_MASKLAYER) + ED_mask_select_frame(ale->data, selx, select_mode); else ANIM_animchannel_keyframes_loop(&ked, ac->ads, ale, ok_cb, select_cb, NULL); } @@ -933,7 +954,7 @@ static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float se /* loop through all of the keys and select additional keyframes * based on the keys found to be selected above */ - if (ac->datatype == ANIMCONT_GPENCIL) + if (ELEM(ac->datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE /*| ANIMFILTER_CURVESONLY */ | ANIMFILTER_NODUPLIS); else filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_NODUPLIS); @@ -950,8 +971,10 @@ static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float se /* select elements with frame number matching cfra */ if (ale->type == ANIMTYPE_GPLAYER) - select_gpencil_frame(ale->key_data, selx, select_mode); - else + ED_gpencil_select_frame(ale->key_data, selx, select_mode); + else if (ale->type == ANIMTYPE_MASKLAYER) + ED_mask_select_frame(ale->key_data, selx, select_mode); + else ANIM_fcurve_keyframes_loop(&ked, ale->key_data, ok_cb, select_cb, NULL); } @@ -1051,7 +1074,12 @@ static void mouse_action_keys(bAnimContext *ac, const int mval[2], short select_ bGPDlayer *gpl = (bGPDlayer *)ale->data; gpl_to_keylist(ads, gpl, &anim_keys); } - + else if (ale->type == ANIMTYPE_MASKLAYER) { + // TODO: why don't we just give masklayers key_data too? + MaskLayer *masklay = (MaskLayer *)ale->data; + mask_to_keylist(ads, masklay, &anim_keys); + } + /* start from keyframe at root of BST, traversing until we find one within the range that was clicked on */ for (ak = anim_keys.root; ak; ak = akn) { if (IN_RANGE(ak->cfra, rectf.xmin, rectf.xmax)) { @@ -1120,6 +1148,18 @@ static void mouse_action_keys(bAnimContext *ac, const int mval[2], short select_ //gpencil_layer_setactive(gpd, gpl); } } + else if (ac->datatype == ANIMCONT_MASK) { + /* deselect all other channels first */ + ANIM_deselect_anim_channels(ac, ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); + + /* Highlight GPencil Layer */ + if ((ale && ale->data) && (ale->type == ANIMTYPE_MASKLAYER)) { + MaskLayer *masklay = ale->data; + + masklay->flag |= MASK_LAYERFLAG_SELECT; + //gpencil_layer_setactive(gpd, gpl); + } + } } /* only select keyframes if we clicked on a valid channel and hit something */ diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c index ae4020aaaba..db1d4ed1155 100644 --- a/source/blender/editors/space_action/space_action.c +++ b/source/blender/editors/space_action/space_action.c @@ -361,7 +361,7 @@ static void action_listener(ScrArea *sa, wmNotifier *wmn) case NC_SCREEN: if (wmn->data == ND_GPENCIL) { /* only handle this event in GPencil mode for performance considerations */ - if (saction->mode == SACTCONT_GPENCIL) + if (saction->mode == SACTCONT_GPENCIL) ED_area_tag_redraw(sa); } break; @@ -405,6 +405,18 @@ static void action_listener(ScrArea *sa, wmNotifier *wmn) break; } break; + case NC_MASK: + if (saction->mode == SACTCONT_MASK) { + switch (wmn->data) { + case ND_DATA: + ED_area_tag_refresh(sa); + break; + default: /* just redrawing the view will do */ + ED_area_tag_redraw(sa); + break; + } + } + break; case NC_NODE: if (wmn->action == NA_SELECTED) { /* selection changed, so force refresh to flush (needs flag set to do syncing) */ @@ -423,6 +435,12 @@ static void action_listener(ScrArea *sa, wmNotifier *wmn) break; } break; + case NC_WINDOW: + if (saction->flag & SACTION_TEMP_NEEDCHANSYNC) { + /* force redraw/refresh after undo/redo - [#28962] */ + ED_area_tag_refresh(sa); + } + break; } } @@ -452,9 +470,21 @@ static void action_refresh(const bContext *C, ScrArea *sa) * NOTE: the temp flag is used to indicate when this needs to be done, and will be cleared once handled */ if (saction->flag & SACTION_TEMP_NEEDCHANSYNC) { + ARegion *ar; + + /* Perform syncing of channel state incl. selection + * Active action setting also occurs here (as part of anim channel filtering in anim_filter.c) + */ ANIM_sync_animchannels_to_data(C); saction->flag &= ~SACTION_TEMP_NEEDCHANSYNC; + + /* Tag everything for redraw + * - Regions (such as header) need to be manually tagged for redraw too + * or else they don't update [#28962] + */ ED_area_tag_redraw(sa); + for (ar = sa->regionbase.first; ar; ar = ar->next) + ED_region_tag_redraw(ar); } /* region updates? */ diff --git a/source/blender/editors/space_api/CMakeLists.txt b/source/blender/editors/space_api/CMakeLists.txt index 611322fc1ab..137cda9c285 100644 --- a/source/blender/editors/space_api/CMakeLists.txt +++ b/source/blender/editors/space_api/CMakeLists.txt @@ -35,7 +35,6 @@ set(INC_SYS ) set(SRC - space.c spacetypes.c ) diff --git a/source/blender/editors/space_api/space.c b/source/blender/editors/space_api/space.c deleted file mode 100644 index e677014decf..00000000000 --- a/source/blender/editors/space_api/space.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2007 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** \file blender/editors/space_api/space.c - * \ingroup spapi - */ - - -#include <string.h> -#include <stdio.h> - - -#include "BLI_blenlib.h" -#include "BLI_math.h" - - - -/* */ - - - diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c index 956aee84fd3..fa77249a7a1 100644 --- a/source/blender/editors/space_api/spacetypes.c +++ b/source/blender/editors/space_api/spacetypes.c @@ -62,6 +62,7 @@ #include "ED_mball.h" #include "ED_logic.h" #include "ED_clip.h" +#include "ED_mask.h" /* only call once on startup, storage is global in BKE kernel listbase */ void ED_spacetypes_init(void) @@ -111,6 +112,7 @@ void ED_spacetypes_init(void) ED_operatortypes_sound(); ED_operatortypes_render(); ED_operatortypes_logic(); + ED_operatortypes_mask(); UI_view2d_operatortypes(); UI_buttons_operatortypes(); @@ -133,6 +135,7 @@ void ED_spacetypes_init(void) ED_operatormacros_action(); ED_operatormacros_clip(); ED_operatormacros_curve(); + ED_operatormacros_mask(); /* register dropboxes (can use macros) */ spacetypes = BKE_spacetypes_list(); @@ -164,6 +167,7 @@ void ED_spacetypes_keymap(wmKeyConfig *keyconf) ED_keymap_physics(keyconf); ED_keymap_metaball(keyconf); ED_keymap_paint(keyconf); + ED_keymap_mask(keyconf); ED_marker_keymap(keyconf); UI_view2d_keymap(keyconf); diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index 661f7ad7d0f..b13ba9a1aa3 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -125,9 +125,9 @@ void buttons_header_buttons(const bContext *C, ARegion *ar) if (sbuts->pathflag & (1 << _ctx)) { \ but = uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, _icon, xco += BUT_UNIT_X, yco, BUT_UNIT_X, UI_UNIT_Y, &(sbuts->mainb), 0.0, (float)_ctx, 0, 0, TIP_(_tip)); \ uiButClearFlag(but, UI_BUT_UNDO); \ - } \ + } (void)0 - BUTTON_HEADER_CTX(BCONTEXT_RENDER, ICON_SCENE, N_("Render")) + BUTTON_HEADER_CTX(BCONTEXT_RENDER, ICON_SCENE, N_("Render")); BUTTON_HEADER_CTX(BCONTEXT_SCENE, ICON_SCENE_DATA, N_("Scene")); BUTTON_HEADER_CTX(BCONTEXT_WORLD, ICON_WORLD, N_("World")); BUTTON_HEADER_CTX(BCONTEXT_OBJECT, ICON_OBJECT_DATA, N_("Object")); diff --git a/source/blender/editors/space_buttons/buttons_texture.c b/source/blender/editors/space_buttons/buttons_texture.c index 5c5c24f7bc1..cdecda63432 100644 --- a/source/blender/editors/space_buttons/buttons_texture.c +++ b/source/blender/editors/space_buttons/buttons_texture.c @@ -175,7 +175,7 @@ static void buttons_texture_users_from_context(ListBase *users, const bContext * if (!(pinid || pinid == &scene->id)) { ob = (scene->basact) ? scene->basact->object : NULL; wrld = scene->world; - brush = paint_brush(paint_get_active(scene)); + brush = paint_brush(paint_get_active_from_context(C)); } if (ob && ob->type == OB_LAMP && !la) diff --git a/source/blender/editors/space_clip/CMakeLists.txt b/source/blender/editors/space_clip/CMakeLists.txt index ec5e81e4b2c..ecc4dea8b05 100644 --- a/source/blender/editors/space_clip/CMakeLists.txt +++ b/source/blender/editors/space_clip/CMakeLists.txt @@ -52,6 +52,7 @@ set(SRC clip_utils.c space_clip.c tracking_ops.c + tracking_select.c clip_intern.h ) diff --git a/source/blender/editors/space_clip/clip_buttons.c b/source/blender/editors/space_clip/clip_buttons.c index 18f191a46a6..9b3d713d040 100644 --- a/source/blender/editors/space_clip/clip_buttons.c +++ b/source/blender/editors/space_clip/clip_buttons.c @@ -59,7 +59,7 @@ #include "WM_api.h" #include "WM_types.h" -#include "clip_intern.h" // own include +#include "clip_intern.h" /* own include */ /* Panels */ @@ -165,34 +165,36 @@ void uiTemplateTrack(uiLayout *layout, PointerRNA *ptr, const char *propname) block = uiLayoutAbsoluteBlock(layout); - scopes->track_preview_height = (scopes->track_preview_height <= UI_UNIT_Y)?UI_UNIT_Y : scopes->track_preview_height; + scopes->track_preview_height = + (scopes->track_preview_height <= UI_UNIT_Y) ? UI_UNIT_Y : scopes->track_preview_height; uiDefBut(block, TRACKPREVIEW, 0, "", rect.xmin, rect.ymin, rect.xmax - rect.xmin, - scopes->track_preview_height, scopes, 0, 0, 0, 0, ""); + scopes->track_preview_height, scopes, 0, 0, 0, 0, ""); } /********************* Marker Template ************************/ -#define B_MARKER_POS 3 -#define B_MARKER_OFFSET 4 -#define B_MARKER_PAT_DIM 5 -#define B_MARKER_SEARCH_POS 6 -#define B_MARKER_SEARCH_DIM 7 -#define B_MARKER_FLAG 8 +#define B_MARKER_POS 3 +#define B_MARKER_OFFSET 4 +#define B_MARKER_PAT_DIM 5 +#define B_MARKER_SEARCH_POS 6 +#define B_MARKER_SEARCH_DIM 7 +#define B_MARKER_FLAG 8 typedef struct { - int compact; /* compact mode */ + int compact; /* compact mode */ MovieClip *clip; - MovieClipUser *user; /* user of clip */ + MovieClipUser *user; /* user of clip */ MovieTrackingTrack *track; + MovieTrackingMarker *marker; - int framenr; /* current frame number */ - float marker_pos[2]; /* position of marker in pixel coords */ - float track_pat[2]; /* position and dimensions of marker pattern in pixel coords */ - float track_offset[2]; /* offset of "parenting" point */ - float track_search_pos[2], track_search[2]; /* position and dimensions of marker search in pixel coords */ - int marker_flag; /* marker's flags */ + int framenr; /* current frame number */ + float marker_pos[2]; /* position of marker in pixel coords */ + float marker_pat[2]; /* position and dimensions of marker pattern in pixel coords */ + float track_offset[2]; /* offset of "parenting" point */ + float marker_search_pos[2], marker_search[2]; /* position and dimensions of marker search in pixel coords */ + int marker_flag; /* marker's flags */ } MarkerUpdateCb; static void to_pixel_space(float r[2], float a[2], int width, int height) @@ -204,13 +206,13 @@ static void to_pixel_space(float r[2], float a[2], int width, int height) static void marker_update_cb(bContext *C, void *arg_cb, void *UNUSED(arg)) { - MarkerUpdateCb *cb = (MarkerUpdateCb*) arg_cb; + MarkerUpdateCb *cb = (MarkerUpdateCb *) arg_cb; MovieTrackingMarker *marker; if (!cb->compact) return; - marker = BKE_tracking_ensure_marker(cb->track, cb->framenr); + marker = BKE_tracking_marker_ensure(cb->track, cb->framenr); marker->flag = cb->marker_flag; @@ -219,13 +221,13 @@ static void marker_update_cb(bContext *C, void *arg_cb, void *UNUSED(arg)) static void marker_block_handler(bContext *C, void *arg_cb, int event) { - MarkerUpdateCb *cb = (MarkerUpdateCb*) arg_cb; + MarkerUpdateCb *cb = (MarkerUpdateCb *) arg_cb; MovieTrackingMarker *marker; int width, height, ok = FALSE; BKE_movieclip_get_size(cb->clip, cb->user, &width, &height); - marker = BKE_tracking_ensure_marker(cb->track, cb->framenr); + marker = BKE_tracking_marker_ensure(cb->track, cb->framenr); if (event == B_MARKER_POS) { marker->pos[0] = cb->marker_pos[0] / width; @@ -238,60 +240,63 @@ static void marker_block_handler(bContext *C, void *arg_cb, int event) ok = TRUE; } else if (event == B_MARKER_PAT_DIM) { - float dim[2], pat_dim[2]; + float dim[2], pat_dim[2], pat_min[2], pat_max[2]; + float scale_x, scale_y; + int a; - sub_v2_v2v2(pat_dim, cb->track->pat_max, cb->track->pat_min); + BKE_tracking_marker_pattern_minmax(cb->marker, pat_min, pat_max); - dim[0] = cb->track_pat[0] / width; - dim[1] = cb->track_pat[1] / height; + sub_v2_v2v2(pat_dim, pat_max, pat_min); - sub_v2_v2(dim, pat_dim); - mul_v2_fl(dim, 0.5f); + dim[0] = cb->marker_pat[0] / width; + dim[1] = cb->marker_pat[1] / height; - cb->track->pat_min[0] -= dim[0]; - cb->track->pat_min[1] -= dim[1]; + scale_x = dim[0] / pat_dim[0]; + scale_y = dim[1] / pat_dim[1]; - cb->track->pat_max[0] += dim[0]; - cb->track->pat_max[1] += dim[1]; + for (a = 0; a < 4; a++) { + cb->marker->pattern_corners[a][0] *= scale_x; + cb->marker->pattern_corners[a][1] *= scale_y; + } - BKE_tracking_clamp_track(cb->track, CLAMP_PAT_DIM); + BKE_tracking_marker_clamp(cb->marker, CLAMP_PAT_DIM); ok = TRUE; } else if (event == B_MARKER_SEARCH_POS) { float delta[2], side[2]; - sub_v2_v2v2(side, cb->track->search_max, cb->track->search_min); + sub_v2_v2v2(side, cb->marker->search_max, cb->marker->search_min); mul_v2_fl(side, 0.5f); - delta[0] = cb->track_search_pos[0] / width; - delta[1] = cb->track_search_pos[1] / height; + delta[0] = cb->marker_search_pos[0] / width; + delta[1] = cb->marker_search_pos[1] / height; - sub_v2_v2v2(cb->track->search_min, delta, side); - add_v2_v2v2(cb->track->search_max, delta, side); + sub_v2_v2v2(cb->marker->search_min, delta, side); + add_v2_v2v2(cb->marker->search_max, delta, side); - BKE_tracking_clamp_track(cb->track, CLAMP_SEARCH_POS); + BKE_tracking_marker_clamp(cb->marker, CLAMP_SEARCH_POS); ok = TRUE; } else if (event == B_MARKER_SEARCH_DIM) { float dim[2], search_dim[2]; - sub_v2_v2v2(search_dim, cb->track->search_max, cb->track->search_min); + sub_v2_v2v2(search_dim, cb->marker->search_max, cb->marker->search_min); - dim[0] = cb->track_search[0] / width; - dim[1] = cb->track_search[1] / height; + dim[0] = cb->marker_search[0] / width; + dim[1] = cb->marker_search[1] / height; sub_v2_v2(dim, search_dim); mul_v2_fl(dim, 0.5f); - cb->track->search_min[0] -= dim[0]; - cb->track->search_min[1] -= dim[1]; + cb->marker->search_min[0] -= dim[0]; + cb->marker->search_min[1] -= dim[1]; - cb->track->search_max[0] += dim[0]; - cb->track->search_max[1] += dim[1]; + cb->marker->search_max[0] += dim[0]; + cb->marker->search_max[1] += dim[1]; - BKE_tracking_clamp_track(cb->track, CLAMP_SEARCH_DIM); + BKE_tracking_marker_clamp(cb->marker, CLAMP_SEARCH_DIM); ok = TRUE; } @@ -337,6 +342,7 @@ void uiTemplateMarker(uiLayout *layout, PointerRNA *ptr, const char *propname, P MovieTrackingMarker *marker; MarkerUpdateCb *cb; const char *tip; + float pat_min[2], pat_max[2]; if (!ptr->data) return; @@ -359,13 +365,14 @@ void uiTemplateMarker(uiLayout *layout, PointerRNA *ptr, const char *propname, P user = userptr->data; track = trackptr->data; - marker = BKE_tracking_get_marker(track, user->framenr); + marker = BKE_tracking_marker_get(track, user->framenr); cb = MEM_callocN(sizeof(MarkerUpdateCb), "uiTemplateMarker update_cb"); cb->compact = compact; cb->clip = clip; cb->user = user; cb->track = track; + cb->marker = marker; cb->marker_flag = marker->flag; cb->framenr = user->framenr; @@ -383,7 +390,7 @@ void uiTemplateMarker(uiLayout *layout, PointerRNA *ptr, const char *propname, P } else { int width, height, step, digits; - float pat_dim[2], pat_pos[2], search_dim[2], search_pos[2]; + float pat_dim[2], search_dim[2], search_pos[2]; uiLayout *col; BKE_movieclip_get_size(clip, user, &width, &height); @@ -399,19 +406,18 @@ void uiTemplateMarker(uiLayout *layout, PointerRNA *ptr, const char *propname, P step = 100; digits = 2; - sub_v2_v2v2(pat_dim, track->pat_max, track->pat_min); - sub_v2_v2v2(search_dim, track->search_max, track->search_min); + BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max); - add_v2_v2v2(search_pos, track->search_max, track->search_min); - mul_v2_fl(search_pos, 0.5); + sub_v2_v2v2(pat_dim, pat_max, pat_min); + sub_v2_v2v2(search_dim, marker->search_max, marker->search_min); - add_v2_v2v2(pat_pos, track->pat_max, track->pat_min); - mul_v2_fl(pat_pos, 0.5); + add_v2_v2v2(search_pos, marker->search_max, marker->search_min); + mul_v2_fl(search_pos, 0.5); to_pixel_space(cb->marker_pos, marker->pos, width, height); - to_pixel_space(cb->track_pat, pat_dim, width, height); - to_pixel_space(cb->track_search, search_dim, width, height); - to_pixel_space(cb->track_search_pos, search_pos, width, height); + to_pixel_space(cb->marker_pat, pat_dim, width, height); + to_pixel_space(cb->marker_search, search_dim, width, height); + to_pixel_space(cb->marker_search_pos, search_pos, width, height); to_pixel_space(cb->track_offset, track->offset, width, height); cb->marker_flag = marker->flag; @@ -426,7 +432,7 @@ void uiTemplateMarker(uiLayout *layout, PointerRNA *ptr, const char *propname, P tip = "Marker is enabled at current frame"; uiDefButBitI(block, OPTIONN, MARKER_DISABLED, B_MARKER_FLAG, "Enabled", 10, 190, 145, 19, &cb->marker_flag, - 0, 0, 0, 0, tip); + 0, 0, 0, 0, tip); col = uiLayoutColumn(layout, 1); uiLayoutSetActive(col, (cb->marker_flag & MARKER_DISABLED) == 0); @@ -436,31 +442,31 @@ void uiTemplateMarker(uiLayout *layout, PointerRNA *ptr, const char *propname, P uiDefBut(block, LABEL, 0, "Position:", 0, 190, 300, 19, NULL, 0, 0, 0, 0, ""); uiDefButF(block, NUM, B_MARKER_POS, "X:", 10, 171, 145, 19, &cb->marker_pos[0], - -10*width, 10.0*width, step, digits, "X-position of marker at frame in screen coordinates"); + -10 * width, 10.0 * width, step, digits, "X-position of marker at frame in screen coordinates"); uiDefButF(block, NUM, B_MARKER_POS, "Y:", 165, 171, 145, 19, &cb->marker_pos[1], - -10*height, 10.0*height, step, digits, "Y-position of marker at frame in screen coordinates"); + -10 * height, 10.0 * height, step, digits, "Y-position of marker at frame in screen coordinates"); uiDefBut(block, LABEL, 0, "Offset:", 0, 152, 300, 19, NULL, 0, 0, 0, 0, ""); uiDefButF(block, NUM, B_MARKER_OFFSET, "X:", 10, 133, 145, 19, &cb->track_offset[0], - -10*width, 10.0*width, step, digits, "X-offset to parenting point"); + -10 * width, 10.0 * width, step, digits, "X-offset to parenting point"); uiDefButF(block, NUM, B_MARKER_OFFSET, "Y:", 165, 133, 145, 19, &cb->track_offset[1], - -10*height, 10.0*height, step, digits, "Y-offset to parenting point"); + -10 * height, 10.0 * height, step, digits, "Y-offset to parenting point"); uiDefBut(block, LABEL, 0, "Pattern Area:", 0, 114, 300, 19, NULL, 0, 0, 0, 0, ""); - uiDefButF(block, NUM, B_MARKER_PAT_DIM, "Width:", 10, 95, 300, 19, &cb->track_pat[0], 3.0f, - 10.0*width, step, digits, "Width of marker's pattern in screen coordinates"); - uiDefButF(block, NUM, B_MARKER_PAT_DIM, "Height:", 10, 76, 300, 19, &cb->track_pat[1], 3.0f, - 10.0*height, step, digits, "Height of marker's pattern in screen coordinates"); + uiDefButF(block, NUM, B_MARKER_PAT_DIM, "Width:", 10, 95, 300, 19, &cb->marker_pat[0], 3.0f, + 10.0 * width, step, digits, "Width of marker's pattern in screen coordinates"); + uiDefButF(block, NUM, B_MARKER_PAT_DIM, "Height:", 10, 76, 300, 19, &cb->marker_pat[1], 3.0f, + 10.0 * height, step, digits, "Height of marker's pattern in screen coordinates"); uiDefBut(block, LABEL, 0, "Search Area:", 0, 57, 300, 19, NULL, 0, 0, 0, 0, ""); - uiDefButF(block, NUM, B_MARKER_SEARCH_POS, "X:", 10, 38, 145, 19, &cb->track_search_pos[0], - -width, width, step, digits, "X-position of search at frame relative to marker's position"); - uiDefButF(block, NUM, B_MARKER_SEARCH_POS, "Y:", 165, 38, 145, 19, &cb->track_search_pos[1], - -height, height, step, digits, "X-position of search at frame relative to marker's position"); - uiDefButF(block, NUM, B_MARKER_SEARCH_DIM, "Width:", 10, 19, 300, 19, &cb->track_search[0], 3.0f, - 10.0*width, step, digits, "Width of marker's search in screen soordinates"); - uiDefButF(block, NUM, B_MARKER_SEARCH_DIM, "Height:", 10, 0, 300, 19, &cb->track_search[1], 3.0f, - 10.0*height, step, digits, "Height of marker's search in screen soordinates"); + uiDefButF(block, NUM, B_MARKER_SEARCH_POS, "X:", 10, 38, 145, 19, &cb->marker_search_pos[0], + -width, width, step, digits, "X-position of search at frame relative to marker's position"); + uiDefButF(block, NUM, B_MARKER_SEARCH_POS, "Y:", 165, 38, 145, 19, &cb->marker_search_pos[1], + -height, height, step, digits, "X-position of search at frame relative to marker's position"); + uiDefButF(block, NUM, B_MARKER_SEARCH_DIM, "Width:", 10, 19, 300, 19, &cb->marker_search[0], 3.0f, + 10.0 * width, step, digits, "Width of marker's search in screen soordinates"); + uiDefButF(block, NUM, B_MARKER_SEARCH_DIM, "Height:", 10, 0, 300, 19, &cb->marker_search[1], 3.0f, + 10.0 * height, step, digits, "Height of marker's search in screen soordinates"); uiBlockEndAlign(block); } diff --git a/source/blender/editors/space_clip/clip_dopesheet_draw.c b/source/blender/editors/space_clip/clip_dopesheet_draw.c index 84209f7b744..361a3a7d906 100644 --- a/source/blender/editors/space_clip/clip_dopesheet_draw.c +++ b/source/blender/editors/space_clip/clip_dopesheet_draw.c @@ -25,12 +25,12 @@ * ***** END GPL LICENSE BLOCK ***** */ -/** \file blender/editors/space_clip/clip_graph_draw.c +/** \file blender/editors/space_clip/clip_dopesheet_draw.c * \ingroup spclip */ #include "DNA_movieclip_types.h" -#include "DNA_object_types.h" /* SELECT */ +#include "DNA_object_types.h" /* SELECT */ #include "DNA_scene_types.h" #include "MEM_guardedalloc.h" @@ -61,7 +61,7 @@ #include "RNA_access.h" -#include "clip_intern.h" // own include +#include "clip_intern.h" /* own include */ static void track_channel_color(MovieTrackingTrack *track, float default_color[3], float color[3]) { @@ -83,10 +83,10 @@ static void draw_keyframe_shape(float x, float y, float xscale, float yscale, sh { /* coordinates for diamond shape */ static const float _unit_diamond_shape[4][2] = { - {0.0f, 1.0f}, /* top vert */ - {1.0f, 0.0f}, /* mid-right */ - {0.0f, -1.0f}, /* bottom vert */ - {-1.0f, 0.0f} /* mid-left */ + {0.0f, 1.0f}, /* top vert */ + {1.0f, 0.0f}, /* mid-right */ + {0.0f, -1.0f}, /* bottom vert */ + {-1.0f, 0.0f} /* mid-left */ }; static GLuint displist1 = 0; static GLuint displist2 = 0; @@ -95,26 +95,26 @@ static void draw_keyframe_shape(float x, float y, float xscale, float yscale, sh /* initialize 2 display lists for diamond shape - one empty, one filled */ if (displist1 == 0) { displist1 = glGenLists(1); - glNewList(displist1, GL_COMPILE); - - glBegin(GL_LINE_LOOP); - glVertex2fv(_unit_diamond_shape[0]); - glVertex2fv(_unit_diamond_shape[1]); - glVertex2fv(_unit_diamond_shape[2]); - glVertex2fv(_unit_diamond_shape[3]); - glEnd(); + glNewList(displist1, GL_COMPILE); + + glBegin(GL_LINE_LOOP); + glVertex2fv(_unit_diamond_shape[0]); + glVertex2fv(_unit_diamond_shape[1]); + glVertex2fv(_unit_diamond_shape[2]); + glVertex2fv(_unit_diamond_shape[3]); + glEnd(); glEndList(); } if (displist2 == 0) { displist2 = glGenLists(1); - glNewList(displist2, GL_COMPILE); - - glBegin(GL_QUADS); - glVertex2fv(_unit_diamond_shape[0]); - glVertex2fv(_unit_diamond_shape[1]); - glVertex2fv(_unit_diamond_shape[2]); - glVertex2fv(_unit_diamond_shape[3]); - glEnd(); + glNewList(displist2, GL_COMPILE); + + glBegin(GL_QUADS); + glVertex2fv(_unit_diamond_shape[0]); + glVertex2fv(_unit_diamond_shape[1]); + glVertex2fv(_unit_diamond_shape[2]); + glVertex2fv(_unit_diamond_shape[3]); + glEnd(); glEndList(); } @@ -158,6 +158,12 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene) MovieTrackingDopesheetChannel *channel; float y, xscale, yscale; float strip[4], selected_strip[4]; + float height = (dopesheet->tot_channel * CHANNEL_STEP) + (CHANNEL_HEIGHT * 2); + + /* don't use totrect set, as the width stays the same + * (NOTE: this is ok here, the configuration is pretty straightforward) + */ + v2d->tot.ymin = (float)(-height); y = (float) CHANNEL_FIRST; @@ -200,8 +206,8 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene) /* tracked segments */ for (i = 0; i < channel->tot_segment; i++) { - int start_frame = channel->segments[2 * i]; - int end_frame = channel->segments[2 * i + 1]; + int start_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, channel->segments[2 * i]); + int end_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, channel->segments[2 * i + 1]); if (sel) glColor4fv(selected_strip); @@ -210,7 +216,7 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene) if (start_frame != end_frame) { glRectf(start_frame, (float) y - STRIP_HEIGHT_HALF, - end_frame, (float) y + STRIP_HEIGHT_HALF); + end_frame, (float) y + STRIP_HEIGHT_HALF); draw_keyframe_shape(start_frame, y, xscale, yscale, sel, alpha); draw_keyframe_shape(end_frame, y, xscale, yscale, sel, alpha); } @@ -224,8 +230,11 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene) while (i < track->markersnr) { MovieTrackingMarker *marker = &track->markers[i]; - if ((marker->flag & (MARKER_DISABLED | MARKER_TRACKED)) == 0) - draw_keyframe_shape(marker->framenr, y, xscale, yscale, sel, alpha); + if ((marker->flag & (MARKER_DISABLED | MARKER_TRACKED)) == 0) { + int framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, marker->framenr); + + draw_keyframe_shape(framenr, y, xscale, yscale, sel, alpha); + } i++; } @@ -304,10 +313,10 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar) else UI_ThemeColor(TH_TEXT); - font_height = BLF_height(fontid, track->name); + font_height = BLF_height(fontid, channel->name); BLF_position(fontid, v2d->cur.xmin + CHANNEL_PAD, - y - font_height / 2.0f, 0.0f); - BLF_draw(fontid, track->name, strlen(track->name)); + y - font_height / 2.0f, 0.0f); + BLF_draw(fontid, channel->name, strlen(channel->name)); } /* adjust y-position for next one */ @@ -328,21 +337,15 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar) IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax)) { MovieTrackingTrack *track = channel->track; - uiBut *but; + const int icon = (track->flag & TRACK_LOCKED) ? ICON_LOCKED : ICON_UNLOCKED; PointerRNA ptr; - int icon; RNA_pointer_create(&clip->id, &RNA_MovieTrackingTrack, track, &ptr); - if (track->flag & TRACK_LOCKED) - icon = ICON_LOCKED; - else - icon = ICON_UNLOCKED; - uiBlockSetEmboss(block, UI_EMBOSSN); - but = uiDefIconButR(block, ICONTOG, 1, icon, - v2d->cur.xmax - UI_UNIT_X - CHANNEL_PAD, y - UI_UNIT_Y / 2.0f, - UI_UNIT_X, UI_UNIT_Y, &ptr, "lock", 0, 0, 0, 0, 0, NULL); + uiDefIconButR(block, ICONTOG, 1, icon, + v2d->cur.xmax - UI_UNIT_X - CHANNEL_PAD, y - UI_UNIT_Y / 2.0f, + UI_UNIT_X, UI_UNIT_Y, &ptr, "lock", 0, 0, 0, 0, 0, NULL); uiBlockSetEmboss(block, UI_EMBOSS); } diff --git a/source/blender/editors/space_clip/clip_dopesheet_ops.c b/source/blender/editors/space_clip/clip_dopesheet_ops.c index 0fd17523425..716994f7487 100644 --- a/source/blender/editors/space_clip/clip_dopesheet_ops.c +++ b/source/blender/editors/space_clip/clip_dopesheet_ops.c @@ -25,7 +25,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -/** \file blender/editors/space_clip/clip_graph_ops.c +/** \file blender/editors/space_clip/clip_dopesheet_ops.c * \ingroup spclip */ @@ -59,6 +59,23 @@ #include "clip_intern.h" // own include +#if 0 +static int ED_space_clip_dopesheet_poll(bContext *C) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc && sc->clip) { + if (sc->view == SC_VIEW_DOPESHEET) { + ARegion *ar = CTX_wm_region(C); + + return ar->regiontype == RGN_TYPE_PREVIEW; + } + } + + return FALSE; +} +#endif + /********************** select channel operator *********************/ static int dopesheet_select_channel_poll(bContext *C) @@ -76,8 +93,10 @@ static int dopesheet_select_channel_exec(bContext *C, wmOperator *op) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; + MovieTrackingObject *object = BKE_tracking_object_get_active(tracking); MovieTrackingDopesheet *dopesheet = &tracking->dopesheet; MovieTrackingDopesheetChannel *channel; + ListBase *tracksbase = BKE_tracking_object_get_tracks(tracking, object); float location[2]; int extend = RNA_boolean_get(op->ptr, "extend"); int current_channel_index = 0, channel_index; @@ -93,6 +112,11 @@ static int dopesheet_select_channel_exec(bContext *C, wmOperator *op) track->flag ^= TRACK_DOPE_SEL; else track->flag |= TRACK_DOPE_SEL; + + if (track->flag & TRACK_DOPE_SEL) { + tracking->act_track = track; + BKE_tracking_track_select(tracksbase, track, TRACK_AREA_ALL, TRUE); + } } else if (!extend) track->flag &= ~TRACK_DOPE_SEL; diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c index c00359f0f32..1679f784e8c 100644 --- a/source/blender/editors/space_clip/clip_draw.c +++ b/source/blender/editors/space_clip/clip_draw.c @@ -32,13 +32,15 @@ #include "DNA_gpencil_types.h" #include "DNA_movieclip_types.h" #include "DNA_scene_types.h" -#include "DNA_object_types.h" /* SELECT */ +#include "DNA_object_types.h" /* SELECT */ +#include "DNA_mask_types.h" #include "MEM_guardedalloc.h" #include "BKE_context.h" #include "BKE_movieclip.h" #include "BKE_tracking.h" +#include "BKE_mask.h" #include "IMB_imbuf_types.h" #include "IMB_imbuf.h" @@ -67,7 +69,7 @@ #include "BLF_api.h" -#include "clip_intern.h" // own include +#include "clip_intern.h" // own include /*********************** main area drawing *************************/ @@ -96,8 +98,8 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc float x; int *points, totseg, i, a; float sfra = SFRA, efra = EFRA, framelen = ar->winx / (efra - sfra + 1); - MovieTrackingTrack *act_track = BKE_tracking_active_track(&clip->tracking); - MovieTrackingReconstruction *reconstruction = BKE_tracking_get_reconstruction(&clip->tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(&clip->tracking); + MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(&clip->tracking); glEnable(GL_BLEND); @@ -124,7 +126,7 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc if (act_track) { MovieTrackingTrack *track = act_track; - for (i = sfra, a = 0; i <= efra; i++) { + for (i = sfra - clip->start_frame + 1, a = 0; i <= efra - clip->start_frame + 1; i++) { int framenr; MovieTrackingMarker *marker; @@ -153,7 +155,7 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc else glColor4ub(255, 255, 0, 96); - glRecti((i - sfra) * framelen, 0, (i - sfra + 1)*framelen, 4); + glRecti((i - sfra + clip->start_frame - 1) * framelen, 0, (i - sfra + clip->start_frame) * framelen, 4); } } } @@ -181,7 +183,7 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc } if (!ok) - glRecti((i - sfra) * framelen, 0, (i - sfra + 1) * framelen, 8); + glRecti((i - sfra + clip->start_frame - 1) * framelen, 0, (i - sfra + clip->start_frame) * framelen, 8); } } @@ -194,6 +196,32 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc glRecti(x, 0, x + framelen, 8); clip_draw_curfra_label(sc, x, 8.0f); + + /* movie clip animation */ + if ((sc->mode == SC_MODE_MASKEDIT) && sc->mask) { + MaskLayer *masklay = BKE_mask_layer_active(sc->mask); + if (masklay) { + MaskLayerShape *masklay_shape; + + glColor4ub(255, 175, 0, 255); + glBegin(GL_LINES); + + for (masklay_shape = masklay->splines_shapes.first; + masklay_shape; + masklay_shape = masklay_shape->next) + { + i = masklay_shape->frame; + + /* glRecti((i - sfra) * framelen, 0, (i - sfra + 1) * framelen, 4); */ + + /* use a line so we always see the keyframes */ + glVertex2i((i - sfra) * framelen, 0); + glVertex2i((i - sfra) * framelen, (i == CFRA) ? 22 : 10); + } + + glEnd(); + } + } } static void draw_movieclip_notes(SpaceClip *sc, ARegion *ar) @@ -249,10 +277,10 @@ static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf, glScalef(zoomx, zoomy, 1.0f); glBegin(GL_QUADS); - glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f); - glTexCoord2f(1.0f, 0.0f); glVertex2f(width, 0.0f); - glTexCoord2f(1.0f, 1.0f); glVertex2f(width, height); - glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, height); + glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f); + glTexCoord2f(1.0f, 0.0f); glVertex2f(width, 0.0f); + glTexCoord2f(1.0f, 1.0f); glVertex2f(width, height); + glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, height); glEnd(); glPopMatrix(); @@ -292,10 +320,10 @@ static void draw_movieclip_buffer(SpaceClip *sc, ARegion *ar, ImBuf *ibuf, glMultMatrixf(sc->stabmat); glBegin(GL_LINE_LOOP); - glVertex2f(0.0f, 0.0f); - glVertex2f(width, 0.0f); - glVertex2f(width, height); - glVertex2f(0.0f, height); + glVertex2f(0.0f, 0.0f); + glVertex2f(width, 0.0f); + glVertex2f(width, height); + glVertex2f(0.0f, height); glEnd(); glPopMatrix(); @@ -310,22 +338,22 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin int count = sc->path_length; int i, a, b, curindex = -1; float path[102][2]; - int tiny = sc->flag & SC_SHOW_TINY_MARKER, framenr; + int tiny = sc->flag & SC_SHOW_TINY_MARKER, framenr, start_frame; MovieTrackingMarker *marker; if (count == 0) return; - marker = BKE_tracking_get_marker(track, sc->user.framenr); - if (marker->framenr != sc->user.framenr || marker->flag & MARKER_DISABLED) - return; + start_frame = framenr = ED_space_clip_clip_framenr(sc); - framenr = marker->framenr; + marker = BKE_tracking_marker_get(track, framenr); + if (marker->framenr != framenr || marker->flag & MARKER_DISABLED) + return; a = count; i = framenr - 1; while (i >= framenr - count) { - marker = BKE_tracking_get_marker(track, i); + marker = BKE_tracking_marker_get(track, i); if (!marker || marker->flag & MARKER_DISABLED) break; @@ -334,7 +362,7 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin add_v2_v2v2(path[--a], marker->pos, track->offset); ED_clip_point_undistorted_pos(sc, path[a], path[a]); - if (marker->framenr == sc->user.framenr) + if (marker->framenr == start_frame) curindex = a; } else { @@ -347,13 +375,13 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin b = count; i = framenr; while (i <= framenr + count) { - marker = BKE_tracking_get_marker(track, i); + marker = BKE_tracking_marker_get(track, i); if (!marker || marker->flag & MARKER_DISABLED) break; if (marker->framenr == i) { - if (marker->framenr == sc->user.framenr) + if (marker->framenr == start_frame) curindex = b; add_v2_v2v2(path[b++], marker->pos, track->offset); @@ -371,17 +399,17 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin if (TRACK_VIEW_SELECTED(sc, track)) { glPointSize(5.0f); glBegin(GL_POINTS); - for (i = a; i < b; i++) { - if (i != curindex) - glVertex2f(path[i][0], path[i][1]); - } + for (i = a; i < b; i++) { + if (i != curindex) + glVertex2f(path[i][0], path[i][1]); + } glEnd(); } glLineWidth(3.0f); glBegin(GL_LINE_STRIP); - for (i = a; i < b; i++) - glVertex2f(path[i][0], path[i][1]); + for (i = a; i < b; i++) + glVertex2f(path[i][0], path[i][1]); glEnd(); glLineWidth(1.0f); } @@ -391,25 +419,25 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin if (TRACK_VIEW_SELECTED(sc, track)) { glPointSize(3.0f); glBegin(GL_POINTS); - for (i = a; i < b; i++) { - if (i == count + 1) - UI_ThemeColor(TH_PATH_AFTER); + for (i = a; i < b; i++) { + if (i == count + 1) + UI_ThemeColor(TH_PATH_AFTER); - if (i != curindex) - glVertex2f(path[i][0], path[i][1]); - } + if (i != curindex) + glVertex2f(path[i][0], path[i][1]); + } glEnd(); } UI_ThemeColor(TH_PATH_BEFORE); glBegin(GL_LINE_STRIP); - for (i = a; i < b; i++) { - if (i == count + 1) - UI_ThemeColor(TH_PATH_AFTER); + for (i = a; i < b; i++) { + if (i == count + 1) + UI_ThemeColor(TH_PATH_AFTER); - glVertex2f(path[i][0], path[i][1]); - } + glVertex2f(path[i][0], path[i][1]); + } glEnd(); glPointSize(1.0f); } @@ -428,35 +456,38 @@ static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieT if ((marker->flag & MARKER_DISABLED) == 0) { float pos[2]; - rctf r; + float p[2]; - BLI_init_rctf(&r, track->pat_min[0], track->pat_max[0], track->pat_min[1], track->pat_max[1]); add_v2_v2v2(pos, marker->pos, track->offset); ED_clip_point_undistorted_pos(sc, pos, pos); - if (BLI_in_rctf(&r, pos[0] - marker_pos[0], pos[1] - marker_pos[1])) { + sub_v2_v2v2(p, pos, marker_pos); + + if (isect_point_quad_v2(p, marker->pattern_corners[0], marker->pattern_corners[1], + marker->pattern_corners[2], marker->pattern_corners[3])) + { if (tiny) glPointSize(3.0f); else glPointSize(4.0f); glBegin(GL_POINTS); - glVertex2f(pos[0], pos[1]); + glVertex2f(pos[0], pos[1]); glEnd(); glPointSize(1.0f); } else { if (!tiny) glLineWidth(3.0f); glBegin(GL_LINES); - glVertex2f(pos[0] + px[0]*2, pos[1]); - glVertex2f(pos[0] + px[0]*8, pos[1]); + glVertex2f(pos[0] + px[0] * 2, pos[1]); + glVertex2f(pos[0] + px[0] * 8, pos[1]); - glVertex2f(pos[0] - px[0]*2, pos[1]); - glVertex2f(pos[0] - px[0]*8, pos[1]); + glVertex2f(pos[0] - px[0] * 2, pos[1]); + glVertex2f(pos[0] - px[0] * 8, pos[1]); - glVertex2f(pos[0], pos[1] - px[1]*2); - glVertex2f(pos[0], pos[1] - px[1]*8); + glVertex2f(pos[0], pos[1] - px[1] * 2); + glVertex2f(pos[0], pos[1] - px[1] * 8); - glVertex2f(pos[0], pos[1] + px[1]*2); - glVertex2f(pos[0], pos[1] + px[1]*8); + glVertex2f(pos[0], pos[1] + px[1] * 2); + glVertex2f(pos[0], pos[1] + px[1] * 8); glEnd(); if (!tiny) glLineWidth(1.0f); } @@ -471,10 +502,10 @@ static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieT if (sc->flag & SC_SHOW_MARKER_PATTERN) { glBegin(GL_LINE_LOOP); - glVertex2f(track->pat_min[0], track->pat_min[1]); - glVertex2f(track->pat_max[0], track->pat_min[1]); - glVertex2f(track->pat_max[0], track->pat_max[1]); - glVertex2f(track->pat_min[0], track->pat_max[1]); + glVertex2fv(marker->pattern_corners[0]); + glVertex2fv(marker->pattern_corners[1]); + glVertex2fv(marker->pattern_corners[2]); + glVertex2fv(marker->pattern_corners[3]); glEnd(); } @@ -482,10 +513,10 @@ static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieT ((marker->flag & MARKER_DISABLED) == 0 || (sc->flag & SC_SHOW_MARKER_PATTERN) == 0); if (sc->flag & SC_SHOW_MARKER_SEARCH && show_search) { glBegin(GL_LINE_LOOP); - glVertex2f(track->search_min[0], track->search_min[1]); - glVertex2f(track->search_max[0], track->search_min[1]); - glVertex2f(track->search_max[0], track->search_max[1]); - glVertex2f(track->search_min[0], track->search_max[1]); + glVertex2f(marker->search_min[0], marker->search_min[1]); + glVertex2f(marker->search_max[0], marker->search_min[1]); + glVertex2f(marker->search_max[0], marker->search_max[1]); + glVertex2f(marker->search_min[0], marker->search_max[1]); glEnd(); } glPopMatrix(); @@ -515,7 +546,7 @@ static void track_colors(MovieTrackingTrack *track, int act, float col[3], float } static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, - float marker_pos[2], int width, int height, int act, int sel) + float marker_pos[2], int width, int height, int act, int sel) { int tiny = sc->flag & SC_SHOW_TINY_MARKER; int show_search = 0; @@ -528,8 +559,7 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra /* marker position and offset position */ if ((track->flag & SELECT) == sel && (marker->flag & MARKER_DISABLED) == 0) { - float pos[2]; - rctf r; + float pos[2], p[2]; if (track->flag & TRACK_LOCKED) { if (act) @@ -546,16 +576,19 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra glColor3fv(col); } - BLI_init_rctf(&r, track->pat_min[0], track->pat_max[0], track->pat_min[1], track->pat_max[1]); add_v2_v2v2(pos, marker->pos, track->offset); ED_clip_point_undistorted_pos(sc, pos, pos); - if (BLI_in_rctf(&r, pos[0] - marker_pos[0], pos[1] - marker_pos[1])) { + sub_v2_v2v2(p, pos, marker_pos); + + if (isect_point_quad_v2(p, marker->pattern_corners[0], marker->pattern_corners[1], + marker->pattern_corners[2], marker->pattern_corners[3])) + { if (!tiny) glPointSize(2.0f); glBegin(GL_POINTS); - glVertex2f(pos[0], pos[1]); + glVertex2f(pos[0], pos[1]); glEnd(); if (!tiny) @@ -563,17 +596,17 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra } else { glBegin(GL_LINES); - glVertex2f(pos[0] + px[0]*3, pos[1]); - glVertex2f(pos[0] + px[0]*7, pos[1]); + glVertex2f(pos[0] + px[0] * 3, pos[1]); + glVertex2f(pos[0] + px[0] * 7, pos[1]); - glVertex2f(pos[0] - px[0]*3, pos[1]); - glVertex2f(pos[0] - px[0]*7, pos[1]); + glVertex2f(pos[0] - px[0] * 3, pos[1]); + glVertex2f(pos[0] - px[0] * 7, pos[1]); - glVertex2f(pos[0], pos[1] - px[1]*3); - glVertex2f(pos[0], pos[1] - px[1]*7); + glVertex2f(pos[0], pos[1] - px[1] * 3); + glVertex2f(pos[0], pos[1] - px[1] * 7); - glVertex2f(pos[0], pos[1] + px[1]*3); - glVertex2f(pos[0], pos[1] + px[1]*7); + glVertex2f(pos[0], pos[1] + px[1] * 3); + glVertex2f(pos[0], pos[1] + px[1] * 7); glEnd(); glColor3f(0.0f, 0.0f, 0.0f); @@ -583,8 +616,8 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra glLogicOp(GL_NOR); glBegin(GL_LINES); - glVertex2fv(pos); - glVertex2fv(marker_pos); + glVertex2fv(pos); + glVertex2fv(marker_pos); glEnd(); glDisable(GL_COLOR_LOGIC_OP); @@ -623,16 +656,16 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra } glBegin(GL_LINE_LOOP); - glVertex2f(track->pat_min[0], track->pat_min[1]); - glVertex2f(track->pat_max[0], track->pat_min[1]); - glVertex2f(track->pat_max[0], track->pat_max[1]); - glVertex2f(track->pat_min[0], track->pat_max[1]); + glVertex2fv(marker->pattern_corners[0]); + glVertex2fv(marker->pattern_corners[1]); + glVertex2fv(marker->pattern_corners[2]); + glVertex2fv(marker->pattern_corners[3]); glEnd(); } /* search */ show_search = TRACK_VIEW_SELECTED(sc, track) && - ((marker->flag & MARKER_DISABLED) == 0 || (sc->flag & SC_SHOW_MARKER_PATTERN) == 0); + ((marker->flag & MARKER_DISABLED) == 0 || (sc->flag & SC_SHOW_MARKER_PATTERN) == 0); if ((track->search_flag & SELECT) == sel && (sc->flag & SC_SHOW_MARKER_SEARCH) && show_search) { if (track->flag & TRACK_LOCKED) { if (act) @@ -656,70 +689,82 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra } glBegin(GL_LINE_LOOP); - glVertex2f(track->search_min[0], track->search_min[1]); - glVertex2f(track->search_max[0], track->search_min[1]); - glVertex2f(track->search_max[0], track->search_max[1]); - glVertex2f(track->search_min[0], track->search_max[1]); + glVertex2f(marker->search_min[0], marker->search_min[1]); + glVertex2f(marker->search_max[0], marker->search_min[1]); + glVertex2f(marker->search_max[0], marker->search_max[1]); + glVertex2f(marker->search_min[0], marker->search_max[1]); glEnd(); } - /* pyramid */ - if (sel && TRACK_VIEW_SELECTED(sc, track) && - (track->tracker == TRACKER_KLT) && - (marker->flag & MARKER_DISABLED) == 0) - { - if (track->flag & TRACK_LOCKED) { - if (act) - UI_ThemeColor(TH_ACT_MARKER); - else if (track->pat_flag & SELECT) - UI_ThemeColorShade(TH_LOCK_MARKER, 64); - else UI_ThemeColor(TH_LOCK_MARKER); - } - else if (marker->flag & MARKER_DISABLED) { - if (act) - UI_ThemeColor(TH_ACT_MARKER); - else if (track->pat_flag & SELECT) - UI_ThemeColorShade(TH_DIS_MARKER, 128); - else UI_ThemeColor(TH_DIS_MARKER); - } - else { - if (track->pat_flag & SELECT) - glColor3fv(scol); - else - glColor3fv(col); - } - - { - int i = 0; - glPushMatrix(); - glEnable(GL_LINE_STIPPLE); - for (i = 1; i < track->pyramid_levels; ++i) { - glScalef(2.0f, 2.0f, 1.0); - } - /* only draw a pattern for the coarsest level */ - glBegin(GL_LINE_LOOP); - glVertex2f(track->pat_min[0], track->pat_min[1]); - glVertex2f(track->pat_max[0], track->pat_min[1]); - glVertex2f(track->pat_max[0], track->pat_max[1]); - glVertex2f(track->pat_min[0], track->pat_max[1]); - glEnd(); - glDisable(GL_LINE_STIPPLE); - glPopMatrix(); - } - } - if (tiny) glDisable(GL_LINE_STIPPLE); glPopMatrix(); } +static float get_shortest_pattern_side(MovieTrackingMarker *marker) +{ + int i, next; + float len = FLT_MAX; + + for (i = 0; i < 4; i++) { + float cur_len; + + next = (i + 1) % 4; + + cur_len = len_v2v2(marker->pattern_corners[i], marker->pattern_corners[next]); + + len = MIN2(cur_len, len); + } + + return len; +} + +static void draw_marker_slide_square(float x, float y, float dx, float dy, int outline, float px[2]) +{ + float tdx, tdy; + + tdx = dx; + tdy = dy; + + if (outline) { + tdx += px[0]; + tdy += px[1]; + } + + glBegin(GL_QUADS); + glVertex3f(x - tdx, y + tdy, 0.0f); + glVertex3f(x + tdx, y + tdy, 0.0f); + glVertex3f(x + tdx, y - tdy, 0.0f); + glVertex3f(x - tdx, y - tdy, 0.0f); + glEnd(); +} + +static void draw_marker_slide_triangle(float x, float y, float dx, float dy, int outline, float px[2]) +{ + float tdx, tdy; + + tdx = dx * 2.0f; + tdy = dy * 2.0f; + + if (outline) { + tdx += px[0]; + tdy += px[1]; + } + + glBegin(GL_TRIANGLES); + glVertex3f(x, y, 0.0f); + glVertex3f(x - tdx, y, 0.0f); + glVertex3f(x, y + tdy, 0.0f); + glEnd(); +} + static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, float marker_pos[2], int outline, int sel, int act, int width, int height) { - float x, y, dx, dy, patdx, patdy, searchdx, searchdy, tdx, tdy; + float dx, dy, patdx, patdy, searchdx, searchdy; int tiny = sc->flag & SC_SHOW_TINY_MARKER; - float col[3], scol[3], px[2]; + float col[3], scol[3], px[2], side; if ((tiny && outline) || (marker->flag & MARKER_DISABLED)) return; @@ -740,11 +785,12 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo dx = 6.0f / width / sc->zoom; dy = 6.0f / height / sc->zoom; - patdx = MIN2(dx * 2.0f / 3.0f, (track->pat_max[0] - track->pat_min[0]) / 6.0f); - patdy = MIN2(dy * 2.0f / 3.0f, (track->pat_max[1] - track->pat_min[1]) / 6.0f); + side = get_shortest_pattern_side(marker); + patdx = MIN2(dx * 2.0f / 3.0f, side / 6.0f); + patdy = MIN2(dy * 2.0f / 3.0f, side * width / height / 6.0f); - searchdx = MIN2(dx, (track->search_max[0] - track->search_min[0]) / 6.0f); - searchdy = MIN2(dy, (track->search_max[1] - track->search_min[1]) / 6.0f); + searchdx = MIN2(dx, (marker->search_max[0] - marker->search_min[0]) / 6.0f); + searchdy = MIN2(dy, (marker->search_max[1] - marker->search_min[1]) / 6.0f); px[0] = 1.0f / sc->zoom / width / sc->scale; px[1] = 1.0f / sc->zoom / height / sc->scale; @@ -758,44 +804,18 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo } /* search offset square */ - x = track->search_min[0]; - y = track->search_max[1]; - - tdx = searchdx; - tdy = searchdy; - - if (outline) { - tdx += px[0]; - tdy += px[1]; - } - - glBegin(GL_QUADS); - glVertex3f(x - tdx, y + tdy, 0); - glVertex3f(x + tdx, y + tdy, 0); - glVertex3f(x + tdx, y - tdy, 0); - glVertex3f(x - tdx, y - tdy, 0); - glEnd(); + draw_marker_slide_square(marker->search_min[0], marker->search_max[1], searchdx, searchdy, outline, px); /* search re-sizing triangle */ - x = track->search_max[0]; - y = track->search_min[1]; - - tdx = searchdx * 2.0f; - tdy = searchdy * 2.0f; - - if (outline) { - tdx += px[0]; - tdy += px[1]; - } - - glBegin(GL_TRIANGLES); - glVertex3f(x, y, 0); - glVertex3f(x - tdx, y, 0); - glVertex3f(x, y + tdy, 0); - glEnd(); + draw_marker_slide_triangle(marker->search_max[0], marker->search_min[1], searchdx, searchdy, outline, px); } if ((sc->flag & SC_SHOW_MARKER_PATTERN) && ((track->pat_flag & SELECT) == sel || outline)) { + int i; + float pat_min[2], pat_max[2]; + float dx = 12.0f / width, dy = 12.0f / height; + float tilt_ctrl[2]; + if (!outline) { if (track->pat_flag & SELECT) glColor3fv(scol); @@ -803,42 +823,42 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo glColor3fv(col); } - /* pattern offset square */ - x = track->pat_min[0]; - y = track->pat_max[1]; + /* pattern's corners sliding squares */ + for (i = 0; i < 4; i++) { + draw_marker_slide_square(marker->pattern_corners[i][0], marker->pattern_corners[i][1], + patdx / 1.5f, patdy / 1.5f, outline, px); + } - tdx = patdx; - tdy = patdy; + /* ** sliders to control overall pattern ** */ + add_v2_v2v2(tilt_ctrl, marker->pattern_corners[1], marker->pattern_corners[2]); - if (outline) { - tdx += px[0]; - tdy += px[1]; - } + BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max); + + glEnable(GL_LINE_STIPPLE); + glLineStipple(3, 0xaaaa); - glBegin(GL_QUADS); - glVertex3f(x - tdx, y + tdy, 0); - glVertex3f(x + tdx, y + tdy, 0); - glVertex3f(x + tdx, y - tdy, 0); - glVertex3f(x - tdx, y - tdy, 0); + glBegin(GL_LINE_LOOP); + glVertex2f(pat_min[0] - dx, pat_min[1] - dy); + glVertex2f(pat_max[0] + dx, pat_min[1] - dy); + glVertex2f(pat_max[0] + dx, pat_max[1] + dy); + glVertex2f(pat_min[0] - dx, pat_max[1] + dy); glEnd(); - /* pattern re-sizing triangle */ - x = track->pat_max[0]; - y = track->pat_min[1]; + glBegin(GL_LINES); + glVertex2f(0.0f, 0.0f); + glVertex2fv(tilt_ctrl); + glEnd(); - tdx = patdx*2.0f; - tdy = patdy*2.0f; + glDisable(GL_LINE_STIPPLE); - if (outline) { - tdx += px[0]; - tdy += px[1]; - } + /* marker's offset slider */ + draw_marker_slide_square(pat_min[0] - dx, pat_max[1] + dy, patdx, patdy, outline, px); - glBegin(GL_TRIANGLES); - glVertex3f(x, y, 0); - glVertex3f(x - tdx, y, 0); - glVertex3f(x, y + tdy, 0); - glEnd(); + /* pattern re-sizing triangle */ + draw_marker_slide_triangle(pat_max[0] + dx, pat_min[1] - dy, patdx, patdy, outline, px); + + /* slider to control pattern tilt */ + draw_marker_slide_square(tilt_ctrl[0], tilt_ctrl[1], patdx, patdy, outline, px); } glPopMatrix(); @@ -875,14 +895,17 @@ static void draw_marker_texts(SpaceClip *sc, MovieTrackingTrack *track, MovieTra } if ((sc->flag & SC_SHOW_MARKER_SEARCH) && - ((marker->flag & MARKER_DISABLED) == 0 || (sc->flag & SC_SHOW_MARKER_PATTERN) == 0)) + ((marker->flag & MARKER_DISABLED) == 0 || (sc->flag & SC_SHOW_MARKER_PATTERN) == 0)) { - dx = track->search_min[0]; - dy = track->search_min[1]; + dx = marker->search_min[0]; + dy = marker->search_min[1]; } else if (sc->flag & SC_SHOW_MARKER_PATTERN) { - dx = track->pat_min[0]; - dy = track->pat_min[1]; + float pat_min[2], pat_max[2]; + + BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max); + dx = pat_min[0]; + dy = pat_min[1]; } pos[0] = (marker_pos[0] + dx) * width; @@ -891,12 +914,12 @@ static void draw_marker_texts(SpaceClip *sc, MovieTrackingTrack *track, MovieTra mul_m4_v3(sc->stabmat, pos); - pos[0] = pos[0]*zoomx; - pos[1] = pos[1]*zoomy - fontsize; + pos[0] = pos[0] * zoomx; + pos[1] = pos[1] * zoomy - fontsize; if (marker->flag & MARKER_DISABLED) strcpy(state, "disabled"); - else if (marker->framenr != sc->user.framenr) + else if (marker->framenr != ED_space_clip_clip_framenr(sc)) strcpy(state, "estimated"); else if (marker->flag & MARKER_TRACKED) strcpy(state, "tracked"); @@ -932,8 +955,8 @@ static void view2d_to_region_float(View2D *v2d, float x, float y, float *regionx y = -v2d->cur.ymin / (v2d->cur.ymax - v2d->cur.ymin); /* convert proportional distances to screen coordinates */ - *regionx = v2d->mask.xmin + x*(v2d->mask.xmax - v2d->mask.xmin); - *regiony = v2d->mask.ymin + y*(v2d->mask.ymax - v2d->mask.ymin); + *regionx = v2d->mask.xmin + x * (v2d->mask.xmax - v2d->mask.xmin); + *regiony = v2d->mask.ymin + y * (v2d->mask.ymax - v2d->mask.ymin); } static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, @@ -941,10 +964,10 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, { float x, y; MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track, *act_track; MovieTrackingMarker *marker; - int framenr = sc->user.framenr; + int framenr = ED_space_clip_clip_framenr(sc); int undistort = sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT; float *marker_pos = NULL, *fp, *active_pos = NULL, cur_pos[2]; @@ -965,7 +988,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, glMultMatrixf(sc->stabmat); glScalef(width, height, 0); - act_track = BKE_tracking_active_track(tracking); + act_track = BKE_tracking_track_get_active(tracking); if (sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT) { int count = 0; @@ -974,7 +997,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, track = tracksbase->first; while (track) { if ((track->flag & TRACK_HIDDEN) == 0) { - marker = BKE_tracking_get_marker(track, framenr); + marker = BKE_tracking_marker_get(track, framenr); if (MARKER_VISIBLE(sc, track, marker)) count++; @@ -985,13 +1008,13 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, /* undistort */ if (count) { - marker_pos = MEM_callocN(2*sizeof(float)*count, "draw_tracking_tracks marker_pos"); + marker_pos = MEM_callocN(2 * sizeof(float) * count, "draw_tracking_tracks marker_pos"); track = tracksbase->first; fp = marker_pos; while (track) { if ((track->flag & TRACK_HIDDEN) == 0) { - marker = BKE_tracking_get_marker(track, framenr); + marker = BKE_tracking_marker_get(track, framenr); if (MARKER_VISIBLE(sc, track, marker)) { ED_clip_point_undistorted_pos(sc, marker->pos, fp); @@ -1023,7 +1046,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, fp = marker_pos; while (track) { if ((track->flag & TRACK_HIDDEN) == 0) { - marker = BKE_tracking_get_marker(track, framenr); + marker = BKE_tracking_marker_get(track, framenr); if (MARKER_VISIBLE(sc, track, marker)) { copy_v2_v2(cur_pos, fp ? fp : marker->pos); @@ -1048,7 +1071,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, while (track) { if ((track->flag & TRACK_HIDDEN) == 0) { int act = track == act_track; - marker = BKE_tracking_get_marker(track, framenr); + marker = BKE_tracking_marker_get(track, framenr); if (MARKER_VISIBLE(sc, track, marker)) { if (!act) { @@ -1069,7 +1092,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, /* active marker would be displayed on top of everything else */ if (act_track) { if ((act_track->flag & TRACK_HIDDEN) == 0) { - marker = BKE_tracking_get_marker(act_track, framenr); + marker = BKE_tracking_marker_get(act_track, framenr); if (MARKER_VISIBLE(sc, act_track, marker)) { copy_v2_v2(cur_pos, active_pos ? active_pos : marker->pos); @@ -1081,19 +1104,19 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, } if (sc->flag & SC_SHOW_BUNDLES) { - MovieTrackingObject *object = BKE_tracking_active_object(tracking); + MovieTrackingObject *object = BKE_tracking_object_get_active(tracking); float pos[4], vec[4], mat[4][4], aspy; glEnable(GL_POINT_SMOOTH); glPointSize(3.0f); aspy = 1.0f / clip->tracking.camera.pixel_aspect; - BKE_tracking_projection_matrix(tracking, object, framenr, width, height, mat); + BKE_tracking_get_projection_matrix(tracking, object, framenr, width, height, mat); track = tracksbase->first; while (track) { if ((track->flag & TRACK_HIDDEN) == 0 && track->flag & TRACK_HAS_BUNDLE) { - marker = BKE_tracking_get_marker(track, framenr); + marker = BKE_tracking_marker_get(track, framenr); if (MARKER_VISIBLE(sc, track, marker)) { float npos[2]; @@ -1105,7 +1128,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, pos[0] = (pos[0] / (pos[3] * 2.0f) + 0.5f) * width; pos[1] = (pos[1] / (pos[3] * 2.0f) + 0.5f) * height * aspy; - BKE_tracking_apply_intrinsics(tracking, pos, npos); + BKE_tracking_distort_v2(tracking, pos, npos); if (npos[0] >= 0.0f && npos[1] >= 0.0f && npos[0] <= width && npos[1] <= height * aspy) { vec[0] = (marker->pos[0] + track->offset[0]) * width; @@ -1119,10 +1142,10 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, glColor3f(1.0f, 0.0f, 0.0f); glBegin(GL_POINTS); - if (undistort) - glVertex3f(pos[0] / width, pos[1] / (height * aspy), 0); - else - glVertex3f(npos[0] / width, npos[1] / (height * aspy), 0); + if (undistort) + glVertex3f(pos[0] / width, pos[1] / (height * aspy), 0); + else + glVertex3f(npos[0] / width, npos[1] / (height * aspy), 0); glEnd(); } } @@ -1143,7 +1166,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, fp = marker_pos; while (track) { if ((track->flag & TRACK_HIDDEN) == 0) { - marker = BKE_tracking_get_marker(track, framenr); + marker = BKE_tracking_marker_get(track, framenr); if (MARKER_VISIBLE(sc, track, marker)) { int act = track == act_track; @@ -1175,8 +1198,10 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, int i, j, a; float pos[2], tpos[2], grid[11][11][2]; MovieTracking *tracking = &clip->tracking; + bGPdata *gpd = NULL; float aspy = 1.0f / tracking->camera.pixel_aspect; float dx = (float)width / n, dy = (float)height / n * aspy; + float offsx = 0.0f, offsy = 0.0f; if (sc->mode != SC_MODE_DISTORTION) return; @@ -1211,7 +1236,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, for (i = 0; i <= n; i++) { for (j = 0; j <= n; j++) { if (i == 0 || j == 0 || i == n || j == n) { - BKE_tracking_apply_intrinsics(tracking, pos, tpos); + BKE_tracking_distort_v2(tracking, pos, tpos); for (a = 0; a < 4; a++) { int ok; @@ -1242,7 +1267,7 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, pos[0] = idx[a][0] * dx; pos[1] = idx[a][1] * dy; - BKE_tracking_invert_intrinsics(tracking, pos, tpos); + BKE_tracking_undistort_v2(tracking, pos, tpos); DO_MINMAX2(tpos, min, max); } @@ -1253,10 +1278,10 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, for (i = 0; i <= n; i++) { for (j = 0; j <= n; j++) { - BKE_tracking_apply_intrinsics(tracking, pos, grid[i][j]); + BKE_tracking_distort_v2(tracking, pos, grid[i][j]); grid[i][j][0] /= width; - grid[i][j][1] /= height*aspy; + grid[i][j][1] /= height * aspy; pos[0] += dx; } @@ -1269,23 +1294,41 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, for (i = 0; i <= n; i++) { glBegin(GL_LINE_STRIP); - for (j = 0; j <= n; j++) { - glVertex2fv(grid[i][j]); - } + for (j = 0; j <= n; j++) { + glVertex2fv(grid[i][j]); + } glEnd(); } for (j = 0; j <= n; j++) { glBegin(GL_LINE_STRIP); - for (i = 0; i <= n; i++) { - glVertex2fv(grid[i][j]); - } + for (i = 0; i <= n; i++) { + glVertex2fv(grid[i][j]); + } glEnd(); } } - if (sc->flag & SC_MANUAL_CALIBRATION && clip->gpd) { - bGPDlayer *layer = clip->gpd->layers.first; + if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) { + MovieTrackingTrack *track = BKE_tracking_track_get_active(&sc->clip->tracking); + + if (track) { + int framenr = sc->user.framenr; + MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(track, framenr); + + offsx = marker->pos[0]; + offsy = marker->pos[1]; + + gpd = track->gpd; + } + + } + else { + gpd = clip->gpd; + } + + if (sc->flag & SC_MANUAL_CALIBRATION && gpd) { + bGPDlayer *layer = gpd->layers.first; while (layer) { bGPDframe *frame = layer->frames.first; @@ -1306,40 +1349,40 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip, if (stroke->flag & GP_STROKE_2DSPACE) { if (stroke->totpoints > 1) { glBegin(GL_LINE_STRIP); - for (i = 0; i < stroke->totpoints - 1; i++) { - float npos[2], dpos[2], len; - int steps; + for (i = 0; i < stroke->totpoints - 1; i++) { + float npos[2], dpos[2], len; + int steps; - pos[0] = stroke->points[i].x * width; - pos[1] = stroke->points[i].y * height * aspy; + pos[0] = (stroke->points[i].x + offsx) * width; + pos[1] = (stroke->points[i].y + offsy) * height * aspy; - npos[0] = stroke->points[i + 1].x * width; - npos[1] = stroke->points[i + 1].y * height * aspy; + npos[0] = (stroke->points[i + 1].x + offsx) * width; + npos[1] = (stroke->points[i + 1].y + offsy) * height * aspy; - len = len_v2v2(pos, npos); - steps = ceil(len / 5.0f); + len = len_v2v2(pos, npos); + steps = ceil(len / 5.0f); - /* we want to distort only long straight lines */ - if (stroke->totpoints == 2) { - BKE_tracking_invert_intrinsics(tracking, pos, pos); - BKE_tracking_invert_intrinsics(tracking, npos, npos); - } + /* we want to distort only long straight lines */ + if (stroke->totpoints == 2) { + BKE_tracking_undistort_v2(tracking, pos, pos); + BKE_tracking_undistort_v2(tracking, npos, npos); + } - sub_v2_v2v2(dpos, npos, pos); - mul_v2_fl(dpos, 1.0f / steps); + sub_v2_v2v2(dpos, npos, pos); + mul_v2_fl(dpos, 1.0f / steps); - for (j = 0; j <= steps; j++) { - BKE_tracking_apply_intrinsics(tracking, pos, tpos); - glVertex2f(tpos[0] / width, tpos[1] / (height*aspy)); + for (j = 0; j <= steps; j++) { + BKE_tracking_distort_v2(tracking, pos, tpos); + glVertex2f(tpos[0] / width, tpos[1] / (height * aspy)); - add_v2_v2(pos, dpos); - } + add_v2_v2(pos, dpos); } + } glEnd(); } else if (stroke->totpoints == 1) { glBegin(GL_POINTS); - glVertex2f(stroke->points[0].x, stroke->points[0].y); + glVertex2f(stroke->points[0].x + offsx, stroke->points[0].y + offsy); glEnd(); } } @@ -1388,7 +1431,7 @@ void clip_draw_main(SpaceClip *sc, ARegion *ar, Scene *scene) else copy_v2_v2(loc, sc->loc); - BKE_tracking_stabdata_to_mat4(width, height, aspect, loc, sc->scale, sc->angle, sc->stabmat); + BKE_tracking_stabilization_data_to_mat4(width, height, aspect, loc, sc->scale, sc->angle, sc->stabmat); unit_m4(smat); smat[0][0] = 1.0f / width; @@ -1429,7 +1472,6 @@ void clip_draw_grease_pencil(bContext *C, int onlyv2d) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); - ImBuf *ibuf; if (!clip) return; @@ -1438,16 +1480,25 @@ void clip_draw_grease_pencil(bContext *C, int onlyv2d) /* if manual calibration is used then grease pencil data is already * drawed in draw_distortion */ if ((sc->flag & SC_MANUAL_CALIBRATION) == 0 || sc->mode != SC_MODE_DISTORTION) { - ibuf = ED_space_clip_get_buffer(sc); + glPushMatrix(); + glMultMatrixf(sc->unistabmat); - if (ibuf) { - glPushMatrix(); - glMultMatrixf(sc->unistabmat); - draw_gpencil_2dimage(C, ibuf); + if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) { + MovieTrackingTrack *track = BKE_tracking_track_get_active(&sc->clip->tracking); - IMB_freeImBuf(ibuf); - glPopMatrix(); + if (track) { + int framenr = sc->user.framenr; + /* don't get the exact marker since it may not exist for the frame */ + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + if (marker) { + glTranslatef(marker->pos[0], marker->pos[1], 0.0f); + } + } } + + draw_gpencil_2dimage(C); + + glPopMatrix(); } } else { diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c index a477a7435fd..0bad9f86ea1 100644 --- a/source/blender/editors/space_clip/clip_editor.c +++ b/source/blender/editors/space_clip/clip_editor.c @@ -34,10 +34,12 @@ #include "MEM_guardedalloc.h" #include "BKE_main.h" +#include "BKE_mask.h" #include "BKE_movieclip.h" #include "BKE_context.h" #include "BKE_tracking.h" +#include "DNA_mask_types.h" #include "DNA_object_types.h" /* SELECT */ #include "BLI_utildefines.h" @@ -94,33 +96,26 @@ int ED_space_clip_tracking_poll(bContext *C) return FALSE; } -int ED_space_clip_tracking_size_poll(bContext *C) +int ED_space_clip_maskedit_poll(bContext *C) { - if (ED_space_clip_tracking_poll(C)) { - MovieClip *clip = CTX_data_edit_movieclip(C); - - if (clip) { - SpaceClip *sc = CTX_wm_space_clip(C); - int width, height; - - BKE_movieclip_get_size(clip, &sc->user, &width, &height); + SpaceClip *sc = CTX_wm_space_clip(C); - return width > 0 && height > 0; - } + if (sc && sc->clip) { + return ED_space_clip_show_maskedit(sc); } return FALSE; } -int ED_space_clip_tracking_frame_poll(bContext *C) +int ED_space_clip_maskedit_mask_poll(bContext *C) { - if (ED_space_clip_tracking_poll(C)) { + if (ED_space_clip_maskedit_poll(C)) { MovieClip *clip = CTX_data_edit_movieclip(C); if (clip) { SpaceClip *sc = CTX_wm_space_clip(C); - return BKE_movieclip_has_frame(clip, &sc->user); + return sc->mask != NULL; } } @@ -170,6 +165,11 @@ MovieClip *ED_space_clip(SpaceClip *sc) return sc->clip; } +Mask *ED_space_clip_mask(SpaceClip *sc) +{ + return sc->mask; +} + ImBuf *ED_space_clip_get_buffer(SpaceClip *sc) { if (sc->clip) { @@ -214,6 +214,51 @@ void ED_space_clip_size(SpaceClip *sc, int *width, int *height) } } +void ED_space_clip_mask_size(SpaceClip *sc, int *width, int *height) +{ + /* quite the same as ED_space_clip_size, but it also runs aspect correction on output resolution + * this is needed because mask should be rasterized with exactly the same resolution as + * currently displaying frame and it doesn't have access to aspect correction currently + * used for display. (sergey) + */ + + if (!sc->mask) { + *width = 0; + *height = 0; + } else { + float aspx, aspy; + + ED_space_clip_size(sc, width, height); + ED_space_clip_aspect(sc, &aspx, &aspy); + + *width *= aspx; + *height *= aspy; + } +} + +void ED_space_clip_mask_aspect(SpaceClip *sc, float *aspx, float *aspy) +{ + int w, h; + + ED_space_clip_aspect(sc, aspx, aspy); + ED_space_clip_size(sc, &w, &h); + + /* now this is not accounted for! */ +#if 0 + *aspx *= (float)w; + *aspy *= (float)h; +#endif + + if (*aspx < *aspy) { + *aspy = *aspy / *aspx; + *aspx = 1.0f; + } + else { + *aspx = *aspx / *aspy; + *aspy = 1.0f; + } +} + void ED_space_clip_zoom(SpaceClip *sc, ARegion *ar, float *zoomx, float *zoomy) { int width, height; @@ -234,6 +279,33 @@ void ED_space_clip_aspect(SpaceClip *sc, float *aspx, float *aspy) *aspx = *aspy = 1.0f; } +void ED_space_clip_aspect_dimension_aware(SpaceClip *sc, float *aspx, float *aspy) +{ + int w, h; + + /* most of tools does not require aspect to be returned with dimensions correction + * due to they're invariant to this stuff, but some transformation tools like rotation + * should be aware of aspect correction caused by different resolution in different + * directions. + * mainly this is sued for transformation stuff + */ + + ED_space_clip_aspect(sc, aspx, aspy); + ED_space_clip_size(sc, &w, &h); + + *aspx *= (float)w; + *aspy *= (float)h; + + if (*aspx < *aspy) { + *aspy = *aspy / *aspx; + *aspx = 1.0f; + } + else { + *aspx = *aspx / *aspy; + *aspy = 1.0f; + } +} + void ED_clip_update_frame(const Main *mainp, int cfra) { wmWindowManager *wm; @@ -257,12 +329,20 @@ void ED_clip_update_frame(const Main *mainp, int cfra) } } +/* return current frame number in clip space */ +int ED_space_clip_clip_framenr(SpaceClip *sc) +{ + MovieClip *clip = ED_space_clip(sc); + + return BKE_movieclip_remap_scene_to_clip_frame(clip, sc->user.framenr); +} + static int selected_boundbox(SpaceClip *sc, float min[2], float max[2]) { MovieClip *clip = ED_space_clip(sc); MovieTrackingTrack *track; int width, height, ok = FALSE; - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); INIT_MINMAX2(min, max); @@ -271,7 +351,7 @@ static int selected_boundbox(SpaceClip *sc, float min[2], float max[2]) track = tracksbase->first; while (track) { if (TRACK_VIEW_SELECTED(sc, track)) { - MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr); + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, sc->user.framenr); if (marker) { float pos[3]; @@ -345,9 +425,9 @@ int ED_clip_view_selection(SpaceClip *sc, ARegion *ar, int fit) return TRUE; } -void ED_clip_point_undistorted_pos(SpaceClip *sc, float co[2], float nco[2]) +void ED_clip_point_undistorted_pos(SpaceClip *sc, const float co[2], float r_co[2]) { - copy_v2_v2(nco, co); + copy_v2_v2(r_co, co); if (sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT) { MovieClip *clip = ED_space_clip(sc); @@ -356,13 +436,13 @@ void ED_clip_point_undistorted_pos(SpaceClip *sc, float co[2], float nco[2]) ED_space_clip_size(sc, &width, &height); - nco[0] *= width; - nco[1] *= height * aspy; + r_co[0] *= width; + r_co[1] *= height * aspy; - BKE_tracking_invert_intrinsics(&clip->tracking, nco, nco); + BKE_tracking_undistort_v2(&clip->tracking, r_co, r_co); - nco[0] /= width; - nco[1] /= height * aspy; + r_co[0] /= width; + r_co[1] /= height * aspy; } } @@ -371,7 +451,7 @@ void ED_clip_point_stable_pos(bContext *C, float x, float y, float *xr, float *y ARegion *ar = CTX_wm_region(C); SpaceClip *sc = CTX_wm_space_clip(C); int sx, sy, width, height; - float zoomx, zoomy, pos[3] = {0.0f, 0.0f, 0.0f}, imat[4][4]; + float zoomx, zoomy, pos[3], imat[4][4]; ED_space_clip_zoom(sc, ar, &zoomx, &zoomy); ED_space_clip_size(sc, &width, &height); @@ -380,6 +460,7 @@ void ED_clip_point_stable_pos(bContext *C, float x, float y, float *xr, float *y pos[0] = (x - sx) / zoomx; pos[1] = (y - sy) / zoomy; + pos[2] = 0.0f; invert_m4_m4(imat, sc->stabmat); mul_v3_m4v3(pos, imat, pos); @@ -393,7 +474,7 @@ void ED_clip_point_stable_pos(bContext *C, float x, float y, float *xr, float *y float aspy = 1.0f / tracking->camera.pixel_aspect; float tmp[2] = {*xr * width, *yr * height * aspy}; - BKE_tracking_apply_intrinsics(tracking, tmp, tmp); + BKE_tracking_distort_v2(tracking, tmp, tmp); *xr = tmp[0] / width; *yr = tmp[1] / (height * aspy); @@ -404,7 +485,7 @@ void ED_clip_point_stable_pos(bContext *C, float x, float y, float *xr, float *y * \brief the reverse of ED_clip_point_stable_pos(), gets the marker region coords. * better name here? view_to_track / track_to_view or so? */ -void ED_clip_point_stable_pos__reverse(SpaceClip *sc, ARegion *ar, float co[2], float nco[2]) +void ED_clip_point_stable_pos__reverse(SpaceClip *sc, ARegion *ar, const float co[2], float r_co[2]) { float zoomx, zoomy; float pos[3]; @@ -416,12 +497,13 @@ void ED_clip_point_stable_pos__reverse(SpaceClip *sc, ARegion *ar, float co[2], ED_space_clip_zoom(sc, ar, &zoomx, &zoomy); ED_clip_point_undistorted_pos(sc, co, pos); + pos[2] = 0.0f; /* untested */ mul_v3_m4v3(pos, sc->stabmat, pos); - nco[0] = (pos[0] * width * zoomx) + (float)sx; - nco[1] = (pos[1] * height * zoomy) + (float)sy; + r_co[0] = (pos[0] * width * zoomx) + (float)sx; + r_co[1] = (pos[1] * height * zoomy) + (float)sy; } void ED_clip_mouse_pos(bContext *C, wmEvent *event, float co[2]) @@ -439,7 +521,10 @@ typedef struct SpaceClipDrawContext { struct ImBuf *texture_ibuf; /* image buffer for which texture was created */ int image_width, image_height; /* image width and height for which texture was created */ unsigned last_texture; /* ID of previously used texture, so it'll be restored after clip drawing */ - int framenr; + + /* fields to check if cache is still valid */ + int framenr, start_frame, frame_offset; + short render_size, render_flag; } SpaceClipDrawContext; int ED_space_clip_texture_buffer_supported(SpaceClip *sc) @@ -477,6 +562,10 @@ int ED_space_clip_load_movieclip_buffer(SpaceClip *sc, ImBuf *ibuf) * so not changed image buffer pointer means unchanged image content */ need_rebind |= context->texture_ibuf != ibuf; need_rebind |= context->framenr != sc->user.framenr; + need_rebind |= context->render_size != sc->user.render_size; + need_rebind |= context->render_flag != sc->user.render_flag; + need_rebind |= context->start_frame != clip->start_frame; + need_rebind |= context->frame_offset != clip->frame_offset; if (need_rebind) { int width = ibuf->x, height = ibuf->y; @@ -531,6 +620,10 @@ int ED_space_clip_load_movieclip_buffer(SpaceClip *sc, ImBuf *ibuf) context->image_width = ibuf->x; context->image_height = ibuf->y; context->framenr = sc->user.framenr; + context->render_size = sc->user.render_size; + context->render_flag = sc->user.render_flag; + context->start_frame = clip->start_frame; + context->frame_offset = clip->frame_offset; } else { /* displaying exactly the same image which was loaded t oa texture, @@ -562,6 +655,8 @@ void ED_space_clip_free_texture_buffer(SpaceClip *sc) } } +/* ******** masking editing related functions ******** */ + int ED_space_clip_show_trackedit(SpaceClip *sc) { if (sc) { @@ -570,3 +665,25 @@ int ED_space_clip_show_trackedit(SpaceClip *sc) return FALSE; } + +int ED_space_clip_show_maskedit(SpaceClip *sc) +{ + if (sc) { + return sc->mode == SC_MODE_MASKEDIT; + } + + return FALSE; +} + +void ED_space_clip_set_mask(bContext *C, SpaceClip *sc, Mask *mask) +{ + sc->mask = mask; + + if (sc->mask && sc->mask->id.us == 0) { + sc->clip->id.us = 1; + } + + if (C) { + WM_event_add_notifier(C, NC_MASK | NA_SELECTED, mask); + } +} diff --git a/source/blender/editors/space_clip/clip_graph_draw.c b/source/blender/editors/space_clip/clip_graph_draw.c index 853a7d7cad1..323594ea469 100644 --- a/source/blender/editors/space_clip/clip_graph_draw.c +++ b/source/blender/editors/space_clip/clip_graph_draw.c @@ -31,7 +31,7 @@ #include "DNA_movieclip_types.h" #include "DNA_scene_types.h" -#include "DNA_object_types.h" /* SELECT */ +#include "DNA_object_types.h" /* SELECT */ #include "MEM_guardedalloc.h" @@ -57,7 +57,7 @@ #include "BLF_api.h" -#include "clip_intern.h" // own include +#include "clip_intern.h" // own include static void draw_curve_knot(float x, float y, float xscale, float yscale, float hsize) { @@ -88,9 +88,10 @@ static void draw_curve_knot(float x, float y, float xscale, float yscale, float } static void tracking_segment_point_cb(void *UNUSED(userdata), MovieTrackingTrack *UNUSED(track), - MovieTrackingMarker *marker, int UNUSED(coord), float val) + MovieTrackingMarker *UNUSED(marker), int UNUSED(coord), + int scene_framenr, float val) { - glVertex2f(marker->framenr, val); + glVertex2f(scene_framenr, val); } void tracking_segment_start_cb(void *userdata, MovieTrackingTrack *track, int coord) @@ -123,7 +124,7 @@ void tracking_segment_end_cb(void *UNUSED(userdata)) } static void tracking_segment_knot_cb(void *userdata, MovieTrackingTrack *track, - MovieTrackingMarker *marker, int coord, float val) + MovieTrackingMarker *marker, int coord, int scene_framenr, float val) { struct { MovieTrackingTrack *act_track; int sel; float xscale, yscale, hsize; } *data = userdata; int sel = 0, sel_flag; @@ -140,7 +141,7 @@ static void tracking_segment_knot_cb(void *userdata, MovieTrackingTrack *track, else UI_ThemeColor(TH_HANDLE_VERTEX); - draw_curve_knot(marker->framenr, val, data->xscale, data->yscale, data->hsize); + draw_curve_knot(scene_framenr, val, data->xscale, data->yscale, data->hsize); } } @@ -148,7 +149,7 @@ static void draw_tracks_curves(View2D *v2d, SpaceClip *sc) { MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); int width, height; struct { MovieTrackingTrack *act_track; int sel; float xscale, yscale, hsize; } userdata; @@ -162,30 +163,34 @@ static void draw_tracks_curves(View2D *v2d, SpaceClip *sc) userdata.sel = FALSE; userdata.act_track = act_track; UI_view2d_getscale(v2d, &userdata.xscale, &userdata.yscale); - clip_graph_tracking_values_iterate(sc, &userdata, tracking_segment_knot_cb, NULL, NULL); + clip_graph_tracking_values_iterate(sc, sc->flag & SC_SHOW_GRAPH_SEL_ONLY, sc->flag & SC_SHOW_GRAPH_HIDDEN, + &userdata, tracking_segment_knot_cb, NULL, NULL); /* draw graph lines */ glEnable(GL_BLEND); - clip_graph_tracking_values_iterate(sc, act_track, tracking_segment_point_cb, - tracking_segment_start_cb, tracking_segment_end_cb); + clip_graph_tracking_values_iterate(sc, sc->flag & SC_SHOW_GRAPH_SEL_ONLY, sc->flag & SC_SHOW_GRAPH_HIDDEN, + act_track, tracking_segment_point_cb, tracking_segment_start_cb, + tracking_segment_end_cb); glDisable(GL_BLEND); /* selected knot handles on top of curves */ userdata.sel = TRUE; - clip_graph_tracking_values_iterate(sc, &userdata, tracking_segment_knot_cb, NULL, NULL); + clip_graph_tracking_values_iterate(sc, sc->flag & SC_SHOW_GRAPH_SEL_ONLY, sc->flag & SC_SHOW_GRAPH_HIDDEN, + &userdata, tracking_segment_knot_cb, NULL, NULL); } static void draw_frame_curves(SpaceClip *sc) { MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingReconstruction *reconstruction = BKE_tracking_get_reconstruction(tracking); + MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(tracking); int i, lines = 0, prevfra = 0; glColor3f(0.0f, 0.0f, 1.0f); for (i = 0; i < reconstruction->camnr; i++) { MovieReconstructedCamera *camera = &reconstruction->cameras[i]; + int framenr; if (lines && camera->framenr != prevfra + 1) { glEnd(); @@ -197,7 +202,8 @@ static void draw_frame_curves(SpaceClip *sc) lines = 1; } - glVertex2f(camera->framenr, camera->error); + framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, camera->framenr); + glVertex2f(framenr, camera->error); prevfra = camera->framenr; } diff --git a/source/blender/editors/space_clip/clip_graph_ops.c b/source/blender/editors/space_clip/clip_graph_ops.c index 10692ada5d9..b7687eba717 100644 --- a/source/blender/editors/space_clip/clip_graph_ops.c +++ b/source/blender/editors/space_clip/clip_graph_ops.c @@ -29,7 +29,7 @@ * \ingroup spclip */ -#include "DNA_object_types.h" /* SELECT */ +#include "DNA_object_types.h" /* SELECT */ #include "DNA_scene_types.h" #include "MEM_guardedalloc.h" @@ -57,7 +57,7 @@ #include "UI_view2d.h" -#include "clip_intern.h" // own include +#include "clip_intern.h" // own include /******************** common graph-editing utilities ********************/ @@ -96,23 +96,24 @@ static void toggle_selection_cb(void *userdata, MovieTrackingMarker *marker) /******************** mouse select operator ********************/ typedef struct { - int coord, /* coordinate index of found entuty (0 = X-axis, 1 = Y-axis) */ - has_prev; /* if there's valid coordinate of previous point of curve segment */ + int coord, /* coordinate index of found entuty (0 = X-axis, 1 = Y-axis) */ + has_prev; /* if there's valid coordinate of previous point of curve segment */ - float min_dist, /* minimal distance between mouse and currently found entuty */ - mouse_co[2], /* mouse coordinate */ - prev_co[2], /* coordinate of previeous point of segment */ - min_co[2]; /* coordinate of entity with minimal distance */ + float min_dist, /* minimal distance between mouse and currently found entuty */ + mouse_co[2], /* mouse coordinate */ + prev_co[2], /* coordinate of previeous point of segment */ + min_co[2]; /* coordinate of entity with minimal distance */ - MovieTrackingTrack *track; /* nearest found track */ - MovieTrackingMarker *marker; /* nearest found marker */ + MovieTrackingTrack *track; /* nearest found track */ + MovieTrackingMarker *marker; /* nearest found marker */ } MouseSelectUserData; static void find_nearest_tracking_segment_cb(void *userdata, MovieTrackingTrack *track, - MovieTrackingMarker *marker, int coord, float val) + MovieTrackingMarker *UNUSED(marker), + int coord, int scene_framenr, float val) { MouseSelectUserData *data = userdata; - float co[2] = {marker->framenr, val}; + float co[2] = {scene_framenr, val}; if (data->has_prev) { float d = dist_to_line_segment_v2(data->mouse_co, data->prev_co, co); @@ -137,14 +138,14 @@ void find_nearest_tracking_segment_end_cb(void *userdata) } static void find_nearest_tracking_knot_cb(void *userdata, MovieTrackingTrack *track, - MovieTrackingMarker *marker, int coord, float val) + MovieTrackingMarker *marker, int coord, int scene_framenr, float val) { MouseSelectUserData *data = userdata; - float dx = marker->framenr - data->mouse_co[0], dy = val - data->mouse_co[1]; + float dx = scene_framenr - data->mouse_co[0], dy = val - data->mouse_co[1]; float d = dx * dx + dy * dy; if (data->marker == NULL || d < data->min_dist) { - float co[2] = {marker->framenr, val}; + float co[2] = {scene_framenr, val}; data->track = track; data->marker = marker; @@ -169,7 +170,7 @@ static int mouse_select_knot(bContext *C, float co[2], int extend) ARegion *ar = CTX_wm_region(C); View2D *v2d = &ar->v2d; MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); static const int delta = 6; if (act_track) { @@ -189,7 +190,9 @@ static int mouse_select_knot(bContext *C, float co[2], int extend) if (!extend) { SelectUserData selectdata = {SEL_DESELECT}; - clip_graph_tracking_iterate(sc, &selectdata, toggle_selection_cb); + clip_graph_tracking_iterate(sc, sc->flag & SC_SHOW_GRAPH_SEL_ONLY, + sc->flag & SC_SHOW_GRAPH_HIDDEN, &selectdata, + toggle_selection_cb); } if (userdata.coord == 0) @@ -210,11 +213,12 @@ static int mouse_select_curve(bContext *C, float co[2], int extend) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); MouseSelectUserData userdata; mouse_select_init_data(&userdata, co); - clip_graph_tracking_values_iterate(sc, &userdata, find_nearest_tracking_segment_cb, + clip_graph_tracking_values_iterate(sc, sc->flag & SC_SHOW_GRAPH_SEL_ONLY, sc->flag & SC_SHOW_GRAPH_HIDDEN, + &userdata, find_nearest_tracking_segment_cb, NULL, find_nearest_tracking_segment_end_cb); if (userdata.track) { @@ -226,11 +230,16 @@ static int mouse_select_curve(bContext *C, float co[2], int extend) } else if (act_track != userdata.track) { SelectUserData selectdata = {SEL_DESELECT}; + MovieTrackingObject *object = BKE_tracking_object_get_active(tracking); + ListBase *tracksbase = BKE_tracking_object_get_tracks(tracking, object); tracking->act_track = userdata.track; + BKE_tracking_track_select(tracksbase, userdata.track, TRACK_AREA_ALL, TRUE); /* deselect all knots on newly selected curve */ - clip_graph_tracking_iterate(sc, &selectdata, toggle_selection_cb); + clip_graph_tracking_iterate(sc, sc->flag & SC_SHOW_GRAPH_SEL_ONLY, + sc->flag & SC_SHOW_GRAPH_HIDDEN, &selectdata, + toggle_selection_cb); } return TRUE; @@ -260,7 +269,7 @@ static int mouse_select(bContext *C, float co[2], int extend) static int select_exec(bContext *C, wmOperator *op) { float co[2]; - int extend = RNA_boolean_get(op->ptr, "extend"); + int extend = RNA_boolean_get(op->ptr, "extend"); RNA_float_get_array(op->ptr, "location", co); @@ -295,9 +304,9 @@ void CLIP_OT_graph_select(wmOperatorType *ot) /* properties */ RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MAX, FLT_MAX, - "Location", "Mouse location to select nearest entity", -100.0f, 100.0f); + "Location", "Mouse location to select nearest entity", -100.0f, 100.0f); RNA_def_boolean(ot->srna, "extend", 0, - "Extend", "Extend selection rather than clearing the existing selection"); + "Extend", "Extend selection rather than clearing the existing selection"); } /********************** border select operator *********************/ @@ -308,11 +317,11 @@ typedef struct BorderSelectuserData { } BorderSelectuserData; static void border_select_cb(void *userdata, MovieTrackingTrack *UNUSED(track), - MovieTrackingMarker *marker, int coord, float val) + MovieTrackingMarker *marker, int coord, int scene_framenr, float val) { BorderSelectuserData *data = (BorderSelectuserData *) userdata; - if (BLI_in_rctf(&data->rect, marker->framenr, val)) { + if (BLI_in_rctf(&data->rect, scene_framenr, val)) { int flag = 0; if (coord == 0) @@ -338,7 +347,7 @@ static int border_select_graph_exec(bContext *C, wmOperator *op) ARegion *ar = CTX_wm_region(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); BorderSelectuserData userdata; rcti rect; @@ -393,7 +402,7 @@ static int graph_select_all_markers_exec(bContext *C, wmOperator *op) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); MovieTrackingMarker *marker; int action = RNA_enum_get(op->ptr, "action"); int a; @@ -459,8 +468,8 @@ static int delete_curve_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); if (act_track) clip_delete_track(C, clip, tracksbase, act_track); @@ -491,8 +500,8 @@ static int delete_knot_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); if (act_track) { int a = 0; @@ -532,7 +541,7 @@ typedef struct { } ViewAllUserData; static void view_all_cb(void *userdata, MovieTrackingTrack *UNUSED(track), MovieTrackingMarker *UNUSED(marker), - int UNUSED(coord), float val) + int UNUSED(coord), int UNUSED(scene_framenr), float val) { ViewAllUserData *data = (ViewAllUserData *) userdata; @@ -555,7 +564,9 @@ static int view_all_exec(bContext *C, wmOperator *UNUSED(op)) userdata.max = -FLT_MAX; userdata.min = FLT_MAX; - clip_graph_tracking_values_iterate(sc, &userdata, view_all_cb, NULL, NULL); + clip_graph_tracking_values_iterate(sc, sc->flag & SC_SHOW_GRAPH_SEL_ONLY, + sc->flag & SC_SHOW_GRAPH_HIDDEN, &userdata, + view_all_cb, NULL, NULL); /* set extents of view to start/end frames */ v2d->cur.xmin = (float) SFRA; @@ -639,7 +650,7 @@ static int graph_disable_markers_exec(bContext *C, wmOperator *op) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); MovieTrackingMarker *marker; int action = RNA_enum_get(op->ptr, "action"); int a; @@ -670,10 +681,10 @@ static int graph_disable_markers_exec(bContext *C, wmOperator *op) void CLIP_OT_graph_disable_markers(wmOperatorType *ot) { static EnumPropertyItem actions_items[] = { - {0, "DISABLE", 0, "Disable", "Disable selected markers"}, - {1, "ENABLE", 0, "Enable", "Enable selected markers"}, - {2, "TOGGLE", 0, "Toggle", "Toggle disabled flag for selected markers"}, - {0, NULL, 0, NULL, NULL} + {0, "DISABLE", 0, "Disable", "Disable selected markers"}, + {1, "ENABLE", 0, "Enable", "Enable selected markers"}, + {2, "TOGGLE", 0, "Toggle", "Toggle disabled flag for selected markers"}, + {0, NULL, 0, NULL, NULL} }; /* identifiers */ diff --git a/source/blender/editors/space_clip/clip_intern.h b/source/blender/editors/space_clip/clip_intern.h index 00105fb8561..5bc195a1ae2 100644 --- a/source/blender/editors/space_clip/clip_intern.h +++ b/source/blender/editors/space_clip/clip_intern.h @@ -43,18 +43,18 @@ struct SpaceClip; struct wmOperatorType; /* channel heights */ -#define CHANNEL_FIRST -UI_UNIT_Y -#define CHANNEL_HEIGHT UI_UNIT_Y -#define CHANNEL_HEIGHT_HALF (UI_UNIT_Y / 2.0f) -#define CHANNEL_SKIP 2 -#define CHANNEL_STEP (CHANNEL_HEIGHT + CHANNEL_SKIP) +#define CHANNEL_FIRST -UI_UNIT_Y +#define CHANNEL_HEIGHT UI_UNIT_Y +#define CHANNEL_HEIGHT_HALF (UI_UNIT_Y / 2.0f) +#define CHANNEL_SKIP 2 +#define CHANNEL_STEP (CHANNEL_HEIGHT + CHANNEL_SKIP) -#define CHANNEL_PAD 4 +#define CHANNEL_PAD 4 /* extra padding for lengths (to go under scrollers) */ -#define EXTRA_SCROLL_PAD 100.0f +#define EXTRA_SCROLL_PAD 100.0f -#define STRIP_HEIGHT_HALF 5 +#define STRIP_HEIGHT_HALF 5 /* internal exports only */ @@ -110,17 +110,17 @@ void ED_clip_tool_props_register(struct ARegionType *art); /* clip_utils.c */ void clip_graph_tracking_values_iterate_track(struct SpaceClip *sc, struct MovieTrackingTrack *track, void *userdata, - void (*func) (void *userdata, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker, int coord, float val), - void (*segment_start) (void *userdata, struct MovieTrackingTrack *track, int coord), - void (*segment_end) (void *userdata)); + void (*func)(void *userdata, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker, int coord, int scene_framenr, float val), + void (*segment_start)(void *userdata, struct MovieTrackingTrack *track, int coord), + void (*segment_end)(void *userdata)); -void clip_graph_tracking_values_iterate(struct SpaceClip *sc, void *userdata, - void (*func) (void *userdata, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker, int coord, float val), - void (*segment_start) (void *userdata, struct MovieTrackingTrack *track, int coord), - void (*segment_end) (void *userdata)); +void clip_graph_tracking_values_iterate(struct SpaceClip *sc, int selected_only, int include_hidden, void *userdata, + void (*func)(void *userdata, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker, int coord, int scene_framenr, float val), + void (*segment_start)(void *userdata, struct MovieTrackingTrack *track, int coord), + void (*segment_end)(void *userdata)); -void clip_graph_tracking_iterate(struct SpaceClip *sc, void *userdata, - void (*func) (void *userdata, struct MovieTrackingMarker *marker)); +void clip_graph_tracking_iterate(struct SpaceClip *sc, int selected_only, int include_hidden, void *userdata, + void (*func)(void *userdata, struct MovieTrackingMarker *marker)); void clip_delete_track(struct bContext *C, struct MovieClip *clip, struct ListBase *tracksbase, struct MovieTrackingTrack *track); void clip_delete_marker(struct bContext *C, struct MovieClip *clip, struct ListBase *tracksbase, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker); @@ -131,12 +131,8 @@ void clip_draw_cfra(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scen void clip_draw_sfra_efra(struct View2D *v2d, struct Scene *scene); /* tracking_ops.c */ -void CLIP_OT_select(struct wmOperatorType *ot); -void CLIP_OT_select_all(struct wmOperatorType *ot); -void CLIP_OT_select_border(struct wmOperatorType *ot); -void CLIP_OT_select_lasso(struct wmOperatorType *ot); -void CLIP_OT_select_circle(struct wmOperatorType *ot); -void CLIP_OT_select_grouped(struct wmOperatorType *ot); +struct MovieTrackingTrack *tracking_marker_check_slide(struct bContext *C, struct wmEvent *event, + int *area_r, int *action_r, int *corner_r); void CLIP_OT_add_marker(struct wmOperatorType *ot); void CLIP_OT_delete_track(struct wmOperatorType *ot); @@ -182,4 +178,12 @@ void CLIP_OT_tracking_object_remove(struct wmOperatorType *ot); void CLIP_OT_copy_tracks(struct wmOperatorType *ot); void CLIP_OT_paste_tracks(struct wmOperatorType *ot); +/* tracking_select.c */ +void CLIP_OT_select(struct wmOperatorType *ot); +void CLIP_OT_select_all(struct wmOperatorType *ot); +void CLIP_OT_select_border(struct wmOperatorType *ot); +void CLIP_OT_select_lasso(struct wmOperatorType *ot); +void CLIP_OT_select_circle(struct wmOperatorType *ot); +void CLIP_OT_select_grouped(struct wmOperatorType *ot); + #endif /* __CLIP_INTERN_H__ */ diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c index 73eb8ee77ff..d5ec65e68c7 100644 --- a/source/blender/editors/space_clip/clip_ops.c +++ b/source/blender/editors/space_clip/clip_ops.c @@ -986,7 +986,7 @@ static void proxy_startjob(void *pjv, short *stop, short *do_update, float *prog } if (build_undistort_count) - distortion = BKE_tracking_distortion_create(); + distortion = BKE_tracking_distortion_new(); for (cfra = sfra; cfra <= efra; cfra++) { if (clip->source != MCLIP_SRC_MOVIE) @@ -1003,7 +1003,7 @@ static void proxy_startjob(void *pjv, short *stop, short *do_update, float *prog } if (distortion) - BKE_tracking_distortion_destroy(distortion); + BKE_tracking_distortion_free(distortion); if (*stop) pj->stop = 1; diff --git a/source/blender/editors/space_clip/clip_utils.c b/source/blender/editors/space_clip/clip_utils.c index 4142c30d825..3f8fd5966ec 100644 --- a/source/blender/editors/space_clip/clip_utils.c +++ b/source/blender/editors/space_clip/clip_utils.c @@ -30,7 +30,7 @@ */ #include "DNA_scene_types.h" -#include "DNA_object_types.h" /* SELECT */ +#include "DNA_object_types.h" /* SELECT */ #include "MEM_guardedalloc.h" @@ -61,12 +61,13 @@ #include "UI_resources.h" #include "UI_view2d.h" -#include "clip_intern.h" // own include +#include "clip_intern.h" // own include void clip_graph_tracking_values_iterate_track(SpaceClip *sc, MovieTrackingTrack *track, void *userdata, - void (*func) (void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker, int coord, float val), - void (*segment_start) (void *userdata, MovieTrackingTrack *track, int coord), - void (*segment_end) (void *userdata)) + void (*func)(void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker, int coord, + int scene_framenr, float val), + void (*segment_start)(void *userdata, MovieTrackingTrack *track, int coord), + void (*segment_end)(void *userdata)) { MovieClip *clip = ED_space_clip(sc); int width, height, coord; @@ -104,8 +105,11 @@ void clip_graph_tracking_values_iterate_track(SpaceClip *sc, MovieTrackingTrack val = (marker->pos[coord] - prevval) * ((coord == 0) ? (width) : (height)); val /= marker->framenr - prevfra; - if (func) - func(userdata, track, marker, coord, val); + if (func) { + int scene_framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, marker->framenr); + + func(userdata, track, marker, coord, scene_framenr, val); + } prevval = marker->pos[coord]; prevfra = marker->framenr; @@ -118,51 +122,54 @@ void clip_graph_tracking_values_iterate_track(SpaceClip *sc, MovieTrackingTrack } } -void clip_graph_tracking_values_iterate(SpaceClip *sc, void *userdata, - void (*func) (void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker, int coord, float val), - void (*segment_start) (void *userdata, MovieTrackingTrack *track, int coord), - void (*segment_end) (void *userdata)) +void clip_graph_tracking_values_iterate(SpaceClip *sc, int selected_only, int include_hidden, void *userdata, + void (*func)(void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker, + int coord, int scene_framenr, float val), + void (*segment_start)(void *userdata, MovieTrackingTrack *track, int coord), + void (*segment_end)(void *userdata)) { MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track; - track = tracksbase->first; - while (track) { - if (TRACK_VIEW_SELECTED(sc, track)) { - clip_graph_tracking_values_iterate_track(sc, track, userdata, func, segment_start, segment_end); - } + for (track = tracksbase->first; track; track = track->next) { + if (!include_hidden && (track->flag & TRACK_HIDDEN) != 0) + continue; - track = track->next; + if (selected_only && !TRACK_SELECTED(track)) + continue; + + clip_graph_tracking_values_iterate_track(sc, track, userdata, func, segment_start, segment_end); } } -void clip_graph_tracking_iterate(SpaceClip *sc, void *userdata, - void (*func) (void *userdata, MovieTrackingMarker *marker)) +void clip_graph_tracking_iterate(SpaceClip *sc, int selected_only, int include_hidden, void *userdata, + void (*func)(void *userdata, MovieTrackingMarker *marker)) { MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track; - track = tracksbase->first; - while (track) { - if (TRACK_VIEW_SELECTED(sc, track)) { - int i; + for (track = tracksbase->first; track; track = track->next) { + int i; - for (i = 0; i < track->markersnr; i++) { - MovieTrackingMarker *marker = &track->markers[i]; + if (!include_hidden && (track->flag & TRACK_HIDDEN) != 0) + continue; - if (marker->flag & MARKER_DISABLED) - continue; + if (selected_only && !TRACK_SELECTED(track)) + continue; - if (func) - func(userdata, marker); - } - } + for (i = 0; i < track->markersnr; i++) { + MovieTrackingMarker *marker = &track->markers[i]; + + if (marker->flag & MARKER_DISABLED) + continue; - track = track->next; + if (func) + func(userdata, marker); + } } } @@ -170,7 +177,7 @@ void clip_delete_track(bContext *C, MovieClip *clip, ListBase *tracksbase, Movie { MovieTracking *tracking = &clip->tracking; MovieTrackingStabilization *stab = &tracking->stabilization; - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); int has_bundle = FALSE, update_stab = FALSE; @@ -187,7 +194,7 @@ void clip_delete_track(bContext *C, MovieClip *clip, ListBase *tracksbase, Movie if (track->flag & TRACK_HAS_BUNDLE) has_bundle = TRUE; - BKE_tracking_free_track(track); + BKE_tracking_track_free(track); BLI_freelinkN(tracksbase, track); WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip); @@ -210,7 +217,7 @@ void clip_delete_marker(bContext *C, MovieClip *clip, ListBase *tracksbase, clip_delete_track(C, clip, tracksbase, track); } else { - BKE_tracking_delete_marker(track, marker->framenr); + BKE_tracking_marker_delete(track, marker->framenr); WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip); } @@ -241,11 +248,11 @@ void clip_draw_cfra(SpaceClip *sc, ARegion *ar, Scene *scene) glLineWidth(2.0); glBegin(GL_LINE_STRIP); - vec[1] = v2d->cur.ymin; - glVertex2fv(vec); + vec[1] = v2d->cur.ymin; + glVertex2fv(vec); - vec[1] = v2d->cur.ymax; - glVertex2fv(vec); + vec[1] = v2d->cur.ymax; + glVertex2fv(vec); glEnd(); glLineWidth(1.0); @@ -269,10 +276,10 @@ void clip_draw_sfra_efra(View2D *v2d, Scene *scene) /* currently clip editor supposes that editing clip length is equal to scene frame range */ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); - glColor4f(0.0f, 0.0f, 0.0f, 0.4f); + glColor4f(0.0f, 0.0f, 0.0f, 0.4f); - glRectf(v2d->cur.xmin, v2d->cur.ymin, (float)SFRA, v2d->cur.ymax); - glRectf((float)EFRA, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax); + glRectf(v2d->cur.xmin, v2d->cur.ymin, (float)SFRA, v2d->cur.ymax); + glRectf((float)EFRA, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax); glDisable(GL_BLEND); UI_ThemeColorShade(TH_BACK, -60); diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c index a6fda200ff4..174b7fcb373 100644 --- a/source/blender/editors/space_clip/space_clip.c +++ b/source/blender/editors/space_clip/space_clip.c @@ -33,7 +33,9 @@ #include <stdio.h> #include "DNA_scene_types.h" +#include "DNA_mask_types.h" #include "DNA_movieclip_types.h" +#include "DNA_view3d_types.h" /* for pivot point */ #include "MEM_guardedalloc.h" @@ -49,6 +51,8 @@ #include "IMB_imbuf_types.h" +#include "ED_mask.h" +#include "ED_space_api.h" #include "ED_screen.h" #include "ED_clip.h" #include "ED_transform.h" @@ -67,7 +71,7 @@ #include "RNA_access.h" -#include "clip_intern.h" // own include +#include "clip_intern.h" /* own include */ static void init_preview_region(const bContext *C, ARegion *ar) { @@ -211,6 +215,15 @@ static void clip_scopes_tag_refresh(ScrArea *sa) sc->scopes.ok = FALSE; } +static void clip_scopes_check_gpencil_change(ScrArea *sa) +{ + SpaceClip *sc = (SpaceClip *)sa->spacedata.first; + + if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) { + clip_scopes_tag_refresh(sa); + } +} + static void clip_stabilization_tag_refresh(ScrArea *sa) { SpaceClip *sc = (SpaceClip *) sa->spacedata.first; @@ -237,6 +250,7 @@ static SpaceLink *clip_new(const bContext *C) sc->zoom = 1.0f; sc->path_length = 20; sc->scopes.track_preview_height = 120; + sc->around = V3D_LOCAL; /* header */ ar = MEM_callocN(sizeof(ARegion), "header for clip"); @@ -294,13 +308,16 @@ static SpaceLink *clip_new(const bContext *C) /* not spacelink itself */ static void clip_free(SpaceLink *sl) { - SpaceClip *sc = (SpaceClip*) sl; + SpaceClip *sc = (SpaceClip *) sl; sc->clip = NULL; if (sc->scopes.track_preview) IMB_freeImBuf(sc->scopes.track_preview); + if (sc->scopes.track_search) + IMB_freeImBuf(sc->scopes.track_search); + ED_space_clip_free_texture_buffer(sc); } @@ -318,6 +335,7 @@ static SpaceLink *clip_duplicate(SpaceLink *sl) SpaceClip *scn = MEM_dupallocN(sl); /* clear or remove stuff from old */ + scn->scopes.track_search = NULL; scn->scopes.track_preview = NULL; scn->scopes.ok = FALSE; scn->draw_context = NULL; @@ -361,6 +379,24 @@ static void clip_listener(ScrArea *sa, wmNotifier *wmn) break; } break; + case NC_MASK: + switch (wmn->data) { + case ND_SELECT: + case ND_DATA: + case ND_DRAW: + ED_area_tag_redraw(sa); + break; + } + switch (wmn->action) { + case NA_SELECTED: + clip_scopes_tag_refresh(sa); + ED_area_tag_redraw(sa); + break; + case NA_EDITED: + ED_area_tag_redraw(sa); + break; + } + break; case NC_GEOM: switch (wmn->data) { case ND_SELECT: @@ -369,9 +405,13 @@ static void clip_listener(ScrArea *sa, wmNotifier *wmn) break; } break; - case NC_SCREEN: - if (wmn->data == ND_ANIMPLAY) { - ED_area_tag_redraw(sa); + case NC_SCREEN: + switch (wmn->data) { + case ND_ANIMPLAY: + case ND_GPENCIL: + clip_scopes_check_gpencil_change(sa); + ED_area_tag_redraw(sa); + break; } break; case NC_SPACE: @@ -532,7 +572,7 @@ static void clip_keymap(struct wmKeyConfig *keyconf) /* ******** Hotkeys avalaible for main region only ******** */ keymap = WM_keymap_find(keyconf, "Clip Editor", SPACE_CLIP, 0); - +// keymap->poll = ED_space_clip_tracking_poll; /* ** View/navigation ** */ WM_keymap_add_item(keymap, "CLIP_OT_view_pan", MIDDLEMOUSE, KM_PRESS, 0, 0); @@ -604,17 +644,17 @@ static void clip_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "CLIP_OT_slide_marker", LEFTMOUSE, KM_PRESS, 0, 0); kmi = WM_keymap_add_item(keymap, "CLIP_OT_disable_markers", DKEY, KM_PRESS, KM_SHIFT, 0); - RNA_enum_set(kmi->ptr, "action", 2); /* toggle */ + RNA_enum_set(kmi->ptr, "action", 2); /* toggle */ /* tracks */ WM_keymap_add_item(keymap, "CLIP_OT_delete_track", DELKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "CLIP_OT_delete_track", XKEY, KM_PRESS, 0, 0); kmi = WM_keymap_add_item(keymap, "CLIP_OT_lock_tracks", LKEY, KM_PRESS, KM_CTRL, 0); - RNA_enum_set(kmi->ptr, "action", 0); /* lock */ + RNA_enum_set(kmi->ptr, "action", 0); /* lock */ kmi = WM_keymap_add_item(keymap, "CLIP_OT_lock_tracks", LKEY, KM_PRESS, KM_ALT, 0); - RNA_enum_set(kmi->ptr, "action", 1); /* unlock */ + RNA_enum_set(kmi->ptr, "action", 1); /* unlock */ kmi = WM_keymap_add_item(keymap, "CLIP_OT_hide_tracks", HKEY, KM_PRESS, 0, 0); RNA_boolean_set(kmi->ptr, "unselected", FALSE); @@ -703,7 +743,7 @@ static void clip_keymap(struct wmKeyConfig *keyconf) /* tracks */ kmi = WM_keymap_add_item(keymap, "CLIP_OT_graph_disable_markers", DKEY, KM_PRESS, KM_SHIFT, 0); - RNA_enum_set(kmi->ptr, "action", 2); /* toggle */ + RNA_enum_set(kmi->ptr, "action", 2); /* toggle */ transform_keymap_for_space(keyconf, keymap, SPACE_CLIP); @@ -712,10 +752,10 @@ static void clip_keymap(struct wmKeyConfig *keyconf) keymap = WM_keymap_find(keyconf, "Clip Dopesheet Editor", SPACE_CLIP, 0); kmi = WM_keymap_add_item(keymap, "CLIP_OT_dopesheet_select_channel", ACTIONMOUSE, KM_PRESS, 0, 0); - RNA_boolean_set(kmi->ptr, "extend", TRUE); /* toggle */ + RNA_boolean_set(kmi->ptr, "extend", TRUE); /* toggle */ } -const char *clip_context_dir[] = {"edit_movieclip", NULL}; +const char *clip_context_dir[] = {"edit_movieclip", "edit_mask", NULL}; static int clip_context(const bContext *C, const char *member, bContextDataResult *result) { @@ -729,7 +769,11 @@ static int clip_context(const bContext *C, const char *member, bContextDataResul else if (CTX_data_equals(member, "edit_movieclip")) { if (sc->clip) CTX_data_id_pointer_set(result, &sc->clip->id); - + return TRUE; + } + else if (CTX_data_equals(member, "edit_mask")) { + if (sc->mask) + CTX_data_id_pointer_set(result, &sc->mask->id); return TRUE; } @@ -1020,6 +1064,9 @@ static void clip_main_area_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy); /* own keymap */ + keymap = WM_keymap_find(wm->defaultconf, "Mask Editing", 0, 0); + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); + keymap = WM_keymap_find(wm->defaultconf, "Clip", SPACE_CLIP, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); @@ -1037,7 +1084,7 @@ static void clip_main_area_draw(const bContext *C, ARegion *ar) /* if tracking is in progress, we should synchronize framenr from clipuser * so latest tracked frame would be shown */ if (clip && clip->tracking_context) - BKE_tracking_sync_user(&sc->user, clip->tracking_context); + BKE_tracking_context_sync_user(clip->tracking_context, &sc->user); if (sc->flag & SC_LOCK_SELECTION) { ImBuf *tmpibuf = NULL; @@ -1064,6 +1111,49 @@ static void clip_main_area_draw(const bContext *C, ARegion *ar) clip_draw_main(sc, ar, scene); + if (sc->mode == SC_MODE_MASKEDIT) { + int x, y; + int width, height; + float zoomx, zoomy, aspx, aspy; + + /* frame image */ + float maxdim; + float xofs, yofs; + + /* find window pixel coordinates of origin */ + UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &x, &y); + + ED_space_clip_size(sc, &width, &height); + ED_space_clip_zoom(sc, ar, &zoomx, &zoomy); + ED_space_clip_aspect(sc, &aspx, &aspy); + + /* frame the image */ + maxdim = maxf(width, height); + if (width == height) { + xofs = yofs = 0; + } + else if (width < height) { + xofs = ((height - width) / -2.0f) * zoomx; + yofs = 0.0f; + } + else { /* (width > height) */ + xofs = 0.0f; + yofs = ((width - height) / -2.0f) * zoomy; + } + + /* apply transformation so mask editing tools will assume drawing from the origin in normalized space */ + glPushMatrix(); + glTranslatef(x + xofs, y + yofs, 0); + glScalef(maxdim * zoomx, maxdim * zoomy, 0); + glMultMatrixf(sc->stabmat); + + ED_mask_draw((bContext *)C, sc->mask_draw_flag, sc->mask_draw_type); + + ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW); + + glPopMatrix(); + } + /* Grease Pencil */ clip_draw_grease_pencil((bContext *)C, 1); @@ -1081,7 +1171,7 @@ static void clip_main_area_listener(ARegion *ar, wmNotifier *wmn) case NC_SCREEN: if (wmn->data == ND_GPENCIL) ED_region_tag_redraw(ar); - break; + break; } } @@ -1125,7 +1215,7 @@ static void graph_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_restore(C); /* scrollers */ - unitx = (sc->flag & SC_SHOW_SECONDS)? V2D_UNIT_SECONDS : V2D_UNIT_FRAMES; + unitx = (sc->flag & SC_SHOW_SECONDS) ? V2D_UNIT_SECONDS : V2D_UNIT_FRAMES; unity = V2D_UNIT_VALUES; scrollers = UI_view2d_scrollers_calc(C, v2d, unitx, V2D_GRID_NOCLAMP, unity, V2D_GRID_NOCLAMP); UI_view2d_scrollers_draw(C, v2d, scrollers); @@ -1143,7 +1233,7 @@ static void dopesheet_area_draw(const bContext *C, ARegion *ar) short unit = 0; if (clip) - BKE_tracking_dopesheet_update(&clip->tracking, sc->dope_sort, sc->dope_flag & SC_DOPE_SORT_INVERSE); + BKE_tracking_dopesheet_update(&clip->tracking); /* clear and setup matrix */ UI_ThemeClearColor(TH_BACK); @@ -1152,7 +1242,7 @@ static void dopesheet_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_ortho(v2d); /* time grid */ - unit = (sc->flag & SC_SHOW_SECONDS)? V2D_UNIT_SECONDS : V2D_UNIT_FRAMES; + unit = (sc->flag & SC_SHOW_SECONDS) ? V2D_UNIT_SECONDS : V2D_UNIT_FRAMES; grid = UI_view2d_grid_calc(CTX_data_scene(C), v2d, unit, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY, ar->winx, ar->winy); UI_view2d_grid_draw(v2d, grid, V2D_GRIDLINES_ALL); @@ -1204,7 +1294,7 @@ static void clip_channels_area_draw(const bContext *C, ARegion *ar) View2DScrollers *scrollers; if (clip) - BKE_tracking_dopesheet_update(&clip->tracking, sc->dope_sort, sc->dope_flag & SC_DOPE_SORT_INVERSE); + BKE_tracking_dopesheet_update(&clip->tracking); /* clear and setup matrix */ UI_ThemeClearColor(TH_BACK); @@ -1241,6 +1331,26 @@ static void clip_header_area_draw(const bContext *C, ARegion *ar) ED_region_header(C, ar); } +static void clip_header_area_listener(ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch (wmn->category) { + case NC_SCENE: + switch (wmn->data) { + /* for proportional editmode only */ + case ND_TOOLSETTINGS: + /* TODO - should do this when in mask mode only but no datas available */ + // if (sc->mode == SC_MODE_MASKEDIT) + { + ED_region_tag_redraw(ar); + } + break; + } + break; + } +} + + /****************** tools region ******************/ /* add handlers, stuff you only do once or on area/region changes */ @@ -1402,6 +1512,7 @@ void ED_spacetype_clip(void) art->init = clip_header_area_init; art->draw = clip_header_area_draw; + art->listener = clip_header_area_listener; BLI_addhead(&st->regiontypes, art); diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index f6dbae596b8..8ca483c94d3 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -35,7 +35,7 @@ #include "DNA_constraint_types.h" #include "DNA_gpencil_types.h" #include "DNA_movieclip_types.h" -#include "DNA_object_types.h" /* SELECT */ +#include "DNA_object_types.h" /* SELECT */ #include "DNA_scene_types.h" #include "BLI_utildefines.h" @@ -77,7 +77,7 @@ #include "UI_view2d.h" -#include "clip_intern.h" // own include +#include "clip_intern.h" // own include /********************** add marker operator *********************/ @@ -85,15 +85,16 @@ static void add_marker(SpaceClip *sc, float x, float y) { MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track; int width, height; + int framenr = ED_space_clip_clip_framenr(sc); ED_space_clip_size(sc, &width, &height); - track = BKE_tracking_add_track(tracking, tracksbase, x, y, sc->user.framenr, width, height); + track = BKE_tracking_track_add(tracking, tracksbase, x, y, framenr, width, height); - BKE_tracking_select_track(tracksbase, track, TRACK_AREA_ALL, 0); + BKE_tracking_track_select(tracksbase, track, TRACK_AREA_ALL, 0); clip->tracking.act_track = track; } @@ -106,6 +107,7 @@ static int add_marker_exec(bContext *C, wmOperator *op) int width, height; ED_space_clip_size(sc, &width, &height); + if (!width || !height) return OPERATOR_CANCELLED; @@ -143,14 +145,14 @@ void CLIP_OT_add_marker(wmOperatorType *ot) /* api callbacks */ ot->invoke = add_marker_invoke; ot->exec = add_marker_exec; - ot->poll = ED_space_clip_tracking_size_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MIN, FLT_MAX, - "Location", "Location of marker on frame", -1.0f, 1.0f); + "Location", "Location of marker on frame", -1.0f, 1.0f); } /********************** delete track operator *********************/ @@ -160,7 +162,7 @@ static int delete_track_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track = tracksbase->first, *next; while (track) { @@ -200,16 +202,16 @@ static int delete_marker_exec(bContext *C, wmOperator *UNUSED(op)) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); MovieTrackingTrack *track = tracksbase->first, *next; - int framenr = sc->user.framenr; + int framenr = ED_space_clip_clip_framenr(sc); int has_selection = 0; while (track) { next = track->next; if (TRACK_VIEW_SELECTED(sc, track)) { - MovieTrackingMarker *marker = BKE_tracking_exact_marker(track, framenr); + MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(track, framenr); if (marker) { has_selection |= track->markersnr > 1; @@ -247,30 +249,43 @@ void CLIP_OT_delete_marker(wmOperatorType *ot) /********************** slide marker operator *********************/ -#define SLIDE_ACTION_POS 0 -#define SLIDE_ACTION_SIZE 1 -#define SLIDE_ACTION_OFFSET 2 +#define SLIDE_ACTION_POS 0 +#define SLIDE_ACTION_SIZE 1 +#define SLIDE_ACTION_OFFSET 2 +#define SLIDE_ACTION_TILT_SIZE 3 typedef struct { - int area, action; + short area, action; MovieTrackingTrack *track; MovieTrackingMarker *marker; int mval[2]; int width, height; - float *min, *max, *pos, *offset; - float smin[2], smax[2], spos[2], soff[2]; - float (*smarkers)[2]; + float *min, *max, *pos, *offset, (*corners)[2]; + float spos[2]; + + short lock, accurate; - int lock, accurate; + /* data to restore on cancel */ + float old_search_min[2], old_search_max[2], old_pos[2], old_offset[2]; + float old_corners[4][2]; + float (*old_markers)[2]; } SlideMarkerData; +static void slide_marker_tilt_slider(MovieTrackingMarker *marker, float slider[2]) +{ + add_v2_v2v2(slider, marker->pattern_corners[1], marker->pattern_corners[2]); + add_v2_v2(slider, marker->pos); +} + static SlideMarkerData *create_slide_marker_data(SpaceClip *sc, MovieTrackingTrack *track, - MovieTrackingMarker *marker, wmEvent *event, int area, int action, int width, int height) + MovieTrackingMarker *marker, wmEvent *event, + int area, int corner, int action, int width, int height) { SlideMarkerData *data = MEM_callocN(sizeof(SlideMarkerData), "slide marker data"); + int framenr = ED_space_clip_clip_framenr(sc); - marker = BKE_tracking_ensure_marker(track, sc->user.framenr); + marker = BKE_tracking_marker_ensure(track, framenr); data->area = area; data->action = action; @@ -280,35 +295,34 @@ static SlideMarkerData *create_slide_marker_data(SpaceClip *sc, MovieTrackingTra if (area == TRACK_AREA_POINT) { data->pos = marker->pos; data->offset = track->offset; - copy_v2_v2(data->spos, marker->pos); - copy_v2_v2(data->soff, track->offset); } else if (area == TRACK_AREA_PAT) { if (action == SLIDE_ACTION_SIZE) { - data->min = track->pat_min; - data->max = track->pat_max; + data->corners = marker->pattern_corners; } - else { + else if (action == SLIDE_ACTION_OFFSET) { int a; data->pos = marker->pos; data->offset = track->offset; - copy_v2_v2(data->soff, track->offset); - - data->smarkers = MEM_callocN(sizeof(*data->smarkers)*track->markersnr, "slide marekrs"); + data->old_markers = MEM_callocN(sizeof(*data->old_markers) * track->markersnr, "slide marekrs"); for (a = 0; a < track->markersnr; a++) - copy_v2_v2(data->smarkers[a], track->markers[a].pos); + copy_v2_v2(data->old_markers[a], track->markers[a].pos); + } + else if (action == SLIDE_ACTION_POS) { + data->corners = marker->pattern_corners; + data->pos = marker->pattern_corners[corner]; + copy_v2_v2(data->spos, data->pos); + } + else if (action == SLIDE_ACTION_TILT_SIZE) { + data->corners = marker->pattern_corners; + slide_marker_tilt_slider(marker, data->spos); } } else if (area == TRACK_AREA_SEARCH) { - data->min = track->search_min; - data->max = track->search_max; - } - - if (area == TRACK_AREA_SEARCH || (area == TRACK_AREA_PAT && action != SLIDE_ACTION_OFFSET)) { - copy_v2_v2(data->smin, data->min); - copy_v2_v2(data->smax, data->max); + data->min = marker->search_min; + data->max = marker->search_max; } data->mval[0] = event->mval[0]; @@ -320,69 +334,179 @@ static SlideMarkerData *create_slide_marker_data(SpaceClip *sc, MovieTrackingTra if (action == SLIDE_ACTION_SIZE) data->lock = 1; + /* backup marker's settings */ + memcpy(data->old_corners, marker->pattern_corners, sizeof(data->old_corners)); + copy_v2_v2(data->old_search_min, marker->search_min); + copy_v2_v2(data->old_search_max, marker->search_max); + copy_v2_v2(data->old_pos, marker->pos); + copy_v2_v2(data->old_offset, track->offset); + return data; } -/* corner = 0: right-bottom corner, - * corner = 1: left-top corner */ -static int mouse_on_corner(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, - int area, float co[2], int corner, int width, int height) +static int mouse_on_slide_zone(SpaceClip *sc, MovieTrackingMarker *marker, + int area, float co[2], float slide_zone[2], + float padding, int width, int height) { + const float size = 12.0f; int inside = 0; - float size = 12.0f; float min[2], max[2]; - float crn[2], dx, dy, tdx, tdy; + float dx, dy; if (area == TRACK_AREA_SEARCH) { - copy_v2_v2(min, track->search_min); - copy_v2_v2(max, track->search_max); + copy_v2_v2(min, marker->search_min); + copy_v2_v2(max, marker->search_max); } else { - copy_v2_v2(min, track->pat_min); - copy_v2_v2(max, track->pat_max); + BKE_tracking_marker_pattern_minmax(marker, min, max); } + min[0] -= padding / width; + min[1] -= padding / height; + max[0] += padding / width; + max[1] += padding / height; + dx = size / width / sc->zoom; dy = size / height / sc->zoom; - tdx = 5.0f / width / sc->zoom; - tdy = 5.0f / height / sc->zoom; + dx = MIN2(dx, (max[0] - min[0]) / 6.0f); + dy = MIN2(dy, (max[1] - min[1]) / 6.0f); + + return IN_RANGE_INCL(co[0], slide_zone[0] - dx, slide_zone[0] + dx) && + IN_RANGE_INCL(co[1], slide_zone[1] - dy, slide_zone[1] + dy); - dx = MIN2(dx, (max[0] - min[0]) / 6.0f) + tdx; - dy = MIN2(dy, (max[1] - min[1]) / 6.0f) + tdy; + return inside; +} + +static int mouse_on_corner(SpaceClip *sc, MovieTrackingMarker *marker, + int area, float co[2], int corner, float padding, + int width, int height) +{ + float min[2], max[2], crn[2]; + + if (area == TRACK_AREA_SEARCH) { + copy_v2_v2(min, marker->search_min); + copy_v2_v2(max, marker->search_max); + } + else { + BKE_tracking_marker_pattern_minmax(marker, min, max); + } + + min[0] -= padding / width; + min[1] -= padding / height; + max[0] += padding / width; + max[1] += padding / height; if (corner == 0) { crn[0] = marker->pos[0] + max[0]; crn[1] = marker->pos[1] + min[1]; - - inside = co[0] >= crn[0] - dx && co[0] <= crn[0] + tdx && co[1] >= crn[1] - tdy && co[1] <= crn[1] + dy; } else { crn[0] = marker->pos[0] + min[0]; crn[1] = marker->pos[1] + max[1]; + } + + return mouse_on_slide_zone(sc, marker, area, co, crn, padding, width, height); +} + +static int get_mouse_pattern_corner(SpaceClip *sc, MovieTrackingMarker *marker, float co[2], int width, int height) +{ + int i, next; + float len = FLT_MAX, dx, dy; + + for (i = 0; i < 4; i++) { + float cur_len; + + next = (i + 1) % 4; - inside = co[0] >= crn[0] - dx && co[0] <= crn[0] + dx && co[1] >= crn[1] - dy && co[1] <= crn[1] + dy; + cur_len = len_v2v2(marker->pattern_corners[i], marker->pattern_corners[next]); + + len = MIN2(cur_len, len); } - return inside; + dx = 12.0f / width / sc->zoom; + dy = 12.0f / height / sc->zoom; + + dx = MIN2(dx, len * 2.0f / 3.0f); + dy = MIN2(dy, len * width / height * 2.0f / 3.0f); + + for (i = 0; i < 4; i++) { + float crn[2]; + int inside; + + add_v2_v2v2(crn, marker->pattern_corners[i], marker->pos); + + inside = IN_RANGE_INCL(co[0], crn[0] - dx, crn[0] + dx) && + IN_RANGE_INCL(co[1], crn[1] - dy, crn[1] + dy); + + if (inside) + return i; + } + + return -1; } static int mouse_on_offset(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, - float co[2], int width, int height) + float co[2], int width, int height) { float pos[2], dx, dy; + float pat_min[2], pat_max[2]; + + BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max); add_v2_v2v2(pos, marker->pos, track->offset); dx = 12.0f / width / sc->zoom; dy = 12.0f / height / sc->zoom; - dx = MIN2(dx, (track->pat_max[0] - track->pat_min[0]) / 2.0f); - dy = MIN2(dy, (track->pat_max[1] - track->pat_min[1]) / 2.0f); + dx = MIN2(dx, (pat_max[0] - pat_min[0]) / 2.0f); + dy = MIN2(dy, (pat_max[1] - pat_min[1]) / 2.0f); return co[0] >= pos[0] - dx && co[0] <= pos[0] + dx && co[1] >= pos[1] - dy && co[1] <= pos[1] + dy; } +static int mouse_on_tilt(SpaceClip *sc, MovieTrackingMarker *marker, float co[2], int width, int height) +{ + float slider[2]; + + slide_marker_tilt_slider(marker, slider); + + return mouse_on_slide_zone(sc, marker, TRACK_AREA_PAT, co, slider, 0.0f, width, height); +} + +static int slide_check_corners(float (*corners)[2]) +{ + int i, next, prev; + float cross = 0.0f; + float p[2] = {0.0f, 0.0f}; + + if (!isect_point_quad_v2(p, corners[0], corners[1], corners[2], corners[3])) + return FALSE; + + for (i = 0; i < 4; i++) { + float v1[2], v2[2], cur_cross; + + next = (i + 1) % 4; + prev = (4 + i - 1) % 4; + + sub_v2_v2v2(v1, corners[i], corners[prev]); + sub_v2_v2v2(v2, corners[next], corners[i]); + + cur_cross = cross_v2v2(v1, v2); + + if (fabsf(cur_cross) > FLT_EPSILON) { + if (cross == 0.0f) { + cross = cur_cross; + } + else if (cross * cur_cross < 0.0f) { + return FALSE; + } + } + } + + return TRUE; +} + static void hide_cursor(bContext *C) { wmWindow *win = CTX_wm_window(C); @@ -397,15 +521,16 @@ static void show_cursor(bContext *C) WM_cursor_set(win, CURSOR_STD); } -static void *slide_marker_customdata(bContext *C, wmEvent *event) +MovieTrackingTrack *tracking_marker_check_slide(bContext *C, wmEvent *event, int *area_r, int *action_r, int *corner_r) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTrackingTrack *track; int width, height; float co[2]; - void *customdata = NULL; - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); + int framenr = ED_space_clip_clip_framenr(sc); + int action = -1, area = 0, corner = -1; ED_space_clip_size(sc, &width, &height); @@ -417,41 +542,102 @@ static void *slide_marker_customdata(bContext *C, wmEvent *event) track = tracksbase->first; while (track) { if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) { - MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr); + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + int ok = FALSE; if ((marker->flag & MARKER_DISABLED) == 0) { - if (!customdata) - if (mouse_on_offset(sc, track, marker, co, width, height)) - customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_POINT, - SLIDE_ACTION_POS, width, height); - - if (sc->flag & SC_SHOW_MARKER_SEARCH) { - if (mouse_on_corner(sc, track, marker, TRACK_AREA_SEARCH, co, 1, width, height)) - customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_SEARCH, - SLIDE_ACTION_OFFSET, width, height); - else if (mouse_on_corner(sc, track, marker, TRACK_AREA_SEARCH, co, 0, width, height)) - customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_SEARCH, - SLIDE_ACTION_SIZE, width, height); + if (mouse_on_offset(sc, track, marker, co, width, height)) { + area = TRACK_AREA_POINT; + action = SLIDE_ACTION_POS; + ok = TRUE; + } + + if (!ok && (sc->flag & SC_SHOW_MARKER_SEARCH)) { + if (mouse_on_corner(sc, marker, TRACK_AREA_SEARCH, co, 1, 0.0f, width, height)) { + area = TRACK_AREA_SEARCH; + action = SLIDE_ACTION_OFFSET; + ok = TRUE; + } + else if (mouse_on_corner(sc, marker, TRACK_AREA_SEARCH, co, 0, 0.0f, width, height)) { + area = TRACK_AREA_SEARCH; + action = SLIDE_ACTION_SIZE; + ok = TRUE; + } } - if (!customdata && (sc->flag & SC_SHOW_MARKER_PATTERN)) { - if (mouse_on_corner(sc, track, marker, TRACK_AREA_PAT, co, 1, width, height)) - customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_PAT, - SLIDE_ACTION_OFFSET, width, height); + if (!ok && (sc->flag & SC_SHOW_MARKER_PATTERN)) { + int current_corner = get_mouse_pattern_corner(sc, marker, co, width, height); - if (!customdata && mouse_on_corner(sc, track, marker, TRACK_AREA_PAT, co, 0, width, height)) - customdata = create_slide_marker_data(sc, track, marker, event, TRACK_AREA_PAT, - SLIDE_ACTION_SIZE, width, height); + if (current_corner != -1) { + area = TRACK_AREA_PAT; + action = SLIDE_ACTION_POS; + corner = current_corner; + ok = TRUE; + } + else { + if (mouse_on_corner(sc, marker, TRACK_AREA_PAT, co, 1, 12.0f, width, height)) { + area = TRACK_AREA_PAT; + action = SLIDE_ACTION_OFFSET; + ok = TRUE; + } + if (!ok && mouse_on_corner(sc, marker, TRACK_AREA_PAT, co, 0, 12.0f, width, height)) { + area = TRACK_AREA_PAT; + action = SLIDE_ACTION_SIZE; + ok = TRUE; + } + if (!ok && mouse_on_tilt(sc, marker, co, width, height)) { + area = TRACK_AREA_PAT; + action = SLIDE_ACTION_TILT_SIZE; + ok = TRUE; + } + } } - if (customdata) - break; + if (ok) { + if (area_r) + *area_r = area; + + if (action_r) + *action_r = action; + + if (corner_r) + *corner_r = corner; + + return track; + } } } track = track->next; } + return NULL; +} + +static void *slide_marker_customdata(bContext *C, wmEvent *event) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieTrackingTrack *track; + int width, height; + float co[2]; + void *customdata = NULL; + int framenr = ED_space_clip_clip_framenr(sc); + int area, action, corner; + + ED_space_clip_size(sc, &width, &height); + + if (width == 0 || height == 0) + return NULL; + + ED_clip_mouse_pos(C, event, co); + + track = tracking_marker_check_slide(C, event, &area, &action, &corner); + if (track) { + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + + customdata = create_slide_marker_data(sc, track, marker, event, area, corner, action, width, height); + } + return customdata; } @@ -481,33 +667,27 @@ static int slide_marker_invoke(bContext *C, wmOperator *op, wmEvent *event) static void cancel_mouse_slide(SlideMarkerData *data) { - /* cancel sliding */ - if (data->area == TRACK_AREA_POINT) { - if (data->action == SLIDE_ACTION_OFFSET) - copy_v2_v2(data->offset, data->soff); - else - copy_v2_v2(data->pos, data->spos); - } - else { - if (data->action == SLIDE_ACTION_SIZE) { - copy_v2_v2(data->min, data->smin); - copy_v2_v2(data->max, data->smax); - } - else { - int a; + MovieTrackingTrack *track = data->track; + MovieTrackingMarker *marker = data->marker; - for (a = 0; a < data->track->markersnr; a++) - copy_v2_v2(data->track->markers[a].pos, data->smarkers[a]); + memcpy(marker->pattern_corners, data->old_corners, sizeof(marker->pattern_corners)); + copy_v2_v2(marker->search_min, data->old_search_min); + copy_v2_v2(marker->search_max, data->old_search_max); + copy_v2_v2(marker->pos, data->old_pos); + copy_v2_v2(track->offset, data->old_offset); - copy_v2_v2(data->offset, data->soff); - } + if (data->old_markers) { + int a; + + for (a = 0; a < data->track->markersnr; a++) + copy_v2_v2(data->track->markers[a].pos, data->old_markers[a]); } } static void free_slide_data(SlideMarkerData *data) { - if (data->smarkers) - MEM_freeN(data->smarkers); + if (data->old_markers) + MEM_freeN(data->old_markers); MEM_freeN(data); } @@ -530,7 +710,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, wmEvent *event) if (ELEM(event->type, LEFTSHIFTKEY, RIGHTSHIFTKEY)) data->accurate = event->val == KM_PRESS; - /* no break! update area size */ + /* no break! update area size */ case MOUSEMOVE: mdelta[0] = event->mval[0] - data->mval[0]; @@ -550,772 +730,206 @@ static int slide_marker_modal(bContext *C, wmOperator *op, wmEvent *event) if (data->area == TRACK_AREA_POINT) { if (data->action == SLIDE_ACTION_OFFSET) { - data->offset[0] = data->soff[0] + dx; - data->offset[1] = data->soff[1] + dy; + data->offset[0] = data->old_offset[0] + dx; + data->offset[1] = data->old_offset[1] + dy; } else { - data->pos[0] = data->spos[0] + dx; - data->pos[1] = data->spos[1] + dy; - - data->marker->flag &= ~MARKER_TRACKED; + data->pos[0] = data->old_pos[0] + dx; + data->pos[1] = data->old_pos[1] + dy; } WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); DAG_id_tag_update(&sc->clip->id, 0); } - else { + else if (data->area == TRACK_AREA_PAT) { if (data->action == SLIDE_ACTION_SIZE) { - data->min[0] = data->smin[0] - dx; - data->max[0] = data->smax[0] + dx; + float start[2], end[2]; + float scale; - data->min[1] = data->smin[1] + dy; - data->max[1] = data->smax[1] - dy; + ED_clip_point_stable_pos(C, data->mval[0], data->mval[1], &start[0], &start[1]); - if (data->area == TRACK_AREA_SEARCH) - BKE_tracking_clamp_track(data->track, CLAMP_SEARCH_DIM); - else - BKE_tracking_clamp_track(data->track, CLAMP_PAT_DIM); - } - else { - float d[2] = {dx, dy}; - - if (data->area == TRACK_AREA_SEARCH) { - add_v2_v2v2(data->min, data->smin, d); - add_v2_v2v2(data->max, data->smax, d); - } - else { - int a; + sub_v2_v2(start, data->old_pos); - for (a = 0; a < data->track->markersnr; a++) - add_v2_v2v2(data->track->markers[a].pos, data->smarkers[a], d); + if (len_v2(start) > 0.0f) { + float mval[2]; - sub_v2_v2v2(data->offset, data->soff, d); - } - - if (data->area == TRACK_AREA_SEARCH) - BKE_tracking_clamp_track(data->track, CLAMP_SEARCH_POS); - } - } + if (data->accurate) { + mval[0] = data->mval[0] + (event->mval[0] - data->mval[0]) / 5.0f; + mval[1] = data->mval[1] + (event->mval[1] - data->mval[1]) / 5.0f; + } + else { + mval[0] = event->mval[0]; + mval[1] = event->mval[1]; + } - WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, NULL); + ED_clip_point_stable_pos(C, mval[0], mval[1], &end[0], &end[1]); - break; + sub_v2_v2(end, data->old_pos); - case LEFTMOUSE: - if (event->val == KM_RELEASE) { - free_slide_data(op->customdata); + scale = len_v2(end) / len_v2(start); - show_cursor(C); + if (scale > 0.0f) { + int a; - return OPERATOR_FINISHED; - } - - break; - - case ESCKEY: - cancel_mouse_slide(op->customdata); - - free_slide_data(op->customdata); - - show_cursor(C); - - WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, NULL); - - return OPERATOR_CANCELLED; - } - - return OPERATOR_RUNNING_MODAL; -} - -void CLIP_OT_slide_marker(wmOperatorType *ot) -{ - /* identifiers */ - ot->name = "Slide Marker"; - ot->description = "Slide marker areas"; - ot->idname = "CLIP_OT_slide_marker"; - - /* api callbacks */ - ot->poll = ED_space_clip_tracking_size_poll; - ot->invoke = slide_marker_invoke; - ot->modal = slide_marker_modal; - - /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_GRAB_POINTER | OPTYPE_BLOCKING; - - /* properties */ - RNA_def_float_vector(ot->srna, "offset", 2, NULL, -FLT_MAX, FLT_MAX, - "Offset", "Offset in floating point units, 1.0 is the width and height of the image", -FLT_MAX, FLT_MAX); -} - -/********************** mouse select operator *********************/ - -static int mouse_on_side(float co[2], float x1, float y1, float x2, float y2, float epsx, float epsy) -{ - if (x1 > x2) - - SWAP(float, x1, x2); - - if (y1 > y2) - SWAP(float, y1, y2); - - return (co[0] >= x1 - epsx && co[0] <= x2 + epsx) && (co[1] >= y1 - epsy && co[1] <= y2 + epsy); -} - -static int mouse_on_rect(float co[2], float pos[2], float min[2], float max[2], float epsx, float epsy) -{ - return mouse_on_side(co, pos[0] + min[0], pos[1] + min[1], pos[0] + max[0], pos[1] + min[1], epsx, epsy) || - mouse_on_side(co, pos[0] + min[0], pos[1] + min[1], pos[0] + min[0], pos[1] + max[1], epsx, epsy) || - mouse_on_side(co, pos[0] + min[0], pos[1] + max[1], pos[0] + max[0], pos[1] + max[1], epsx, epsy) || - mouse_on_side(co, pos[0] + max[0], pos[1] + min[1], pos[0] + max[0], pos[1] + max[1], epsx, epsy); -} - -static int track_mouse_area(SpaceClip *sc, float co[2], MovieTrackingTrack *track) -{ - MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr); - float epsx, epsy; - int width, height; - - ED_space_clip_size(sc, &width, &height); - - epsx = MIN4(track->pat_min[0] - track->search_min[0], track->search_max[0] - track->pat_max[0], - fabsf(track->pat_min[0]), fabsf(track->pat_max[0])) / 2; - epsy = MIN4(track->pat_min[1] - track->search_min[1], track->search_max[1] - track->pat_max[1], - fabsf(track->pat_min[1]), fabsf(track->pat_max[1])) / 2; - - epsx = MAX2(epsx, 2.0f / width); - epsy = MAX2(epsy, 2.0f / height); - - if (sc->flag & SC_SHOW_MARKER_SEARCH) { - if (mouse_on_rect(co, marker->pos, track->search_min, track->search_max, epsx, epsy)) - return TRACK_AREA_SEARCH; - } - - if ((marker->flag & MARKER_DISABLED) == 0) { - if (sc->flag & SC_SHOW_MARKER_PATTERN) - if (mouse_on_rect(co, marker->pos, track->pat_min, track->pat_max, epsx, epsy)) - return TRACK_AREA_PAT; - - epsx = 12.0f / width; - epsy = 12.0f / height; - - if (fabsf(co[0] - marker->pos[0] - track->offset[0]) < epsx && - fabsf(co[1] - marker->pos[1] - track->offset[1]) <= epsy) - { - return TRACK_AREA_POINT; - } - } - - return TRACK_AREA_NONE; -} - -static float dist_to_rect(float co[2], float pos[2], float min[2], float max[2]) -{ - float d1, d2, d3, d4; - float p[2] = {co[0] - pos[0], co[1] - pos[1]}; - float v1[2] = {min[0], min[1]}, v2[2] = {max[0], min[1]}; - float v3[2] = {max[0], max[1]}, v4[2] = {min[0], max[1]}; - - d1 = dist_to_line_segment_v2(p, v1, v2); - d2 = dist_to_line_segment_v2(p, v2, v3); - d3 = dist_to_line_segment_v2(p, v3, v4); - d4 = dist_to_line_segment_v2(p, v4, v1); - - return MIN4(d1, d2, d3, d4); -} - -static MovieTrackingTrack *find_nearest_track(SpaceClip *sc, ListBase *tracksbase, float co[2]) -{ - MovieTrackingTrack *track = NULL, *cur; - float mindist = 0.0f; - - cur = tracksbase->first; - while (cur) { - MovieTrackingMarker *marker = BKE_tracking_get_marker(cur, sc->user.framenr); - - if (((cur->flag & TRACK_HIDDEN) == 0) && MARKER_VISIBLE(sc, cur, marker)) { - float dist, d1, d2 = FLT_MAX, d3 = FLT_MAX; - - /* distance to marker point */ - d1 = sqrtf((co[0] - marker->pos[0] - cur->offset[0]) * (co[0] - marker->pos[0] - cur->offset[0]) + - (co[1] - marker->pos[1] - cur->offset[1]) * (co[1] - marker->pos[1] - cur->offset[1])); - - /* distance to pattern boundbox */ - if (sc->flag & SC_SHOW_MARKER_PATTERN) - d2 = dist_to_rect(co, marker->pos, cur->pat_min, cur->pat_max); - - /* distance to search boundbox */ - if (sc->flag & SC_SHOW_MARKER_SEARCH && TRACK_VIEW_SELECTED(sc, cur)) - d3 = dist_to_rect(co, marker->pos, cur->search_min, cur->search_max); - - /* choose minimal distance. useful for cases of overlapped markers. */ - dist = MIN3(d1, d2, d3); - - if (track == NULL || dist < mindist) { - track = cur; - mindist = dist; - } - } - - cur = cur->next; - } - - return track; -} - -static int mouse_select(bContext *C, float co[2], int extend) -{ - SpaceClip *sc = CTX_wm_space_clip(C); - MovieClip *clip = ED_space_clip(sc); - MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); - MovieTrackingTrack *track = NULL; /* selected marker */ - - track = find_nearest_track(sc, tracksbase, co); - - if (track) { - int area = track_mouse_area(sc, co, track); - - if (!extend || !TRACK_VIEW_SELECTED(sc, track)) - area = TRACK_AREA_ALL; - - if (extend && TRACK_AREA_SELECTED(track, area)) { - if (track == act_track) - BKE_tracking_deselect_track(track, area); - else - clip->tracking.act_track = track; - } - else { - if (area == TRACK_AREA_POINT) - area = TRACK_AREA_ALL; - - BKE_tracking_select_track(tracksbase, track, area, extend); - clip->tracking.act_track = track; - } - } - - if (!extend) { - sc->xlockof = 0.0f; - sc->ylockof = 0.0f; - } - - BKE_tracking_dopesheet_tag_update(tracking); - - WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); - - return OPERATOR_FINISHED; -} - -static int select_exec(bContext *C, wmOperator *op) -{ - float co[2]; - int extend; - - RNA_float_get_array(op->ptr, "location", co); - extend = RNA_boolean_get(op->ptr, "extend"); - - return mouse_select(C, co, extend); -} - -static int select_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - float co[2]; - int extend = RNA_boolean_get(op->ptr, "extend"); - - if (!extend) { - SlideMarkerData *slidedata = slide_marker_customdata(C, event); + for (a = 0; a < 4; a++) { + mul_v2_v2fl(data->corners[a], data->old_corners[a], scale); + } + } + } - if (slidedata) { - SpaceClip *sc = CTX_wm_space_clip(C); - MovieClip *clip = ED_space_clip(sc); + BKE_tracking_marker_clamp(data->marker, CLAMP_PAT_DIM); + } + else if (data->action == SLIDE_ACTION_OFFSET) { + float d[2] = {dx, dy}; + int a; - clip->tracking.act_track = slidedata->track; + for (a = 0; a < data->track->markersnr; a++) + add_v2_v2v2(data->track->markers[a].pos, data->old_markers[a], d); - WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); + sub_v2_v2v2(data->offset, data->old_offset, d); + } + else if (data->action == SLIDE_ACTION_POS) { + float spos[2]; - MEM_freeN(slidedata); + copy_v2_v2(spos, data->pos); - return OPERATOR_PASS_THROUGH; - } - } + data->pos[0] = data->spos[0] + dx; + data->pos[1] = data->spos[1] + dy; - ED_clip_mouse_pos(C, event, co); - RNA_float_set_array(op->ptr, "location", co); + if (!slide_check_corners(data->corners)) { + copy_v2_v2(data->pos, spos); + } - return select_exec(C, op); -} + /* currently only patterns are allowed to have such combination of event and data */ + BKE_tracking_marker_clamp(data->marker, CLAMP_PAT_DIM); + } + else if (data->action == SLIDE_ACTION_TILT_SIZE) { + float start[2], end[2]; + float scale = 1.0f, angle = 0.0f; + int a; + float mval[2]; + + if (data->accurate) { + mval[0] = data->mval[0] + (event->mval[0] - data->mval[0]) / 5.0f; + mval[1] = data->mval[1] + (event->mval[1] - data->mval[1]) / 5.0f; + } + else { + mval[0] = event->mval[0]; + mval[1] = event->mval[1]; + } -void CLIP_OT_select(wmOperatorType *ot) -{ - /* identifiers */ - ot->name = "Select"; - ot->description = "Select tracking markers"; - ot->idname = "CLIP_OT_select"; + sub_v2_v2v2(start, data->spos, data->old_pos); - /* api callbacks */ - ot->exec = select_exec; - ot->invoke = select_invoke; - ot->poll = ED_space_clip_tracking_poll; + ED_clip_point_stable_pos(C, mval[0], mval[1], &end[0], &end[1]); + sub_v2_v2(end, data->old_pos); - /* flags */ - ot->flag = OPTYPE_UNDO; + if (len_v2(start) > 0.0f) { + scale = len_v2(end) / len_v2(start); - /* properties */ - RNA_def_boolean(ot->srna, "extend", 0, - "Extend", "Extend selection rather than clearing the existing selection"); - RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MAX, FLT_MAX, - "Location", "Mouse location in normalized coordinates, 0.0 to 1.0 is within the image bounds", -100.0f, 100.0f); -} + if (scale < 0.0f) { + scale = 0.0; + } + } -/********************** border select operator *********************/ + angle = -angle_signed_v2v2(start, end); -static int border_select_exec(bContext *C, wmOperator *op) -{ - SpaceClip *sc = CTX_wm_space_clip(C); - MovieClip *clip = ED_space_clip(sc); - MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *track; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - rcti rect; - rctf rectf; - int change = FALSE, mode, extend; + for (a = 0; a < 4; a++) { + float vec[2]; - /* get rectangle from operator */ - rect.xmin = RNA_int_get(op->ptr, "xmin"); - rect.ymin = RNA_int_get(op->ptr, "ymin"); - rect.xmax = RNA_int_get(op->ptr, "xmax"); - rect.ymax = RNA_int_get(op->ptr, "ymax"); + mul_v2_v2fl(data->corners[a], data->old_corners[a], scale); - ED_clip_point_stable_pos(C, rect.xmin, rect.ymin, &rectf.xmin, &rectf.ymin); - ED_clip_point_stable_pos(C, rect.xmax, rect.ymax, &rectf.xmax, &rectf.ymax); + copy_v2_v2(vec, data->corners[a]); + vec[0] *= data->width; + vec[1] *= data->height; - mode = RNA_int_get(op->ptr, "gesture_mode"); - extend = RNA_boolean_get(op->ptr, "extend"); + data->corners[a][0] = (vec[0] * cos(angle) - vec[1] * sin(angle)) / data->width; + data->corners[a][1] = (vec[1] * cos(angle) + vec[0] * sin(angle)) / data->height; + } - /* do actual selection */ - track = tracksbase->first; - while (track) { - if ((track->flag & TRACK_HIDDEN) == 0) { - MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr); + BKE_tracking_marker_clamp(data->marker, CLAMP_PAT_DIM); - if (MARKER_VISIBLE(sc, track, marker)) { - if (BLI_in_rctf(&rectf, marker->pos[0], marker->pos[1])) { - BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, mode != GESTURE_MODAL_SELECT); } - else if (!extend) { - BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, 1); - } - - change = TRUE; } - } - - track = track->next; - } - - if (change) { - BKE_tracking_dopesheet_tag_update(tracking); - - WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); - - return OPERATOR_FINISHED; - } - - return OPERATOR_CANCELLED; -} - -void CLIP_OT_select_border(wmOperatorType *ot) -{ - /* identifiers */ - ot->name = "Border Select"; - ot->description = "Select markers using border selection"; - ot->idname = "CLIP_OT_select_border"; - - /* api callbacks */ - ot->invoke = WM_border_select_invoke; - ot->exec = border_select_exec; - ot->modal = WM_border_select_modal; - ot->poll = ED_space_clip_tracking_poll; - - /* flags */ - ot->flag = OPTYPE_UNDO; - - /* properties */ - WM_operator_properties_gesture_border(ot, TRUE); -} - - -static int do_lasso_select_marker(bContext *C, int mcords[][2], short moves, short select) -{ - ARegion *ar = CTX_wm_region(C); - SpaceClip *sc = CTX_wm_space_clip(C); - MovieClip *clip = ED_space_clip(sc); - MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *track; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - rcti rect; - int change = FALSE; - - /* get rectangle from operator */ - BLI_lasso_boundbox(&rect, mcords, moves); - - /* do actual selection */ - track = tracksbase->first; - while (track) { - if ((track->flag & TRACK_HIDDEN) == 0) { - MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr); + else if (data->area == TRACK_AREA_SEARCH) { + if (data->action == SLIDE_ACTION_SIZE) { + data->min[0] = data->old_search_min[0] - dx; + data->max[0] = data->old_search_max[0] + dx; - if (MARKER_VISIBLE(sc, track, marker)) { - float screen_co[2]; + data->min[1] = data->old_search_min[1] + dy; + data->max[1] = data->old_search_max[1] - dy; - /* marker in screen coords */ - ED_clip_point_stable_pos__reverse(sc, ar, marker->pos, screen_co); + BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_DIM); + } + else if (data->area == TRACK_AREA_SEARCH) { + float d[2] = {dx, dy}; - if (BLI_in_rcti(&rect, screen_co[0], screen_co[1]) && - BLI_lasso_is_point_inside(mcords, moves, screen_co[0], screen_co[1], V2D_IS_CLIPPED)) - { - BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, !select); + add_v2_v2v2(data->min, data->old_search_min, d); + add_v2_v2v2(data->max, data->old_search_max, d); } - change = TRUE; + BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_POS); } - } - - track = track->next; - } - - if (change) { - BKE_tracking_dopesheet_tag_update(tracking); - - WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); - } - - return change; -} -static int clip_lasso_select_exec(bContext *C, wmOperator *op) -{ - int mcords_tot; - int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot); - - if (mcords) { - short select; - - select = !RNA_boolean_get(op->ptr, "deselect"); - do_lasso_select_marker(C, mcords, mcords_tot, select); - - MEM_freeN(mcords); - - return OPERATOR_FINISHED; - } - return OPERATOR_PASS_THROUGH; -} - -void CLIP_OT_select_lasso(wmOperatorType *ot) -{ - /* identifiers */ - ot->name = "Lasso Select"; - ot->description = "Select markers using lasso selection"; - ot->idname = "CLIP_OT_select_lasso"; - - /* api callbacks */ - ot->invoke = WM_gesture_lasso_invoke; - ot->modal = WM_gesture_lasso_modal; - ot->exec = clip_lasso_select_exec; - ot->poll = ED_space_clip_tracking_poll; - ot->cancel = WM_gesture_lasso_cancel; - - /* flags */ - ot->flag = OPTYPE_UNDO; - - /* properties */ - RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", ""); - RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Deselect rather than select items"); - RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection instead of deselecting everything first"); -} - -/********************** circle select operator *********************/ - -static int marker_inside_ellipse(MovieTrackingMarker *marker, float offset[2], float ellipse[2]) -{ - /* normalized ellipse: ell[0] = scaleX, ell[1] = scaleY */ - float x, y; - - x = (marker->pos[0] - offset[0])*ellipse[0]; - y = (marker->pos[1] - offset[1])*ellipse[1]; - - return x*x + y*y < 1.0f; -} - -static int circle_select_exec(bContext *C, wmOperator *op) -{ - SpaceClip *sc = CTX_wm_space_clip(C); - MovieClip *clip = ED_space_clip(sc); - ARegion *ar = CTX_wm_region(C); - MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *track; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - int x, y, radius, width, height, mode, change = FALSE; - float zoomx, zoomy, offset[2], ellipse[2]; - - /* get operator properties */ - x = RNA_int_get(op->ptr, "x"); - y = RNA_int_get(op->ptr, "y"); - radius = RNA_int_get(op->ptr, "radius"); + data->marker->flag &= ~MARKER_TRACKED; - mode = RNA_int_get(op->ptr, "gesture_mode"); - - /* compute ellipse and position in unified coordinates */ - ED_space_clip_size(sc, &width, &height); - ED_space_clip_zoom(sc, ar, &zoomx, &zoomy); - - ellipse[0] = width * zoomx / radius; - ellipse[1] = height * zoomy / radius; + WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, NULL); - ED_clip_point_stable_pos(C, x, y, &offset[0], &offset[1]); + break; - /* do selection */ - track = tracksbase->first; - while (track) { - if ((track->flag & TRACK_HIDDEN) == 0) { - MovieTrackingMarker *marker = BKE_tracking_get_marker(track, sc->user.framenr); + case LEFTMOUSE: + if (event->val == KM_RELEASE) { + free_slide_data(op->customdata); - if (MARKER_VISIBLE(sc, track, marker) && marker_inside_ellipse(marker, offset, ellipse)) { - BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, mode != GESTURE_MODAL_SELECT); + show_cursor(C); - change = TRUE; + return OPERATOR_FINISHED; } - } - - track = track->next; - } - - if (change) { - BKE_tracking_dopesheet_tag_update(tracking); - WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); - - return OPERATOR_FINISHED; - } - - return OPERATOR_CANCELLED; -} - -void CLIP_OT_select_circle(wmOperatorType *ot) -{ - /* identifiers */ - ot->name = "Circle Select"; - ot->description = "Select markers using circle selection"; - ot->idname = "CLIP_OT_select_circle"; - - /* api callbacks */ - ot->invoke = WM_gesture_circle_invoke; - ot->modal = WM_gesture_circle_modal; - ot->exec = circle_select_exec; - ot->poll = ED_space_clip_tracking_poll; - - /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - - /* properties */ - RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "radius", 0, INT_MIN, INT_MAX, "Radius", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); -} - -/********************** select all operator *********************/ - -static int select_all_exec(bContext *C, wmOperator *op) -{ - SpaceClip *sc = CTX_wm_space_clip(C); - MovieClip *clip = ED_space_clip(sc); - MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *track = NULL; /* selected track */ - MovieTrackingMarker *marker; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - int action = RNA_enum_get(op->ptr, "action"); - int framenr = sc->user.framenr; - int has_selection = FALSE; - - if (action == SEL_TOGGLE) { - action = SEL_SELECT; - track = tracksbase->first; - while (track) { - if (TRACK_VIEW_SELECTED(sc, track)) { - marker = BKE_tracking_get_marker(track, framenr); + break; - if (MARKER_VISIBLE(sc, track, marker)) { - action = SEL_DESELECT; - break; - } - } + case ESCKEY: + cancel_mouse_slide(op->customdata); - track = track->next; - } - } + free_slide_data(op->customdata); - track = tracksbase->first; - while (track) { - if ((track->flag & TRACK_HIDDEN) == 0) { - marker = BKE_tracking_get_marker(track, framenr); - - if (MARKER_VISIBLE(sc, track, marker)) { - switch (action) { - case SEL_SELECT: - track->flag |= SELECT; - track->pat_flag |= SELECT; - track->search_flag |= SELECT; - break; - case SEL_DESELECT: - track->flag &= ~SELECT; - track->pat_flag &= ~SELECT; - track->search_flag &= ~SELECT; - break; - case SEL_INVERT: - track->flag ^= SELECT; - track->pat_flag ^= SELECT; - track->search_flag ^= SELECT; - break; - } - } - } + show_cursor(C); - if (TRACK_VIEW_SELECTED(sc, track)) - has_selection = TRUE; + WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, NULL); - track = track->next; + return OPERATOR_CANCELLED; } - if (!has_selection) - sc->flag &= ~SC_LOCK_SELECTION; - - BKE_tracking_dopesheet_tag_update(tracking); - - WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); - - return OPERATOR_FINISHED; + return OPERATOR_RUNNING_MODAL; } -void CLIP_OT_select_all(wmOperatorType *ot) +void CLIP_OT_slide_marker(wmOperatorType *ot) { /* identifiers */ - ot->name = "(De)select All"; - ot->description = "Change selection of all tracking markers"; - ot->idname = "CLIP_OT_select_all"; + ot->name = "Slide Marker"; + ot->description = "Slide marker areas"; + ot->idname = "CLIP_OT_slide_marker"; /* api callbacks */ - ot->exec = select_all_exec; ot->poll = ED_space_clip_tracking_poll; + ot->invoke = slide_marker_invoke; + ot->modal = slide_marker_modal; /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - - WM_operator_properties_select_all(ot); -} - -/********************** select grouped operator *********************/ - -static int select_groped_exec(bContext *C, wmOperator *op) -{ - SpaceClip *sc = CTX_wm_space_clip(C); - MovieClip *clip = ED_space_clip(sc); - MovieTrackingTrack *track; - MovieTrackingMarker *marker; - MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - int group = RNA_enum_get(op->ptr, "group"); - - track = tracksbase->first; - while (track) { - int ok = FALSE; - - marker = BKE_tracking_get_marker(track, sc->user.framenr); - - if (group == 0) { /* Keyframed */ - ok = marker->framenr == sc->user.framenr && (marker->flag & MARKER_TRACKED) == 0; - } - else if (group == 1) { /* Estimated */ - ok = marker->framenr != sc->user.framenr; - } - else if (group == 2) { /* tracked */ - ok = marker->framenr == sc->user.framenr && (marker->flag & MARKER_TRACKED); - } - else if (group == 3) { /* locked */ - ok = track->flag & TRACK_LOCKED; - } - else if (group == 4) { /* disabled */ - ok = marker->flag & MARKER_DISABLED; - } - else if (group == 5) { /* color */ - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); - - if (act_track) { - ok = (track->flag & TRACK_CUSTOMCOLOR) == (act_track->flag & TRACK_CUSTOMCOLOR); - - if (ok && track->flag & TRACK_CUSTOMCOLOR) - ok = equals_v3v3(track->color, act_track->color); - } - } - else if (group == 6) { /* failed */ - ok = (track->flag & TRACK_HAS_BUNDLE) == 0; - } - - if (ok) { - track->flag |= SELECT; - if (sc->flag & SC_SHOW_MARKER_PATTERN) - track->pat_flag |= SELECT; - if (sc->flag & SC_SHOW_MARKER_SEARCH) - track->search_flag |= SELECT; - } - - track = track->next; - } - - BKE_tracking_dopesheet_tag_update(tracking); - - WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, clip); - - return OPERATOR_FINISHED; -} - -void CLIP_OT_select_grouped(wmOperatorType *ot) -{ - static EnumPropertyItem select_group_items[] = { - {0, "KEYFRAMED", 0, "Keyframed tracks", "Select all keyframed tracks"}, - {1, "ESTIMATED", 0, "Estimated tracks", "Select all estimated tracks"}, - {2, "TRACKED", 0, "Tracked tracks", "Select all tracked tracks"}, - {3, "LOCKED", 0, "Locked tracks", "Select all locked tracks"}, - {4, "DISABLED", 0, "Disabled tracks", "Select all disabled tracks"}, - {5, "COLOR", 0, "Tracks with same color", "Select all tracks with same color as active track"}, - {6, "FAILED", 0, "Failed Tracks", "Select all tracks which failed to be reconstructed"}, - {0, NULL, 0, NULL, NULL} - }; - - /* identifiers */ - ot->name = "Select Grouped"; - ot->description = "Select all tracks from specified group"; - ot->idname = "CLIP_OT_select_grouped"; - - /* api callbacks */ - ot->exec = select_groped_exec; - ot->poll = ED_space_clip_tracking_size_poll; - - /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_GRAB_POINTER | OPTYPE_BLOCKING; - /* proeprties */ - RNA_def_enum(ot->srna, "group", select_group_items, TRACK_CLEAR_REMAINED, "Action", "Clear action to execute"); + /* properties */ + RNA_def_float_vector(ot->srna, "offset", 2, NULL, -FLT_MAX, FLT_MAX, + "Offset", "Offset in floating point units, 1.0 is the width and height of the image", -FLT_MAX, FLT_MAX); } /********************** track operator *********************/ typedef struct TrackMarkersJob { - struct MovieTrackingContext *context; /* tracking context */ - int sfra, efra, lastfra; /* Start, end and recently tracked frames */ - int backwards; /* Backwards tracking flag */ - MovieClip *clip; /* Clip which is tracking */ - float delay; /* Delay in milliseconds to allow tracking at fixed FPS */ + struct MovieTrackingContext *context; /* tracking context */ + int sfra, efra, lastfra; /* Start, end and recently tracked frames */ + int backwards; /* Backwards tracking flag */ + MovieClip *clip; /* Clip which is tracking */ + float delay; /* Delay in milliseconds to allow tracking at fixed FPS */ struct Main *main; struct Scene *scene; @@ -1330,14 +944,14 @@ static int track_markers_testbreak(void) static int track_count_markers(SpaceClip *sc, MovieClip *clip) { int tot = 0; - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); MovieTrackingTrack *track; - int framenr = sc->user.framenr; + int framenr = ED_space_clip_clip_framenr(sc); track = tracksbase->first; while (track) { if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) { - MovieTrackingMarker *marker = BKE_tracking_get_marker(track, framenr); + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); if (!marker || (marker->flag & MARKER_DISABLED) == 0) tot++; @@ -1351,7 +965,7 @@ static int track_count_markers(SpaceClip *sc, MovieClip *clip) static void clear_invisible_track_selection(SpaceClip *sc, MovieClip *clip) { - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); int hidden = 0; if ((sc->flag & SC_SHOW_MARKER_PATTERN) == 0) @@ -1365,7 +979,7 @@ static void clear_invisible_track_selection(SpaceClip *sc, MovieClip *clip) while (track) { if ((track->flag & TRACK_HIDDEN) == 0) - BKE_tracking_track_flag(track, hidden, SELECT, 1); + BKE_tracking_track_flag_clear(track, hidden, SELECT); track = track->next; } @@ -1374,9 +988,9 @@ static void clear_invisible_track_selection(SpaceClip *sc, MovieClip *clip) static void track_init_markers(SpaceClip *sc, MovieClip *clip, int *frames_limit_r) { - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); MovieTrackingTrack *track; - int framenr = sc->user.framenr; + int framenr = ED_space_clip_clip_framenr(sc); int frames_limit = 0; clear_invisible_track_selection(sc, clip); @@ -1385,7 +999,7 @@ static void track_init_markers(SpaceClip *sc, MovieClip *clip, int *frames_limit while (track) { if (TRACK_VIEW_SELECTED(sc, track)) { if ((track->flag & TRACK_HIDDEN) == 0 && (track->flag & TRACK_LOCKED) == 0) { - BKE_tracking_ensure_marker(track, framenr); + BKE_tracking_marker_ensure(track, framenr); if (track->frames_limit) { if (frames_limit == 0) @@ -1426,7 +1040,7 @@ static int track_markers_initjob(bContext *C, TrackMarkersJob *tmj, int backward track_init_markers(sc, clip, &frames_limit); - tmj->sfra = sc->user.framenr; + tmj->sfra = ED_space_clip_clip_framenr(sc); tmj->clip = clip; tmj->backwards = backwards; @@ -1443,6 +1057,8 @@ static int track_markers_initjob(bContext *C, TrackMarkersJob *tmj, int backward tmj->efra = MIN2(tmj->efra, tmj->sfra + frames_limit); } + tmj->efra = BKE_movieclip_remap_scene_to_clip_frame(clip, tmj->efra); + if (settings->speed != TRACKING_SPEED_FASTEST) { tmj->delay = 1.0f / scene->r.frs_sec * 1000.0f; @@ -1488,15 +1104,15 @@ static void track_markers_startjob(void *tmv, short *stop, short *do_update, flo double start_time = PIL_check_seconds_timer(), exec_time; - if (!BKE_tracking_next(tmj->context)) + if (!BKE_tracking_context_step(tmj->context)) break; exec_time = PIL_check_seconds_timer() - start_time; if (tmj->delay > (float)exec_time) PIL_sleep_ms(tmj->delay - (float)exec_time); } - else if (!BKE_tracking_next(tmj->context)) - break; + else if (!BKE_tracking_context_step(tmj->context)) + break; *do_update = TRUE; *progress = (float)(framenr - tmj->sfra) / (tmj->efra - tmj->sfra); @@ -1519,7 +1135,7 @@ static void track_markers_updatejob(void *tmv) { TrackMarkersJob *tmj = (TrackMarkersJob *)tmv; - BKE_tracking_sync(tmj->context); + BKE_tracking_context_sync(tmj->context); } static void track_markers_freejob(void *tmv) @@ -1527,10 +1143,10 @@ static void track_markers_freejob(void *tmv) TrackMarkersJob *tmj = (TrackMarkersJob *)tmv; tmj->clip->tracking_context = NULL; - tmj->scene->r.cfra = tmj->lastfra; + tmj->scene->r.cfra = BKE_movieclip_remap_clip_to_scene_frame(tmj->clip, tmj->lastfra); ED_update_for_newframe(tmj->main, tmj->scene, 0); - BKE_tracking_sync(tmj->context); + BKE_tracking_context_sync(tmj->context); BKE_tracking_context_free(tmj->context); MEM_freeN(tmj); @@ -1544,7 +1160,7 @@ static int track_markers_exec(bContext *C, wmOperator *op) MovieClip *clip = ED_space_clip(sc); Scene *scene = CTX_data_scene(C); struct MovieTrackingContext *context; - int framenr = sc->user.framenr; + int framenr = ED_space_clip_clip_framenr(sc); int sfra = framenr, efra; int backwards = RNA_boolean_get(op->ptr, "backwards"); int sequence = RNA_boolean_get(op->ptr, "sequence"); @@ -1568,6 +1184,8 @@ static int track_markers_exec(bContext *C, wmOperator *op) efra = MIN2(efra, sfra + frames_limit); } + efra = BKE_movieclip_remap_scene_to_clip_frame(clip, efra); + if (!track_markers_check_direction(backwards, framenr, efra)) return OPERATOR_CANCELLED; @@ -1575,7 +1193,7 @@ static int track_markers_exec(bContext *C, wmOperator *op) context = BKE_tracking_context_new(clip, &sc->user, backwards, sequence); while (framenr != efra) { - if (!BKE_tracking_next(context)) + if (!BKE_tracking_context_step(context)) break; if (backwards) framenr--; @@ -1585,11 +1203,11 @@ static int track_markers_exec(bContext *C, wmOperator *op) break; } - BKE_tracking_sync(context); + BKE_tracking_context_sync(context); BKE_tracking_context_free(context); /* update scene current frame to the lastes tracked frame */ - scene->r.cfra = framenr; + scene->r.cfra = BKE_movieclip_remap_clip_to_scene_frame(clip, framenr); WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip); WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene); @@ -1680,7 +1298,7 @@ void CLIP_OT_track_markers(wmOperatorType *ot) /* api callbacks */ ot->exec = track_markers_exec; ot->invoke = track_markers_invoke; - ot->poll = ED_space_clip_tracking_frame_poll; + ot->poll = ED_space_clip_tracking_poll; ot->modal = track_markers_modal; /* flags */ @@ -1712,10 +1330,10 @@ static int solve_camera_initjob(bContext *C, SolveCameraJob *scj, wmOperator *op Scene *scene = CTX_data_scene(C); MovieTracking *tracking = &clip->tracking; MovieTrackingSettings *settings = &clip->tracking.settings; - MovieTrackingObject *object = BKE_tracking_active_object(tracking); + MovieTrackingObject *object = BKE_tracking_object_get_active(tracking); int width, height; - if (!BKE_tracking_can_reconstruct(tracking, object, error_msg, max_error)) + if (!BKE_tracking_reconstruction_check(tracking, object, error_msg, max_error)) return 0; /* could fail if footage uses images with different sizes */ @@ -1727,7 +1345,7 @@ static int solve_camera_initjob(bContext *C, SolveCameraJob *scj, wmOperator *op scj->user = sc->user; scj->context = BKE_tracking_reconstruction_context_new(tracking, object, - settings->keyframe1, settings->keyframe2, width, height); + settings->keyframe1, settings->keyframe2, width, height); tracking->stats = MEM_callocN(sizeof(MovieTrackingStats), "solve camera stats"); @@ -1746,8 +1364,8 @@ static void solve_camera_startjob(void *scv, short *stop, short *do_update, floa { SolveCameraJob *scj = (SolveCameraJob *)scv; - BKE_tracking_solve_reconstruction(scj->context, stop, do_update, progress, - scj->stats_message, sizeof(scj->stats_message)); + BKE_tracking_reconstruction_solve(scj->context, stop, do_update, progress, + scj->stats_message, sizeof(scj->stats_message)); } static void solve_camera_freejob(void *scv) @@ -1764,7 +1382,7 @@ static void solve_camera_freejob(void *scv) return; } - solved = BKE_tracking_finish_reconstruction(scj->context, tracking); + solved = BKE_tracking_reconstruction_finish(scj->context, tracking); if (!solved) BKE_report(scj->reports, RPT_WARNING, "Some data failed to reconstruct, see console for details"); @@ -1780,7 +1398,7 @@ static void solve_camera_freejob(void *scv) /* set blender camera focal length so result would look fine there */ if (scene->camera) { - Camera *camera = (Camera*)scene->camera->data; + Camera *camera = (Camera *)scene->camera->data; int width, height; BKE_movieclip_get_size(clip, &scj->user, &width, &height); @@ -1834,7 +1452,7 @@ static int solve_camera_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(even SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingReconstruction *reconstruction = BKE_tracking_get_reconstruction(tracking); + MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(tracking); wmJob *steve; char error_msg[256] = "\0"; @@ -1916,8 +1534,8 @@ static int clear_solution_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); - MovieTrackingReconstruction *reconstruction = BKE_tracking_get_reconstruction(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); + MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(tracking); MovieTrackingTrack *track = tracksbase->first; while (track) { @@ -1964,19 +1582,20 @@ static int clear_track_path_exec(bContext *C, wmOperator *op) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTrackingTrack *track; - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); int action = RNA_enum_get(op->ptr, "action"); int clear_active = RNA_boolean_get(op->ptr, "clear_active"); + int framenr = ED_space_clip_clip_framenr(sc); if (clear_active) { - track = BKE_tracking_active_track(&clip->tracking); - BKE_tracking_clear_path(track, sc->user.framenr, action); + track = BKE_tracking_track_get_active(&clip->tracking); + BKE_tracking_track_path_clear(track, framenr, action); } else { track = tracksbase->first; while (track) { if (TRACK_VIEW_SELECTED(sc, track)) - BKE_tracking_clear_path(track, sc->user.framenr, action); + BKE_tracking_track_path_clear(track, framenr, action); track = track->next; } @@ -1990,10 +1609,10 @@ static int clear_track_path_exec(bContext *C, wmOperator *op) void CLIP_OT_clear_track_path(wmOperatorType *ot) { static EnumPropertyItem clear_path_actions[] = { - {TRACK_CLEAR_UPTO, "UPTO", 0, "Clear up-to", "Clear path up to current frame"}, - {TRACK_CLEAR_REMAINED, "REMAINED", 0, "Clear remained", "Clear path at remaining frames (after current)"}, - {TRACK_CLEAR_ALL, "ALL", 0, "Clear all", "Clear the whole path"}, - {0, NULL, 0, NULL, NULL} + {TRACK_CLEAR_UPTO, "UPTO", 0, "Clear up-to", "Clear path up to current frame"}, + {TRACK_CLEAR_REMAINED, "REMAINED", 0, "Clear remained", "Clear path at remaining frames (after current)"}, + {TRACK_CLEAR_ALL, "ALL", 0, "Clear all", "Clear the whole path"}, + {0, NULL, 0, NULL, NULL} }; /* identifiers */ @@ -2020,13 +1639,14 @@ static int disable_markers_exec(bContext *C, wmOperator *op) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track = tracksbase->first; int action = RNA_enum_get(op->ptr, "action"); + int framenr = ED_space_clip_clip_framenr(sc); while (track) { if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) { - MovieTrackingMarker *marker = BKE_tracking_ensure_marker(track, sc->user.framenr); + MovieTrackingMarker *marker = BKE_tracking_marker_ensure(track, framenr); if (action == 0) marker->flag |= MARKER_DISABLED; @@ -2048,10 +1668,10 @@ static int disable_markers_exec(bContext *C, wmOperator *op) void CLIP_OT_disable_markers(wmOperatorType *ot) { static EnumPropertyItem actions_items[] = { - {0, "DISABLE", 0, "Disable", "Disable selected markers"}, - {1, "ENABLE", 0, "Enable", "Enable selected markers"}, - {2, "TOGGLE", 0, "Toggle", "Toggle disabled flag for selected markers"}, - {0, NULL, 0, NULL, NULL} + {0, "DISABLE", 0, "Disable", "Disable selected markers"}, + {1, "ENABLE", 0, "Enable", "Enable selected markers"}, + {2, "TOGGLE", 0, "Toggle", "Toggle disabled flag for selected markers"}, + {0, NULL, 0, NULL, NULL} }; /* identifiers */ @@ -2101,7 +1721,7 @@ static Object *get_orientation_object(bContext *C) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingObject *tracking_object = BKE_tracking_active_object(tracking); + MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking); Object *object = NULL; if (tracking_object->flag & TRACKING_OBJECT_CAMERA) { @@ -2119,18 +1739,22 @@ static Object *get_orientation_object(bContext *C) static int set_orientation_poll(bContext *C) { - if (ED_space_clip_tracking_size_poll(C)) { + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc) { Scene *scene = CTX_data_scene(C); - SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); - MovieTracking *tracking = &clip->tracking; - MovieTrackingObject *tracking_object = BKE_tracking_active_object(tracking); - if (tracking_object->flag & TRACKING_OBJECT_CAMERA) { - return TRUE; - } - else { - return OBACT != NULL; + if (clip) { + MovieTracking *tracking = &clip->tracking; + MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking); + + if (tracking_object->flag & TRACKING_OBJECT_CAMERA) { + return TRUE; + } + else { + return OBACT != NULL; + } } } @@ -2141,7 +1765,7 @@ static int count_selected_bundles(bContext *C) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); MovieTrackingTrack *track; int tot = 0; @@ -2223,7 +1847,8 @@ static int set_origin_exec(bContext *C, wmOperator *op) int selected_count = count_selected_bundles(C); if (selected_count == 0) { - BKE_report(op->reports, RPT_ERROR, "At least one track with bundle should be selected to define origin position"); + BKE_report(op->reports, RPT_ERROR, + "At least one track with bundle should be selected to define origin position"); return OPERATOR_CANCELLED; } @@ -2235,9 +1860,9 @@ static int set_origin_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - tracking_object = BKE_tracking_active_object(tracking); + tracking_object = BKE_tracking_object_get_active(tracking); - tracksbase = BKE_tracking_object_tracks(tracking, tracking_object); + tracksbase = BKE_tracking_object_get_tracks(tracking, tracking_object); track = tracksbase->first; zero_v3(median); @@ -2250,7 +1875,7 @@ static int set_origin_exec(bContext *C, wmOperator *op) } mul_v3_fl(median, 1.0f / selected_count); - BKE_get_tracking_mat(scene, camera, mat); + BKE_tracking_get_camera_object_matrix(scene, camera, mat); mul_v3_m4v3(vec, mat, median); @@ -2293,16 +1918,16 @@ void CLIP_OT_set_origin(wmOperatorType *ot) /********************** set floor operator *********************/ static void set_axis(Scene *scene, Object *ob, MovieClip *clip, MovieTrackingObject *tracking_object, - MovieTrackingTrack *track, char axis) + MovieTrackingTrack *track, char axis) { Object *camera = get_camera_with_movieclip(scene, clip); int is_camera = tracking_object->flag & TRACKING_OBJECT_CAMERA; - int flip = FALSE; + int flip = FALSE; float mat[4][4], vec[3], obmat[4][4], dvec[3]; BKE_object_to_mat4(ob, obmat); - BKE_get_tracking_mat(scene, camera, mat); + BKE_tracking_get_camera_object_matrix(scene, camera, mat); mul_v3_m4v3(vec, mat, track->bundle_pos); copy_v3_v3(dvec, vec); @@ -2420,7 +2045,7 @@ static int set_plane_exec(bContext *C, wmOperator *op) float rot[4][4] = {{0.0f, 0.0f, -1.0f, 0.0f}, {0.0f, 1.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f, 0.0f}, - {0.0f, 0.0f, 0.0f, 1.0f}}; /* 90 degrees Y-axis rotation matrix */ + {0.0f, 0.0f, 0.0f, 1.0f}}; /* 90 degrees Y-axis rotation matrix */ if (count_selected_bundles(C) != 3) { BKE_report(op->reports, RPT_ERROR, "Three tracks with bundles are needed to orient the floor"); @@ -2428,9 +2053,9 @@ static int set_plane_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - tracking_object = BKE_tracking_active_object(tracking); - tracksbase = BKE_tracking_object_tracks(tracking, tracking_object); - act_track = BKE_tracking_active_track(tracking); + tracking_object = BKE_tracking_object_get_active(tracking); + tracksbase = BKE_tracking_object_get_tracks(tracking, tracking_object); + act_track = BKE_tracking_track_get_active(tracking); object = get_orientation_object(C); if (!object) { @@ -2439,7 +2064,7 @@ static int set_plane_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - BKE_get_tracking_mat(scene, camera, mat); + BKE_tracking_get_camera_object_matrix(scene, camera, mat); /* get 3 bundles to use as reference */ track = tracksbase->first; @@ -2518,9 +2143,9 @@ static int set_plane_exec(bContext *C, wmOperator *op) void CLIP_OT_set_plane(wmOperatorType *ot) { static EnumPropertyItem plane_items[] = { - {0, "FLOOR", 0, "Floor", "Set floor plane"}, - {1, "WALL", 0, "Wall", "Set wall plane"}, - {0, NULL, 0, NULL, NULL} + {0, "FLOOR", 0, "Floor", "Set floor plane"}, + {1, "WALL", 0, "Wall", "Set wall plane"}, + {0, NULL, 0, NULL, NULL} }; /* identifiers */ @@ -2546,7 +2171,7 @@ static int set_axis_exec(bContext *C, wmOperator *op) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingObject *tracking_object = BKE_tracking_active_object(tracking); + MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking); MovieTrackingTrack *track; Scene *scene = CTX_data_scene(C); Object *object; @@ -2566,7 +2191,7 @@ static int set_axis_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - tracksbase = BKE_tracking_object_tracks(tracking, tracking_object); + tracksbase = BKE_tracking_object_get_tracks(tracking, tracking_object); track = tracksbase->first; while (track) { @@ -2590,9 +2215,9 @@ static int set_axis_exec(bContext *C, wmOperator *op) void CLIP_OT_set_axis(wmOperatorType *ot) { static EnumPropertyItem axis_actions[] = { - {0, "X", 0, "X", "Align bundle align X axis"}, - {1, "Y", 0, "Y", "Align bundle align Y axis"}, - {0, NULL, 0, NULL, NULL} + {0, "X", 0, "X", "Align bundle align X axis"}, + {1, "Y", 0, "Y", "Align bundle align Y axis"}, + {0, NULL, 0, NULL, NULL} }; /* identifiers */ @@ -2618,12 +2243,12 @@ static int do_set_scale(bContext *C, wmOperator *op, int scale_solution) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingObject *tracking_object = BKE_tracking_active_object(tracking); + MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking); MovieTrackingTrack *track; Scene *scene = CTX_data_scene(C); Object *object = NULL; Object *camera = get_camera_with_movieclip(scene, clip); - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); int tot = 0; float vec[2][3], mat[4][4], scale; float dist = RNA_float_get(op->ptr, "distance"); @@ -2641,7 +2266,7 @@ static int do_set_scale(bContext *C, wmOperator *op, int scale_solution) return OPERATOR_CANCELLED; } - BKE_get_tracking_mat(scene, camera, mat); + BKE_tracking_get_camera_object_matrix(scene, camera, mat); track = tracksbase->first; while (track) { @@ -2722,23 +2347,27 @@ void CLIP_OT_set_scale(wmOperatorType *ot) /* properties */ RNA_def_float(ot->srna, "distance", 0.0f, -FLT_MAX, FLT_MAX, - "Distance", "Distance between selected tracks", -100.0f, 100.0f); + "Distance", "Distance between selected tracks", -100.0f, 100.0f); } /********************** set solution scale operator *********************/ static int set_solution_scale_poll(bContext *C) { - if (ED_space_clip_tracking_size_poll(C)) { - SpaceClip *sc = CTX_wm_space_clip(C); + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc) { MovieClip *clip = ED_space_clip(sc); - MovieTracking *tracking = &clip->tracking; - MovieTrackingObject *tracking_object = BKE_tracking_active_object(tracking); - return (tracking_object->flag & TRACKING_OBJECT_CAMERA) == 0; + if (clip) { + MovieTracking *tracking = &clip->tracking; + MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking); + + return (tracking_object->flag & TRACKING_OBJECT_CAMERA) == 0; + } } - return 0; + return FALSE; } static int set_solution_scale_exec(bContext *C, wmOperator *op) @@ -2774,7 +2403,7 @@ void CLIP_OT_set_solution_scale(wmOperatorType *ot) /* properties */ RNA_def_float(ot->srna, "distance", 0.0f, -FLT_MAX, FLT_MAX, - "Distance", "Distance between selected tracks", -100.0f, 100.0f); + "Distance", "Distance between selected tracks", -100.0f, 100.0f); } /********************** set principal center operator *********************/ @@ -2821,8 +2450,8 @@ static int hide_tracks_exec(bContext *C, wmOperator *op) MovieClip *clip = ED_space_clip(sc); MovieTrackingTrack *track; MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); int unselected; unselected = RNA_boolean_get(op->ptr, "unselected"); @@ -2879,7 +2508,7 @@ static int hide_tracks_clear_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track; track = tracksbase->first; @@ -2938,15 +2567,21 @@ static int detect_features_exec(bContext *C, wmOperator *op) int clip_flag = clip->flag & MCLIP_TIMECODE_FLAGS; ImBuf *ibuf = BKE_movieclip_get_ibuf_flag(clip, &sc->user, clip_flag, MOVIECLIP_CACHE_SKIP); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track = tracksbase->first; int placement = RNA_enum_get(op->ptr, "placement"); int margin = RNA_int_get(op->ptr, "margin"); int min_trackability = RNA_int_get(op->ptr, "min_trackability"); int min_distance = RNA_int_get(op->ptr, "min_distance"); int place_outside_layer = 0; + int framenr = ED_space_clip_clip_framenr(sc); bGPDlayer *layer = NULL; + if (!ibuf) { + BKE_report(op->reports, RPT_ERROR, "Feature detection requires valid clip frame"); + return OPERATOR_CANCELLED; + } + if (placement != 0) { layer = detect_get_layer(clip); place_outside_layer = placement == 2; @@ -2961,8 +2596,8 @@ static int detect_features_exec(bContext *C, wmOperator *op) track = track->next; } - BKE_tracking_detect_fast(tracking, tracksbase, ibuf, sc->user.framenr, margin, - min_trackability, min_distance, layer, place_outside_layer); + BKE_tracking_detect_fast(tracking, tracksbase, ibuf, framenr, margin, + min_trackability, min_distance, layer, place_outside_layer); IMB_freeImBuf(ibuf); @@ -2974,10 +2609,10 @@ static int detect_features_exec(bContext *C, wmOperator *op) void CLIP_OT_detect_features(wmOperatorType *ot) { static EnumPropertyItem placement_items[] = { - {0, "FRAME", 0, "Whole Frame", "Place markers across the whole frame"}, - {1, "INSIDE_GPENCIL", 0, "Inside grease pencil", "Place markers only inside areas outlined with grease pencil"}, - {2, "OUTSIDE_GPENCIL", 0, "Outside grease pencil", "Place markers only outside areas outlined with grease pencil"}, - {0, NULL, 0, NULL, NULL} + {0, "FRAME", 0, "Whole Frame", "Place markers across the whole frame"}, + {1, "INSIDE_GPENCIL", 0, "Inside grease pencil", "Place markers only inside areas outlined with grease pencil"}, + {2, "OUTSIDE_GPENCIL", 0, "Outside grease pencil", "Place markers only outside areas outlined with grease pencil"}, + {0, NULL, 0, NULL, NULL} }; /* identifiers */ @@ -2987,7 +2622,7 @@ void CLIP_OT_detect_features(wmOperatorType *ot) /* api callbacks */ ot->exec = detect_features_exec; - ot->poll = ED_space_clip_tracking_frame_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -3010,8 +2645,8 @@ static int frame_jump_exec(bContext *C, wmOperator *op) int pos = RNA_enum_get(op->ptr, "position"); int delta; - if (pos <= 1) { /* jump to path */ - track = BKE_tracking_active_track(&clip->tracking); + if (pos <= 1) { /* jump to path */ + track = BKE_tracking_track_get_active(&clip->tracking); if (!track) return OPERATOR_CANCELLED; @@ -3019,7 +2654,8 @@ static int frame_jump_exec(bContext *C, wmOperator *op) delta = pos == 1 ? 1 : -1; while (sc->user.framenr + delta >= SFRA && sc->user.framenr + delta <= EFRA) { - MovieTrackingMarker *marker = BKE_tracking_exact_marker(track, sc->user.framenr + delta); + int framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, sc->user.framenr + delta); + MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(track, framenr); if (!marker || marker->flag & MARKER_DISABLED) break; @@ -3027,11 +2663,11 @@ static int frame_jump_exec(bContext *C, wmOperator *op) sc->user.framenr += delta; } } - else { /* to to failed frame */ + else { /* to to failed frame */ if (clip->tracking.reconstruction.flag & TRACKING_RECONSTRUCTED) { - int a = sc->user.framenr; + int a = ED_space_clip_clip_framenr(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingObject *object = BKE_tracking_active_object(tracking); + MovieTrackingObject *object = BKE_tracking_object_get_active(tracking); delta = pos == 3 ? 1 : -1; @@ -3040,10 +2676,10 @@ static int frame_jump_exec(bContext *C, wmOperator *op) while (a + delta >= SFRA && a + delta <= EFRA) { MovieReconstructedCamera *cam; - cam = BKE_tracking_get_reconstructed_camera(tracking, object, a); + cam = BKE_tracking_camera_get_reconstructed(tracking, object, a); if (!cam) { - sc->user.framenr = a; + sc->user.framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, a); break; } @@ -3068,11 +2704,11 @@ static int frame_jump_exec(bContext *C, wmOperator *op) void CLIP_OT_frame_jump(wmOperatorType *ot) { static EnumPropertyItem position_items[] = { - {0, "PATHSTART", 0, "Path Start", "Jump to start of current path"}, - {1, "PATHEND", 0, "Path End", "Jump to end of current path"}, - {2, "FAILEDPREV", 0, "Previous Failed", "Jump to previous failed frame"}, - {2, "FAILNEXT", 0, "Next Failed", "Jump to next failed frame"}, - {0, NULL, 0, NULL, NULL} + {0, "PATHSTART", 0, "Path Start", "Jump to start of current path"}, + {1, "PATHEND", 0, "Path End", "Jump to end of current path"}, + {2, "FAILEDPREV", 0, "Previous Failed", "Jump to previous failed frame"}, + {2, "FAILNEXT", 0, "Next Failed", "Jump to next failed frame"}, + {0, NULL, 0, NULL, NULL} }; /* identifiers */ @@ -3098,10 +2734,10 @@ static int join_tracks_exec(bContext *C, wmOperator *op) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *act_track, *track, *next; - act_track = BKE_tracking_active_track(tracking); + act_track = BKE_tracking_track_get_active(tracking); if (!act_track) { BKE_report(op->reports, RPT_ERROR, "No active track to join to"); @@ -3113,12 +2749,12 @@ static int join_tracks_exec(bContext *C, wmOperator *op) next = track->next; if (TRACK_VIEW_SELECTED(sc, track) && track != act_track) { - BKE_tracking_join_tracks(act_track, track); + BKE_tracking_tracks_join(act_track, track); if (tracking->stabilization.rot_track == track) tracking->stabilization.rot_track = act_track; - BKE_tracking_free_track(track); + BKE_tracking_track_free(track); BLI_freelinkN(tracksbase, track); } @@ -3139,7 +2775,7 @@ void CLIP_OT_join_tracks(wmOperatorType *ot) /* api callbacks */ ot->exec = join_tracks_exec; - ot->poll = ED_space_clip_tracking_size_poll; + ot->poll = ED_space_clip_tracking_poll; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -3152,7 +2788,7 @@ static int lock_tracks_exec(bContext *C, wmOperator *op) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track = tracksbase->first; int action = RNA_enum_get(op->ptr, "action"); @@ -3176,10 +2812,10 @@ static int lock_tracks_exec(bContext *C, wmOperator *op) void CLIP_OT_lock_tracks(wmOperatorType *ot) { static EnumPropertyItem actions_items[] = { - {0, "LOCK", 0, "Lock", "Lock selected tracks"}, - {1, "UNLOCK", 0, "Unlock", "Unlock selected tracks"}, - {2, "TOGGLE", 0, "Toggle", "Toggle locked flag for selected tracks"}, - {0, NULL, 0, NULL, NULL} + {0, "LOCK", 0, "Lock", "Lock selected tracks"}, + {1, "UNLOCK", 0, "Unlock", "Unlock selected tracks"}, + {2, "TOGGLE", 0, "Toggle", "Toggle locked flag for selected tracks"}, + {0, NULL, 0, NULL, NULL} }; /* identifiers */ @@ -3205,8 +2841,8 @@ static int track_copy_color_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - MovieTrackingTrack *track, *act_track = BKE_tracking_active_track(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + MovieTrackingTrack *track, *act_track = BKE_tracking_track_get_active(tracking); if (!act_track) return OPERATOR_CANCELLED; @@ -3252,7 +2888,7 @@ static int stabilize_2d_add_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track; MovieTrackingStabilization *stab = &tracking->stabilization; int update = 0; @@ -3302,7 +2938,7 @@ static int stabilize_2d_remove_exec(bContext *C, wmOperator *UNUSED(op)) MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; MovieTrackingStabilization *stab = &tracking->stabilization; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track; int a = 0, update = 0; @@ -3361,14 +2997,14 @@ static int stabilize_2d_select_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); MovieTrackingTrack *track; int update = 0; track = tracksbase->first; while (track) { if (track->flag & TRACK_USE_2D_STAB) { - BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, 0); + BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); update = 1; } @@ -3404,7 +3040,7 @@ static int stabilize_2d_set_rotation_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); if (act_track) { MovieTrackingStabilization *stab = &tracking->stabilization; @@ -3444,7 +3080,7 @@ static int is_track_clean(MovieTrackingTrack *track, int frames, int del) int markersnr = track->markersnr; if (del) - new_markers = MEM_callocN(markersnr*sizeof(MovieTrackingMarker), "track cleaned markers"); + new_markers = MEM_callocN(markersnr * sizeof(MovieTrackingMarker), "track cleaned markers"); for (a = 0; a < markersnr; a++) { int end = 0; @@ -3534,8 +3170,8 @@ static int clean_tracks_exec(bContext *C, wmOperator *op) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = BKE_tracking_get_tracks(tracking); - MovieTrackingTrack *track, *next, *act_track = BKE_tracking_active_track(tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + MovieTrackingTrack *track, *next, *act_track = BKE_tracking_track_get_active(tracking); int frames = RNA_int_get(op->ptr, "frames"); int action = RNA_enum_get(op->ptr, "action"); float error = RNA_float_get(op->ptr, "error"); @@ -3551,17 +3187,17 @@ static int clean_tracks_exec(bContext *C, wmOperator *op) int ok = 1; ok = (is_track_clean(track, frames, action == TRACKING_CLEAN_DELETE_SEGMENT)) && - (error == 0.0f || (track->flag & TRACK_HAS_BUNDLE) == 0 || track->error < error); + (error == 0.0f || (track->flag & TRACK_HAS_BUNDLE) == 0 || track->error < error); if (!ok) { if (action == TRACKING_CLEAN_SELECT) { - BKE_tracking_track_flag(track, TRACK_AREA_ALL, SELECT, 0); + BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); } else if (action == TRACKING_CLEAN_DELETE_TRACK) { if (track == act_track) clip->tracking.act_track = NULL; - BKE_tracking_free_track(track); + BKE_tracking_track_free(track); BLI_freelinkN(tracksbase, track); track = NULL; } @@ -3571,7 +3207,7 @@ static int clean_tracks_exec(bContext *C, wmOperator *op) if (track == act_track) clip->tracking.act_track = NULL; - BKE_tracking_free_track(track); + BKE_tracking_track_free(track); BLI_freelinkN(tracksbase, track); } } @@ -3605,10 +3241,10 @@ static int clean_tracks_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(even void CLIP_OT_clean_tracks(wmOperatorType *ot) { static EnumPropertyItem actions_items[] = { - {TRACKING_CLEAN_SELECT, "SELECT", 0, "Select", "Select unclean tracks"}, - {TRACKING_CLEAN_DELETE_TRACK, "DELETE_TRACK", 0, "Delete Track", "Delete unclean tracks"}, - {TRACKING_CLEAN_DELETE_SEGMENT, "DELETE_SEGMENTS", 0, "Delete Segments", "Delete unclean segments of tracks"}, - {0, NULL, 0, NULL, NULL} + {TRACKING_CLEAN_SELECT, "SELECT", 0, "Select", "Select unclean tracks"}, + {TRACKING_CLEAN_DELETE_TRACK, "DELETE_TRACK", 0, "Delete Track", "Delete unclean tracks"}, + {TRACKING_CLEAN_DELETE_SEGMENT, "DELETE_SEGMENTS", 0, "Delete Segments", "Delete unclean segments of tracks"}, + {0, NULL, 0, NULL, NULL} }; /* identifiers */ @@ -3640,7 +3276,7 @@ static int tracking_object_new_exec(bContext *C, wmOperator *UNUSED(op)) MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - BKE_tracking_new_object(tracking, "Object"); + BKE_tracking_object_add(tracking, "Object"); WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip); @@ -3671,14 +3307,14 @@ static int tracking_object_remove_exec(bContext *C, wmOperator *op) MovieTracking *tracking = &clip->tracking; MovieTrackingObject *object; - object = BKE_tracking_active_object(tracking); + object = BKE_tracking_object_get_active(tracking); if (object->flag & TRACKING_OBJECT_CAMERA) { BKE_report(op->reports, RPT_WARNING, "Object used for camera tracking can't be deleted"); return OPERATOR_CANCELLED; } - BKE_tracking_remove_object(tracking, object); + BKE_tracking_object_delete(tracking, object); WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip); @@ -3707,7 +3343,7 @@ static int copy_tracks_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingObject *object = BKE_tracking_active_object(tracking); + MovieTrackingObject *object = BKE_tracking_object_get_active(tracking); clear_invisible_track_selection(sc, clip); @@ -3747,7 +3383,7 @@ static int paste_tracks_exec(bContext *C, wmOperator *UNUSED(op)) SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; - MovieTrackingObject *object = BKE_tracking_active_object(tracking); + MovieTrackingObject *object = BKE_tracking_object_get_active(tracking); BKE_tracking_clipboard_paste_tracks(tracking, object); diff --git a/source/blender/editors/space_clip/tracking_select.c b/source/blender/editors/space_clip/tracking_select.c new file mode 100644 index 00000000000..640af498c1f --- /dev/null +++ b/source/blender/editors/space_clip/tracking_select.c @@ -0,0 +1,783 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2011 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/space_clip/tracking_select.c + * \ingroup spclip + */ + +#include "MEM_guardedalloc.h" + +#include "DNA_camera_types.h" +#include "DNA_constraint_types.h" +#include "DNA_gpencil_types.h" +#include "DNA_movieclip_types.h" +#include "DNA_object_types.h" /* SELECT */ +#include "DNA_scene_types.h" + +#include "BLI_utildefines.h" +#include "BLI_math.h" +#include "BLI_listbase.h" +#include "BLI_rect.h" +#include "BLI_lasso.h" +#include "BLI_blenlib.h" + +#include "BKE_main.h" +#include "BKE_context.h" +#include "BKE_constraint.h" +#include "BKE_movieclip.h" +#include "BKE_tracking.h" +#include "BKE_global.h" +#include "BKE_depsgraph.h" +#include "BKE_object.h" +#include "BKE_report.h" +#include "BKE_scene.h" +#include "BKE_library.h" +#include "BKE_sound.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_screen.h" +#include "ED_clip.h" +#include "ED_keyframing.h" + +#include "IMB_imbuf_types.h" +#include "IMB_imbuf.h" + +#include "UI_interface.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "PIL_time.h" + +#include "UI_view2d.h" + +#include "clip_intern.h" // own include + +static float dist_to_crns(float co[2], float pos[2], float crns[4][2]); + +/********************** mouse select operator *********************/ + +static int mouse_on_side(float co[2], float x1, float y1, float x2, float y2, float epsx, float epsy) +{ + if (x1 > x2) + + SWAP(float, x1, x2); + + if (y1 > y2) + SWAP(float, y1, y2); + + return (co[0] >= x1 - epsx && co[0] <= x2 + epsx) && (co[1] >= y1 - epsy && co[1] <= y2 + epsy); +} + +static int mouse_on_rect(float co[2], float pos[2], float min[2], float max[2], float epsx, float epsy) +{ + return mouse_on_side(co, pos[0] + min[0], pos[1] + min[1], pos[0] + max[0], pos[1] + min[1], epsx, epsy) || + mouse_on_side(co, pos[0] + min[0], pos[1] + min[1], pos[0] + min[0], pos[1] + max[1], epsx, epsy) || + mouse_on_side(co, pos[0] + min[0], pos[1] + max[1], pos[0] + max[0], pos[1] + max[1], epsx, epsy) || + mouse_on_side(co, pos[0] + max[0], pos[1] + min[1], pos[0] + max[0], pos[1] + max[1], epsx, epsy); +} + +static int mouse_on_crns(float co[2], float pos[2], float crns[4][2], float epsx, float epsy) +{ + float dist = dist_to_crns(co, pos, crns); + + return dist < MAX2(epsx, epsy); +} + +static int track_mouse_area(SpaceClip *sc, float co[2], MovieTrackingTrack *track) +{ + int framenr = ED_space_clip_clip_framenr(sc); + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + float pat_min[2], pat_max[2]; + float epsx, epsy; + int width, height; + + ED_space_clip_size(sc, &width, &height); + + BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max); + + epsx = MIN4(pat_min[0] - marker->search_min[0], marker->search_max[0] - pat_max[0], + fabsf(pat_min[0]), fabsf(pat_max[0])) / 2; + epsy = MIN4(pat_min[1] - marker->search_min[1], marker->search_max[1] - pat_max[1], + fabsf(pat_min[1]), fabsf(pat_max[1])) / 2; + + epsx = MAX2(epsx, 2.0f / width); + epsy = MAX2(epsy, 2.0f / height); + + if (sc->flag & SC_SHOW_MARKER_SEARCH) { + if (mouse_on_rect(co, marker->pos, marker->search_min, marker->search_max, epsx, epsy)) + return TRACK_AREA_SEARCH; + } + + if ((marker->flag & MARKER_DISABLED) == 0) { + if (sc->flag & SC_SHOW_MARKER_PATTERN) + if (mouse_on_crns(co, marker->pos, marker->pattern_corners, epsx, epsy)) + return TRACK_AREA_PAT; + + epsx = 12.0f / width; + epsy = 12.0f / height; + + if (fabsf(co[0] - marker->pos[0] - track->offset[0]) < epsx && + fabsf(co[1] - marker->pos[1] - track->offset[1]) <= epsy) + { + return TRACK_AREA_POINT; + } + } + + return TRACK_AREA_NONE; +} + +static float dist_to_rect(float co[2], float pos[2], float min[2], float max[2]) +{ + float d1, d2, d3, d4; + float p[2] = {co[0] - pos[0], co[1] - pos[1]}; + float v1[2] = {min[0], min[1]}, v2[2] = {max[0], min[1]}; + float v3[2] = {max[0], max[1]}, v4[2] = {min[0], max[1]}; + + d1 = dist_to_line_segment_v2(p, v1, v2); + d2 = dist_to_line_segment_v2(p, v2, v3); + d3 = dist_to_line_segment_v2(p, v3, v4); + d4 = dist_to_line_segment_v2(p, v4, v1); + + return MIN4(d1, d2, d3, d4); +} + +static float dist_to_crns(float co[2], float pos[2], float crns[4][2]) +{ + float d1, d2, d3, d4; + float p[2] = {co[0] - pos[0], co[1] - pos[1]}; + float *v1 = crns[0], *v2 = crns[1]; + float *v3 = crns[2], *v4 = crns[3]; + + d1 = dist_to_line_segment_v2(p, v1, v2); + d2 = dist_to_line_segment_v2(p, v2, v3); + d3 = dist_to_line_segment_v2(p, v3, v4); + d4 = dist_to_line_segment_v2(p, v4, v1); + + return MIN4(d1, d2, d3, d4); +} + +static MovieTrackingTrack *find_nearest_track(SpaceClip *sc, ListBase *tracksbase, float co[2]) +{ + MovieTrackingTrack *track = NULL, *cur; + float mindist = 0.0f; + int framenr = ED_space_clip_clip_framenr(sc); + + cur = tracksbase->first; + while (cur) { + MovieTrackingMarker *marker = BKE_tracking_marker_get(cur, framenr); + + if (((cur->flag & TRACK_HIDDEN) == 0) && MARKER_VISIBLE(sc, cur, marker)) { + float dist, d1, d2 = FLT_MAX, d3 = FLT_MAX; + + /* distance to marker point */ + d1 = sqrtf((co[0] - marker->pos[0] - cur->offset[0]) * (co[0] - marker->pos[0] - cur->offset[0]) + + (co[1] - marker->pos[1] - cur->offset[1]) * (co[1] - marker->pos[1] - cur->offset[1])); + + /* distance to pattern boundbox */ + if (sc->flag & SC_SHOW_MARKER_PATTERN) + d2 = dist_to_crns(co, marker->pos, marker->pattern_corners); + + /* distance to search boundbox */ + if (sc->flag & SC_SHOW_MARKER_SEARCH && TRACK_VIEW_SELECTED(sc, cur)) + d3 = dist_to_rect(co, marker->pos, marker->search_min, marker->search_max); + + /* choose minimal distance. useful for cases of overlapped markers. */ + dist = MIN3(d1, d2, d3); + + if (track == NULL || dist < mindist) { + track = cur; + mindist = dist; + } + } + + cur = cur->next; + } + + return track; +} + +static int mouse_select(bContext *C, float co[2], int extend) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + MovieTracking *tracking = &clip->tracking; + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); + MovieTrackingTrack *track = NULL; /* selected marker */ + + track = find_nearest_track(sc, tracksbase, co); + + if (track) { + int area = track_mouse_area(sc, co, track); + + if (!extend || !TRACK_VIEW_SELECTED(sc, track)) + area = TRACK_AREA_ALL; + + if (extend && TRACK_AREA_SELECTED(track, area)) { + if (track == act_track) + BKE_tracking_track_deselect(track, area); + else + clip->tracking.act_track = track; + } + else { + if (area == TRACK_AREA_POINT) + area = TRACK_AREA_ALL; + + BKE_tracking_track_select(tracksbase, track, area, extend); + clip->tracking.act_track = track; + } + } + + if (!extend) { + sc->xlockof = 0.0f; + sc->ylockof = 0.0f; + } + + BKE_tracking_dopesheet_tag_update(tracking); + + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); + + return OPERATOR_FINISHED; +} + +static int select_exec(bContext *C, wmOperator *op) +{ + float co[2]; + int extend; + + RNA_float_get_array(op->ptr, "location", co); + extend = RNA_boolean_get(op->ptr, "extend"); + + return mouse_select(C, co, extend); +} + +static int select_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + float co[2]; + int extend = RNA_boolean_get(op->ptr, "extend"); + + if (!extend) { + MovieTrackingTrack *track = tracking_marker_check_slide(C, event, NULL, NULL, NULL); + + if (track) { + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + + clip->tracking.act_track = track; + + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); + + return OPERATOR_PASS_THROUGH; + } + } + + ED_clip_mouse_pos(C, event, co); + RNA_float_set_array(op->ptr, "location", co); + + return select_exec(C, op); +} + +void CLIP_OT_select(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Select"; + ot->description = "Select tracking markers"; + ot->idname = "CLIP_OT_select"; + + /* api callbacks */ + ot->exec = select_exec; + ot->invoke = select_invoke; + //ot->poll = ED_space_clip_tracking_poll; // so mask view can Ctrl+RMB markers + ot->poll = ED_space_clip_view_clip_poll; + + /* flags */ + ot->flag = OPTYPE_UNDO; + + /* properties */ + RNA_def_boolean(ot->srna, "extend", 0, + "Extend", "Extend selection rather than clearing the existing selection"); + RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MAX, FLT_MAX, + "Location", "Mouse location in normalized coordinates, 0.0 to 1.0 is within the image bounds", -100.0f, 100.0f); +} + +/********************** border select operator *********************/ + +static int border_select_exec(bContext *C, wmOperator *op) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + MovieTracking *tracking = &clip->tracking; + MovieTrackingTrack *track; + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + rcti rect; + rctf rectf; + int change = FALSE, mode, extend; + int framenr = ED_space_clip_clip_framenr(sc); + + /* get rectangle from operator */ + rect.xmin = RNA_int_get(op->ptr, "xmin"); + rect.ymin = RNA_int_get(op->ptr, "ymin"); + rect.xmax = RNA_int_get(op->ptr, "xmax"); + rect.ymax = RNA_int_get(op->ptr, "ymax"); + + ED_clip_point_stable_pos(C, rect.xmin, rect.ymin, &rectf.xmin, &rectf.ymin); + ED_clip_point_stable_pos(C, rect.xmax, rect.ymax, &rectf.xmax, &rectf.ymax); + + mode = RNA_int_get(op->ptr, "gesture_mode"); + extend = RNA_boolean_get(op->ptr, "extend"); + + /* do actual selection */ + track = tracksbase->first; + while (track) { + if ((track->flag & TRACK_HIDDEN) == 0) { + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + + if (MARKER_VISIBLE(sc, track, marker)) { + if (BLI_in_rctf(&rectf, marker->pos[0], marker->pos[1])) { + if (mode == GESTURE_MODAL_SELECT) + BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); + else + BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); + } + else if (!extend) { + BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); + } + + change = TRUE; + } + } + + track = track->next; + } + + if (change) { + BKE_tracking_dopesheet_tag_update(tracking); + + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void CLIP_OT_select_border(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Border Select"; + ot->description = "Select markers using border selection"; + ot->idname = "CLIP_OT_select_border"; + + /* api callbacks */ + ot->invoke = WM_border_select_invoke; + ot->exec = border_select_exec; + ot->modal = WM_border_select_modal; + ot->poll = ED_space_clip_tracking_poll; + + /* flags */ + ot->flag = OPTYPE_UNDO; + + /* properties */ + WM_operator_properties_gesture_border(ot, TRUE); +} + +/********************** lasso select operator *********************/ + +static int do_lasso_select_marker(bContext *C, int mcords[][2], short moves, short select) +{ + ARegion *ar = CTX_wm_region(C); + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + MovieTracking *tracking = &clip->tracking; + MovieTrackingTrack *track; + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + rcti rect; + int change = FALSE; + int framenr = ED_space_clip_clip_framenr(sc); + + /* get rectangle from operator */ + BLI_lasso_boundbox(&rect, mcords, moves); + + /* do actual selection */ + track = tracksbase->first; + while (track) { + if ((track->flag & TRACK_HIDDEN) == 0) { + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + + if (MARKER_VISIBLE(sc, track, marker)) { + float screen_co[2]; + + /* marker in screen coords */ + ED_clip_point_stable_pos__reverse(sc, ar, marker->pos, screen_co); + + if (BLI_in_rcti(&rect, screen_co[0], screen_co[1]) && + BLI_lasso_is_point_inside(mcords, moves, screen_co[0], screen_co[1], V2D_IS_CLIPPED)) + { + if (select) + BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); + else + BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); + } + + change = TRUE; + } + } + + track = track->next; + } + + if (change) { + BKE_tracking_dopesheet_tag_update(tracking); + + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); + } + + return change; +} + +static int clip_lasso_select_exec(bContext *C, wmOperator *op) +{ + int mcords_tot; + int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot); + + if (mcords) { + short select; + + select = !RNA_boolean_get(op->ptr, "deselect"); + do_lasso_select_marker(C, mcords, mcords_tot, select); + + MEM_freeN(mcords); + + return OPERATOR_FINISHED; + } + return OPERATOR_PASS_THROUGH; +} + +void CLIP_OT_select_lasso(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Lasso Select"; + ot->description = "Select markers using lasso selection"; + ot->idname = "CLIP_OT_select_lasso"; + + /* api callbacks */ + ot->invoke = WM_gesture_lasso_invoke; + ot->modal = WM_gesture_lasso_modal; + ot->exec = clip_lasso_select_exec; + ot->poll = ED_space_clip_tracking_poll; + ot->cancel = WM_gesture_lasso_cancel; + + /* flags */ + ot->flag = OPTYPE_UNDO; + + /* properties */ + RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", ""); + RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Deselect rather than select items"); + RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection instead of deselecting everything first"); +} + +/********************** circle select operator *********************/ + +static int marker_inside_ellipse(MovieTrackingMarker *marker, float offset[2], float ellipse[2]) +{ + /* normalized ellipse: ell[0] = scaleX, ell[1] = scaleY */ + float x, y; + + x = (marker->pos[0] - offset[0]) * ellipse[0]; + y = (marker->pos[1] - offset[1]) * ellipse[1]; + + return x * x + y * y < 1.0f; +} + +static int circle_select_exec(bContext *C, wmOperator *op) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + ARegion *ar = CTX_wm_region(C); + MovieTracking *tracking = &clip->tracking; + MovieTrackingTrack *track; + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + int x, y, radius, width, height, mode, change = FALSE; + float zoomx, zoomy, offset[2], ellipse[2]; + int framenr = ED_space_clip_clip_framenr(sc); + + /* get operator properties */ + x = RNA_int_get(op->ptr, "x"); + y = RNA_int_get(op->ptr, "y"); + radius = RNA_int_get(op->ptr, "radius"); + + mode = RNA_int_get(op->ptr, "gesture_mode"); + + /* compute ellipse and position in unified coordinates */ + ED_space_clip_size(sc, &width, &height); + ED_space_clip_zoom(sc, ar, &zoomx, &zoomy); + + ellipse[0] = width * zoomx / radius; + ellipse[1] = height * zoomy / radius; + + ED_clip_point_stable_pos(C, x, y, &offset[0], &offset[1]); + + /* do selection */ + track = tracksbase->first; + while (track) { + if ((track->flag & TRACK_HIDDEN) == 0) { + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + + if (MARKER_VISIBLE(sc, track, marker) && marker_inside_ellipse(marker, offset, ellipse)) { + if (mode == GESTURE_MODAL_SELECT) + BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); + else + BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); + + change = TRUE; + } + } + + track = track->next; + } + + if (change) { + BKE_tracking_dopesheet_tag_update(tracking); + + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void CLIP_OT_select_circle(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Circle Select"; + ot->description = "Select markers using circle selection"; + ot->idname = "CLIP_OT_select_circle"; + + /* api callbacks */ + ot->invoke = WM_gesture_circle_invoke; + ot->modal = WM_gesture_circle_modal; + ot->exec = circle_select_exec; + ot->poll = ED_space_clip_tracking_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "radius", 0, INT_MIN, INT_MAX, "Radius", "", INT_MIN, INT_MAX); + RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); +} + +/********************** select all operator *********************/ + +static int select_all_exec(bContext *C, wmOperator *op) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + MovieTracking *tracking = &clip->tracking; + MovieTrackingTrack *track = NULL; /* selected track */ + MovieTrackingMarker *marker; + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + int action = RNA_enum_get(op->ptr, "action"); + int framenr = ED_space_clip_clip_framenr(sc); + int has_selection = FALSE; + + if (action == SEL_TOGGLE) { + action = SEL_SELECT; + track = tracksbase->first; + while (track) { + if (TRACK_VIEW_SELECTED(sc, track)) { + marker = BKE_tracking_marker_get(track, framenr); + + if (MARKER_VISIBLE(sc, track, marker)) { + action = SEL_DESELECT; + break; + } + } + + track = track->next; + } + } + + track = tracksbase->first; + while (track) { + if ((track->flag & TRACK_HIDDEN) == 0) { + marker = BKE_tracking_marker_get(track, framenr); + + if (MARKER_VISIBLE(sc, track, marker)) { + switch (action) { + case SEL_SELECT: + track->flag |= SELECT; + track->pat_flag |= SELECT; + track->search_flag |= SELECT; + break; + case SEL_DESELECT: + track->flag &= ~SELECT; + track->pat_flag &= ~SELECT; + track->search_flag &= ~SELECT; + break; + case SEL_INVERT: + track->flag ^= SELECT; + track->pat_flag ^= SELECT; + track->search_flag ^= SELECT; + break; + } + } + } + + if (TRACK_VIEW_SELECTED(sc, track)) + has_selection = TRUE; + + track = track->next; + } + + if (!has_selection) + sc->flag &= ~SC_LOCK_SELECTION; + + BKE_tracking_dopesheet_tag_update(tracking); + + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); + + return OPERATOR_FINISHED; +} + +void CLIP_OT_select_all(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "(De)select All"; + ot->description = "Change selection of all tracking markers"; + ot->idname = "CLIP_OT_select_all"; + + /* api callbacks */ + ot->exec = select_all_exec; + ot->poll = ED_space_clip_tracking_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + WM_operator_properties_select_all(ot); +} + +/********************** select grouped operator *********************/ + +static int select_groped_exec(bContext *C, wmOperator *op) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + MovieClip *clip = ED_space_clip(sc); + MovieTrackingTrack *track; + MovieTrackingMarker *marker; + MovieTracking *tracking = &clip->tracking; + ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); + int group = RNA_enum_get(op->ptr, "group"); + int framenr = ED_space_clip_clip_framenr(sc); + + track = tracksbase->first; + while (track) { + int ok = FALSE; + + marker = BKE_tracking_marker_get(track, framenr); + + if (group == 0) { /* Keyframed */ + ok = marker->framenr == framenr && (marker->flag & MARKER_TRACKED) == 0; + } + else if (group == 1) { /* Estimated */ + ok = marker->framenr != framenr; + } + else if (group == 2) { /* tracked */ + ok = marker->framenr == framenr && (marker->flag & MARKER_TRACKED); + } + else if (group == 3) { /* locked */ + ok = track->flag & TRACK_LOCKED; + } + else if (group == 4) { /* disabled */ + ok = marker->flag & MARKER_DISABLED; + } + else if (group == 5) { /* color */ + MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking); + + if (act_track) { + ok = (track->flag & TRACK_CUSTOMCOLOR) == (act_track->flag & TRACK_CUSTOMCOLOR); + + if (ok && track->flag & TRACK_CUSTOMCOLOR) + ok = equals_v3v3(track->color, act_track->color); + } + } + else if (group == 6) { /* failed */ + ok = (track->flag & TRACK_HAS_BUNDLE) == 0; + } + + if (ok) { + track->flag |= SELECT; + if (sc->flag & SC_SHOW_MARKER_PATTERN) + track->pat_flag |= SELECT; + if (sc->flag & SC_SHOW_MARKER_SEARCH) + track->search_flag |= SELECT; + } + + track = track->next; + } + + BKE_tracking_dopesheet_tag_update(tracking); + + WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, clip); + + return OPERATOR_FINISHED; +} + +void CLIP_OT_select_grouped(wmOperatorType *ot) +{ + static EnumPropertyItem select_group_items[] = { + {0, "KEYFRAMED", 0, "Keyframed tracks", "Select all keyframed tracks"}, + {1, "ESTIMATED", 0, "Estimated tracks", "Select all estimated tracks"}, + {2, "TRACKED", 0, "Tracked tracks", "Select all tracked tracks"}, + {3, "LOCKED", 0, "Locked tracks", "Select all locked tracks"}, + {4, "DISABLED", 0, "Disabled tracks", "Select all disabled tracks"}, + {5, "COLOR", 0, "Tracks with same color", "Select all tracks with same color as active track"}, + {6, "FAILED", 0, "Failed Tracks", "Select all tracks which failed to be reconstructed"}, + {0, NULL, 0, NULL, NULL} + }; + + /* identifiers */ + ot->name = "Select Grouped"; + ot->description = "Select all tracks from specified group"; + ot->idname = "CLIP_OT_select_grouped"; + + /* api callbacks */ + ot->exec = select_groped_exec; + ot->poll = ED_space_clip_tracking_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* proeprties */ + RNA_def_enum(ot->srna, "group", select_group_items, TRACK_CLEAR_REMAINED, "Action", "Clear action to execute"); +} diff --git a/source/blender/editors/space_console/console_intern.h b/source/blender/editors/space_console/console_intern.h index c0abd094e62..3d30dcad710 100644 --- a/source/blender/editors/space_console/console_intern.h +++ b/source/blender/editors/space_console/console_intern.h @@ -54,6 +54,9 @@ void CONSOLE_OT_move(struct wmOperatorType *ot); void CONSOLE_OT_delete(struct wmOperatorType *ot); void CONSOLE_OT_insert(struct wmOperatorType *ot); +void CONSOLE_OT_indent(struct wmOperatorType *ot); +void CONSOLE_OT_unindent(struct wmOperatorType *ot); + void CONSOLE_OT_history_append(struct wmOperatorType *ot); void CONSOLE_OT_scrollback_append(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index 5ed384d22af..7efcbcceb3c 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -364,9 +364,8 @@ static int console_insert_exec(bContext *C, wmOperator *op) char *str = RNA_string_get_alloc(op->ptr, "text", NULL, 0); int len; - // XXX, alligned tab key hack if (str[0] == '\t' && str[1] == '\0') { - len = TAB_LENGTH - (ci->cursor % TAB_LENGTH); + len = TAB_LENGTH; MEM_freeN(str); str = MEM_mallocN(len + 1, "insert_exec"); memset(str, ' ', len); @@ -430,6 +429,95 @@ void CONSOLE_OT_insert(wmOperatorType *ot) RNA_def_property_flag(prop, PROP_SKIP_SAVE); } +static int console_indent_exec(bContext *C, wmOperator *UNUSED(op)) +{ + SpaceConsole *sc = CTX_wm_space_console(C); + ARegion *ar = CTX_wm_region(C); + ConsoleLine *ci = console_history_verify(C); + int spaces; + int len; + + for (spaces = 0; spaces < ci->len; spaces++) { + if (ci->line[spaces] != ' ') + break; + } + + len = TAB_LENGTH - spaces % TAB_LENGTH; + + console_line_verify_length(ci, ci->len + len); + + memmove(ci->line + len, ci->line, ci->len); + memset(ci->line, ' ', len); + ci->len += len; + console_line_cursor_set(ci, ci->cursor + len); + + console_textview_update_rect(sc, ar); + ED_area_tag_redraw(CTX_wm_area(C)); + + console_scroll_bottom(ar); + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_indent(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Indent"; + ot->description = "Add 4 spaces at line beginning"; + ot->idname = "CONSOLE_OT_indent"; + + /* api callbacks */ + ot->exec = console_indent_exec; + ot->poll = ED_operator_console_active; +} + +static int console_unindent_exec(bContext *C, wmOperator *UNUSED(op)) +{ + SpaceConsole *sc = CTX_wm_space_console(C); + ARegion *ar = CTX_wm_region(C); + ConsoleLine *ci = console_history_verify(C); + int spaces; + int len; + + for (spaces = 0; spaces < ci->len; spaces++) { + if (ci->line[spaces] != ' ') + break; + } + + if (spaces == 0) + return OPERATOR_CANCELLED; + + len = spaces % TAB_LENGTH; + if (len == 0) + len = TAB_LENGTH; + + console_line_verify_length(ci, ci->len - len); + + memmove(ci->line, ci->line + len, (ci->len - len) + 1); + ci->len -= len; + console_line_cursor_set(ci, ci->cursor - len); + + //console_select_offset(sc, -4); + + console_textview_update_rect(sc, ar); + ED_area_tag_redraw(CTX_wm_area(C)); + + console_scroll_bottom(ar); + + return OPERATOR_FINISHED; +} + +void CONSOLE_OT_unindent(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Unindent"; + ot->description = "Delete 4 spaces from line beginning"; + ot->idname = "CONSOLE_OT_unindent"; + + /* api callbacks */ + ot->exec = console_unindent_exec; + ot->poll = ED_operator_console_active; +} static EnumPropertyItem console_delete_type_items[] = { {DEL_NEXT_CHAR, "NEXT_CHARACTER", 0, "Next Character", ""}, @@ -757,7 +845,8 @@ void CONSOLE_OT_scrollback_append(wmOperatorType *ot) {CONSOLE_LINE_INPUT, "INPUT", 0, "Input", ""}, {CONSOLE_LINE_INFO, "INFO", 0, "Information", ""}, {CONSOLE_LINE_ERROR, "ERROR", 0, "Error", ""}, - {0, NULL, 0, NULL, NULL}}; + {0, NULL, 0, NULL, NULL} + }; /* identifiers */ ot->name = "Scrollback Append"; diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index a25606db2b3..460b31d69bd 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -246,6 +246,9 @@ static void console_operatortypes(void) WM_operatortype_append(CONSOLE_OT_move); WM_operatortype_append(CONSOLE_OT_delete); WM_operatortype_append(CONSOLE_OT_insert); + + WM_operatortype_append(CONSOLE_OT_indent); + WM_operatortype_append(CONSOLE_OT_unindent); /* for use by python only */ WM_operatortype_append(CONSOLE_OT_history_append); @@ -332,7 +335,11 @@ static void console_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "CONSOLE_OT_select_set", LEFTMOUSE, KM_PRESS, 0, 0); - RNA_string_set(WM_keymap_add_item(keymap, "CONSOLE_OT_insert", TABKEY, KM_PRESS, 0, 0)->ptr, "text", "\t"); /* fake tabs */ + RNA_string_set(WM_keymap_add_item(keymap, "CONSOLE_OT_insert", TABKEY, KM_PRESS, KM_CTRL, 0)->ptr, "text", "\t"); /* fake tabs */ + + WM_keymap_add_item(keymap, "CONSOLE_OT_indent", TABKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CONSOLE_OT_unindent", TABKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "CONSOLE_OT_insert", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last! } diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index d84214413da..a535e888156 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -102,8 +102,7 @@ typedef struct ThumbnailJob { ReportList reports; } ThumbnailJob; -typedef struct FileList -{ +typedef struct FileList { struct direntry *filelist; int *fidx; int numfiles; @@ -124,8 +123,7 @@ typedef struct FileList } FileList; -typedef struct FolderList -{ +typedef struct FolderList { struct FolderList *next, *prev; char *foldername; } FolderList; diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h index fac6a387b9f..7a37c5fb3c5 100644 --- a/source/blender/editors/space_file/filelist.h +++ b/source/blender/editors/space_file/filelist.h @@ -53,8 +53,7 @@ typedef enum FileSelType { FILE_SEL_TOGGLE = 2 } FileSelType; -typedef enum FileCheckType -{ +typedef enum FileCheckType { CHECK_DIRS = 1, CHECK_FILES = 2, CHECK_ALL = 3 diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 4b5f4f5cc2e..dbc66b81874 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -684,9 +684,16 @@ static short paste_graph_keys(bAnimContext *ac, ListBase anim_data = {NULL, NULL}; int filter, ok = 0; - /* filter data */ - filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_CURVE_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS); - ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); + /* filter data + * - First time we try to filter more strictly, allowing only selected channels + * to allow copying animation between channels + * - Second time, we loosen things up if nothing was found the first time, allowing + * users to just paste keyframes back into the original curve again [#31670] + */ + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_CURVE_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS); + + if (ANIM_animdata_filter(ac, &anim_data, filter | ANIMFILTER_SEL, ac->data, ac->datatype) == 0) + ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* paste keyframes */ ok = paste_animedit_keys(ac, &anim_data, offset_mode, merge_mode); @@ -776,7 +783,8 @@ void GRAPH_OT_paste(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - + + /* props */ RNA_def_enum(ot->srna, "offset", keyframe_paste_offset_items, KEYFRAME_PASTE_OFFSET_CFRA_START, "Offset", "Paste time offset of keys"); RNA_def_enum(ot->srna, "merge", keyframe_paste_merge_items, KEYFRAME_PASTE_MERGE_MIX, "Type", "Method of merging pasted keys and existing"); } diff --git a/source/blender/editors/space_image/CMakeLists.txt b/source/blender/editors/space_image/CMakeLists.txt index 3975a5f56f3..f397f2387d7 100644 --- a/source/blender/editors/space_image/CMakeLists.txt +++ b/source/blender/editors/space_image/CMakeLists.txt @@ -46,6 +46,10 @@ set(SRC image_intern.h ) +if(WITH_INTERNATIONAL) + add_definitions(-DWITH_INTERNATIONAL) +endif() + if(WITH_IMAGE_OPENJPEG) add_definitions(-DWITH_OPENJPEG) endif() diff --git a/source/blender/editors/space_image/SConscript b/source/blender/editors/space_image/SConscript index 759d4592992..737da4aac74 100644 --- a/source/blender/editors/space_image/SConscript +++ b/source/blender/editors/space_image/SConscript @@ -9,6 +9,8 @@ incs += ' ../../bmesh ../../render/extern/include ../../makesrna ../../blenloade defs = [] +if env['WITH_BF_INTERNATIONAL']: + defs.append('WITH_INTERNATIONAL') if env['WITH_BF_OPENEXR']: defs.append('WITH_OPENEXR') if env['WITH_BF_OPENJPEG']: diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index de171bc45f8..332a2ecada4 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -44,6 +44,8 @@ #include "BLI_rand.h" #include "BLI_utildefines.h" +#include "BLF_translation.h" + #include "BKE_colortools.h" #include "BKE_context.h" #include "BKE_customdata.h" @@ -104,36 +106,36 @@ static void image_info(Scene *scene, ImageUser *iuser, Image *ima, ImBuf *ibuf, if (ima == NULL) return; if (ibuf == NULL) { - ofs += sprintf(str, "Can't Load Image"); + ofs += sprintf(str, IFACE_("Can't Load Image")); } else { if (ima->source == IMA_SRC_MOVIE) { - ofs += sprintf(str, "Movie"); + ofs += sprintf(str, IFACE_("Movie")); if (ima->anim) - ofs += sprintf(str + ofs, "%d frs", IMB_anim_get_duration(ima->anim, IMB_TC_RECORD_RUN)); + ofs += sprintf(str + ofs, IFACE_("%d frs"), IMB_anim_get_duration(ima->anim, IMB_TC_RECORD_RUN)); } else - ofs += sprintf(str, "Image"); + ofs += sprintf(str, IFACE_("Image")); - ofs += sprintf(str + ofs, ": size %d x %d,", ibuf->x, ibuf->y); + ofs += sprintf(str + ofs, IFACE_(": size %d x %d,"), ibuf->x, ibuf->y); if (ibuf->rect_float) { if (ibuf->channels != 4) { - ofs += sprintf(str + ofs, "%d float channel(s)", ibuf->channels); + ofs += sprintf(str + ofs, IFACE_("%d float channel(s)"), ibuf->channels); } else if (ibuf->planes == R_IMF_PLANES_RGBA) - ofs += sprintf(str + ofs, " RGBA float"); + ofs += sprintf(str + ofs, IFACE_(" RGBA float")); else - ofs += sprintf(str + ofs, " RGB float"); + ofs += sprintf(str + ofs, IFACE_(" RGB float")); } else { if (ibuf->planes == R_IMF_PLANES_RGBA) - ofs += sprintf(str + ofs, " RGBA byte"); + ofs += sprintf(str + ofs, IFACE_(" RGBA byte")); else - ofs += sprintf(str + ofs, " RGB byte"); + ofs += sprintf(str + ofs, IFACE_(" RGB byte")); } if (ibuf->zbuf || ibuf->zbuf_float) - ofs += sprintf(str + ofs, " + Z"); + ofs += sprintf(str + ofs, IFACE_(" + Z")); if (ima->source == IMA_SRC_SEQUENCE) { char *file = BLI_last_slash(ibuf->name); @@ -147,7 +149,7 @@ static void image_info(Scene *scene, ImageUser *iuser, Image *ima, ImBuf *ibuf, if (ima->source == IMA_SRC_SEQUENCE) { /* don't use iuser->framenr directly because it may not be updated if auto-refresh is off */ const int framenr = BKE_image_user_frame_get(iuser, CFRA, 0); - ofs += sprintf(str + ofs, ", Frame: %d", framenr); + ofs += sprintf(str + ofs, IFACE_(", Frame: %d"), framenr); } (void)ofs; @@ -357,11 +359,11 @@ static char *slot_menu(void) str = MEM_callocN(IMA_MAX_RENDER_SLOT * 32, "menu slots"); - strcpy(str, "Slot %t"); + strcpy(str, IFACE_("Slot %t")); a = strlen(str); for (slot = 0; slot < IMA_MAX_RENDER_SLOT; slot++) - a += sprintf(str + a, "|Slot %d %%x%d", slot + 1, slot); + a += sprintf(str + a, IFACE_("|Slot %d %%x%d"), slot + 1, slot); return str; } @@ -374,16 +376,16 @@ static char *layer_menu(RenderResult *rr, short *UNUSED(curlay)) short a, nr = 0; char *str = MEM_callocN(len, "menu layers"); - strcpy(str, "Layer %t"); + strcpy(str, IFACE_("Layer %t")); a = strlen(str); /* compo result */ if (rr->rectf) { - a += sprintf(str + a, "|Composite %%x0"); + a += sprintf(str + a, IFACE_("|Composite %%x0")); nr = 1; } else if (rr->rect32) { - a += sprintf(str + a, "|Sequence %%x0"); + a += sprintf(str + a, IFACE_("|Sequence %%x0")); nr = 1; } for (rl = rr->layers.first; rl; rl = rl->next, nr++) { @@ -403,18 +405,18 @@ static char *pass_menu(RenderLayer *rl, short *curpass) short a, nr = 0; char *str = MEM_callocN(len, "menu layers"); - strcpy(str, "Pass %t"); + strcpy(str, IFACE_("Pass %t")); a = strlen(str); /* rendered results don't have a Combined pass */ if (rl == NULL || rl->rectf) { - a += sprintf(str + a, "|Combined %%x0"); + a += sprintf(str + a, IFACE_("|Combined %%x0")); nr = 1; } if (rl) for (rpass = rl->passes.first; rpass; rpass = rpass->next, nr++) - a += sprintf(str + a, "|%s %%x%d", rpass->name, nr); + a += sprintf(str + a, "|%s %%x%d", IFACE_(rpass->name), nr); if (*curpass >= nr) *curpass = 0; @@ -422,18 +424,6 @@ static char *pass_menu(RenderLayer *rl, short *curpass) return str; } -static void set_frames_cb(bContext *C, void *ima_v, void *iuser_v) -{ - Scene *scene = CTX_data_scene(C); - Image *ima = ima_v; - ImageUser *iuser = iuser_v; - - if (ima->anim) { - iuser->frames = IMB_anim_get_duration(ima->anim, IMB_TC_RECORD_RUN); - BKE_image_user_frame_calc(iuser, scene->r.cfra, 0); - } -} - /* 5 layer button callbacks... */ static void image_multi_cb(bContext *C, void *rr_v, void *iuser_v) { @@ -532,14 +522,14 @@ static void uiblock_layer_pass_buttons(uiLayout *layout, RenderResult *rr, Image /* menu buts */ if (render_slot) { strp = slot_menu(); - but = uiDefButS(block, MENU, 0, strp, 0, 0, wmenu1, UI_UNIT_Y, render_slot, 0, 0, 0, 0, "Select Slot"); + but = uiDefButS(block, MENU, 0, strp, 0, 0, wmenu1, UI_UNIT_Y, render_slot, 0, 0, 0, 0, TIP_("Select Slot")); uiButSetFunc(but, image_multi_cb, rr, iuser); MEM_freeN(strp); } if (rr) { strp = layer_menu(rr, &iuser->layer); - but = uiDefButS(block, MENU, 0, strp, 0, 0, wmenu2, UI_UNIT_Y, &iuser->layer, 0, 0, 0, 0, "Select Layer"); + but = uiDefButS(block, MENU, 0, strp, 0, 0, wmenu2, UI_UNIT_Y, &iuser->layer, 0, 0, 0, 0, TIP_("Select Layer")); uiButSetFunc(but, image_multi_cb, rr, iuser); MEM_freeN(strp); @@ -549,9 +539,9 @@ static void uiblock_layer_pass_buttons(uiLayout *layout, RenderResult *rr, Image rl = BLI_findlink(&rr->layers, layer); /* return NULL is meant to be */ strp = pass_menu(rl, &iuser->pass); - but = uiDefButS(block, MENU, 0, strp, 0, 0, wmenu3, UI_UNIT_Y, &iuser->pass, 0, 0, 0, 0, "Select Pass"); + but = uiDefButS(block, MENU, 0, strp, 0, 0, wmenu3, UI_UNIT_Y, &iuser->pass, 0, 0, 0, 0, TIP_("Select Pass")); uiButSetFunc(but, image_multi_cb, rr, iuser); - MEM_freeN(strp); + MEM_freeN(strp); } } @@ -567,22 +557,22 @@ static void uiblock_layer_pass_arrow_buttons(uiLayout *layout, RenderResult *rr, if (rr == NULL || iuser == NULL) return; if (rr->layers.first == NULL) { - uiItemL(row, "No Layers in Render Result", ICON_NONE); + uiItemL(row, IFACE_("No Layers in Render Result"), ICON_NONE); return; } /* decrease, increase arrows */ - but = uiDefIconBut(block, BUT, 0, ICON_TRIA_LEFT, 0, 0, 17, 20, NULL, 0, 0, 0, 0, "Previous Layer"); + but = uiDefIconBut(block, BUT, 0, ICON_TRIA_LEFT, 0, 0, 17, 20, NULL, 0, 0, 0, 0, TIP_("Previous Layer")); uiButSetFunc(but, image_multi_declay_cb, rr, iuser); - but = uiDefIconBut(block, BUT, 0, ICON_TRIA_RIGHT, 0, 0, 18, 20, NULL, 0, 0, 0, 0, "Next Layer"); + but = uiDefIconBut(block, BUT, 0, ICON_TRIA_RIGHT, 0, 0, 18, 20, NULL, 0, 0, 0, 0, TIP_("Next Layer")); uiButSetFunc(but, image_multi_inclay_cb, rr, iuser); uiblock_layer_pass_buttons(row, rr, iuser, 230 * dpi_fac, render_slot); /* decrease, increase arrows */ - but = uiDefIconBut(block, BUT, 0, ICON_TRIA_LEFT, 0, 0, 17, 20, NULL, 0, 0, 0, 0, "Previous Pass"); + but = uiDefIconBut(block, BUT, 0, ICON_TRIA_LEFT, 0, 0, 17, 20, NULL, 0, 0, 0, 0, TIP_("Previous Pass")); uiButSetFunc(but, image_multi_decpass_cb, rr, iuser); - but = uiDefIconBut(block, BUT, 0, ICON_TRIA_RIGHT, 0, 0, 18, 20, NULL, 0, 0, 0, 0, "Next Pass"); + but = uiDefIconBut(block, BUT, 0, ICON_TRIA_RIGHT, 0, 0, 18, 20, NULL, 0, 0, 0, 0, TIP_("Next Pass")); uiButSetFunc(but, image_multi_incpass_cb, rr, iuser); uiBlockEndAlign(block); @@ -622,7 +612,6 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, const char Scene *scene = CTX_data_scene(C); uiLayout *row, *split, *col; uiBlock *block; - uiBut *but; char str[128]; void *lock; @@ -648,12 +637,15 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, const char ima = imaptr.data; iuser = userptr->data; + BKE_image_user_check_frame_calc(iuser, (int)scene->r.cfra, 0); + cb = MEM_callocN(sizeof(RNAUpdateCb), "RNAUpdateCb"); cb->ptr = *ptr; cb->prop = prop; cb->iuser = iuser; uiLayoutSetContextPointer(layout, "edit_image", &imaptr); + uiLayoutSetContextPointer(layout, "edit_image_user", userptr); if (!compact) uiTemplateID(layout, C, ptr, propname, "IMAGE_OT_new", "IMAGE_OT_open", NULL); @@ -744,7 +736,18 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, const char split = uiLayoutSplit(layout, 0, 0); col = uiLayoutColumn(split, 0); - uiItemR(col, &imaptr, "use_fields", 0, NULL, ICON_NONE); + /* XXX Why only display fields_per_frame only for video image types? + * And why allow fields for non-video image types at all??? */ + if (ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { + uiLayout *subsplit = uiLayoutSplit(col, 0, 0); + uiLayout *subcol = uiLayoutColumn(subsplit, 0); + uiItemR(subcol, &imaptr, "use_fields", 0, NULL, ICON_NONE); + subcol = uiLayoutColumn(subsplit, 0); + uiLayoutSetActive(subcol, RNA_boolean_get(&imaptr, "use_fields")); + uiItemR(subcol, userptr, "fields_per_frame", 0, IFACE_("Fields"), ICON_NONE); + } + else + uiItemR(col, &imaptr, "use_fields", 0, NULL, ICON_NONE); row = uiLayoutRow(col, 0); uiLayoutSetActive(row, RNA_boolean_get(&imaptr, "use_fields")); uiItemR(row, &imaptr, "field_order", UI_ITEM_R_EXPAND, NULL, ICON_NONE); @@ -757,26 +760,18 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, const char if (ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { uiItemS(layout); - + split = uiLayoutSplit(layout, 0, 0); col = uiLayoutColumn(split, 0); - - BLI_snprintf(str, sizeof(str), "(%d) Frames", iuser->framenr); - uiItemR(col, userptr, "frame_duration", 0, str, ICON_NONE); - if (ima->anim) { - block = uiLayoutGetBlock(col); - but = uiDefBut(block, BUT, 0, "Match Movie Length", 0, 0, UI_UNIT_X * 2, UI_UNIT_Y, NULL, 0, 0, 0, 0, "Set the number of frames to match the movie or sequence"); - uiButSetFunc(but, set_frames_cb, ima, iuser); - } - uiItemR(col, userptr, "frame_start", 0, "Start", ICON_NONE); + BLI_snprintf(str, sizeof(str), IFACE_("(%d) Frames"), iuser->framenr); + uiItemR(col, userptr, "frame_duration", 0, str, ICON_NONE); + uiItemR(col, userptr, "frame_start", 0, IFACE_("Start"), ICON_NONE); uiItemR(col, userptr, "frame_offset", 0, NULL, ICON_NONE); col = uiLayoutColumn(split, 0); - row = uiLayoutRow(col, 0); - uiLayoutSetActive(row, RNA_boolean_get(&imaptr, "use_fields")); - uiItemR(row, userptr, "fields_per_frame", 0, "Fields", ICON_NONE); + uiItemO(col, NULL, ICON_NONE, "IMAGE_OT_match_movie_length"); uiItemR(col, userptr, "use_auto_refresh", 0, NULL, ICON_NONE); uiItemR(col, userptr, "use_cyclic", 0, NULL, ICON_NONE); } @@ -815,7 +810,7 @@ void uiTemplateImageSettings(uiLayout *layout, PointerRNA *imfptr) uiItemR(split, imfptr, "file_format", 0, "", ICON_NONE); sub = uiLayoutRow(split, 0); - uiItemR(sub, imfptr, "color_mode", UI_ITEM_R_EXPAND, "Color", ICON_NONE); + uiItemR(sub, imfptr, "color_mode", UI_ITEM_R_EXPAND, IFACE_("Color"), ICON_NONE); /* only display depth setting if multiple depths can be used */ if ((ELEM6(depth_ok, @@ -861,7 +856,7 @@ void uiTemplateImageSettings(uiLayout *layout, PointerRNA *imfptr) if (imf->imtype == R_IMF_IMTYPE_CINEON) { #if 1 - uiItemL(col, "Hard coded Non-Linear, Gamma:1.0", ICON_NONE); + uiItemL(col, IFACE_("Hard coded Non-Linear, Gamma: 1.0"), ICON_NONE); #else uiItemR(col, imfptr, "use_cineon_log", 0, NULL, ICON_NONE); uiItemR(col, imfptr, "cineon_black", 0, NULL, ICON_NONE); diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c index aab628180c8..ac71eb972f6 100644 --- a/source/blender/editors/space_image/image_draw.c +++ b/source/blender/editors/space_image/image_draw.c @@ -564,27 +564,40 @@ void draw_image_grease_pencil(bContext *C, short onlyv2d) { /* draw in View2D space? */ if (onlyv2d) { - /* assume that UI_view2d_ortho(C) has been called... */ - SpaceImage *sima = (SpaceImage *)CTX_wm_space_data(C); - void *lock; - ImBuf *ibuf = ED_space_image_acquire_buffer(sima, &lock); - /* draw grease-pencil ('image' strokes) */ - //if (sima->flag & SI_DISPGP) - draw_gpencil_2dimage(C, ibuf); - - ED_space_image_release_buffer(sima, lock); + draw_gpencil_2dimage(C); } else { /* assume that UI_view2d_restore(C) has been called... */ //SpaceImage *sima= (SpaceImage *)CTX_wm_space_data(C); /* draw grease-pencil ('screen' strokes) */ - //if (sima->flag & SI_DISPGP) draw_gpencil_view2d(C, 0); } } +void draw_image_sample_line(SpaceImage *sima) +{ + if (sima->sample_line_hist.flag & HISTO_FLAG_SAMPLELINE) { + Histogram *hist = &sima->sample_line_hist; + + glBegin(GL_LINES); + glColor3ub(0, 0, 0); + glVertex2fv(hist->co[0]); + glVertex2fv(hist->co[1]); + glEnd(); + + setlinestyle(1); + glBegin(GL_LINES); + glColor3ub(255, 255, 255); + glVertex2fv(hist->co[0]); + glVertex2fv(hist->co[1]); + glEnd(); + setlinestyle(0); + + } +} + /* XXX becomes WM paint cursor */ #if 0 static void draw_image_view_tool(Scene *scene) diff --git a/source/blender/editors/space_image/image_intern.h b/source/blender/editors/space_image/image_intern.h index ca3f543f3b9..0d3a7614f10 100644 --- a/source/blender/editors/space_image/image_intern.h +++ b/source/blender/editors/space_image/image_intern.h @@ -54,6 +54,7 @@ extern const char *image_context_dir[]; /* doc access */ /* image_draw.c */ void draw_image_main(struct SpaceImage *sima, struct ARegion *ar, struct Scene *scene); void draw_image_grease_pencil(struct bContext *C, short onlyv2d); +void draw_image_sample_line(struct SpaceImage *sima); /* image_ops.c */ int space_image_main_area_poll(struct bContext *C); @@ -69,6 +70,7 @@ void IMAGE_OT_view_ndof(struct wmOperatorType *ot); void IMAGE_OT_new(struct wmOperatorType *ot); void IMAGE_OT_open(struct wmOperatorType *ot); +void IMAGE_OT_match_movie_length(struct wmOperatorType *ot); void IMAGE_OT_replace(struct wmOperatorType *ot); void IMAGE_OT_reload(struct wmOperatorType *ot); void IMAGE_OT_save(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 31389bcb20c..7e67e737cc2 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -934,6 +934,52 @@ void IMAGE_OT_open(wmOperatorType *ot) WM_operator_properties_filesel(ot, FOLDERFILE | IMAGEFILE | MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, WM_FILESEL_FILEPATH | WM_FILESEL_RELPATH, FILE_DEFAULTDISPLAY); } +/******************** Match movie length operator ********************/ +static int image_match_len_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Scene *scene = CTX_data_scene(C); + Image *ima = CTX_data_pointer_get_type(C, "edit_image", &RNA_Image).data; + ImageUser *iuser = CTX_data_pointer_get_type(C, "edit_image_user", &RNA_ImageUser).data; + + if (!ima || !iuser) { + /* Try to get a Texture, or a SpaceImage from context... */ + SpaceImage *sima = CTX_wm_space_image(C); + Tex *tex = CTX_data_pointer_get_type(C, "texture", &RNA_Texture).data; + if (tex && tex->type == TEX_IMAGE) { + ima = tex->ima; + iuser = &tex->iuser; + } + else if (sima) { + ima = sima->image; + iuser = &sima->iuser; + } + + } + + if (!ima || !iuser || !ima->anim) + return OPERATOR_CANCELLED; + + iuser->frames = IMB_anim_get_duration(ima->anim, IMB_TC_RECORD_RUN); + BKE_image_user_frame_calc(iuser, scene->r.cfra, 0); + + return OPERATOR_FINISHED; +} + +/* called by other space types too */ +void IMAGE_OT_match_movie_length(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Match Movie Length"; + ot->description = "Set image's users length to the one of this video"; + ot->idname = "IMAGE_OT_match_movie_length"; + + /* api callbacks */ + ot->exec = image_match_len_exec; + + /* flags */ + ot->flag = OPTYPE_REGISTER /* | OPTYPE_UNDO */; /* Don't think we need undo for that. */ +} + /******************** replace image operator ********************/ static int image_replace_exec(bContext *C, wmOperator *op) @@ -2064,11 +2110,6 @@ static int image_sample_line_exec(bContext *C, wmOperator *op) Histogram *hist = &sima->sample_line_hist; float x1f, y1f, x2f, y2f; - int x1, y1, x2, y2; - int i, x, y; - float *fp; - float rgb[3]; - unsigned char *cp; if (ibuf == NULL) { ED_space_image_release_buffer(sima, lock); @@ -2082,46 +2123,13 @@ static int image_sample_line_exec(bContext *C, wmOperator *op) UI_view2d_region_to_view(&ar->v2d, x_start, y_start, &x1f, &y1f); UI_view2d_region_to_view(&ar->v2d, x_end, y_end, &x2f, &y2f); - x1 = 0.5f + x1f * ibuf->x; - x2 = 0.5f + x2f * ibuf->x; - y1 = 0.5f + y1f * ibuf->y; - y2 = 0.5f + y2f * ibuf->y; - - hist->channels = 3; - hist->x_resolution = 256; - hist->xmax = 1.0f; - hist->ymax = 1.0f; - - for (i = 0; i < 256; i++) { - x = (int)(0.5f + x1 + (float)i * (x2 - x1) / 255.0f); - y = (int)(0.5f + y1 + (float)i * (y2 - y1) / 255.0f); - - if (x < 0 || y < 0 || x >= ibuf->x || y >= ibuf->y) { - hist->data_luma[i] = hist->data_r[i] = hist->data_g[i] = hist->data_b[i] = 0.0f; - } - else { - if (ibuf->rect_float) { - fp = (ibuf->rect_float + (ibuf->channels) * (y * ibuf->x + x)); - - if (scene->r.color_mgt_flag & R_COLOR_MANAGEMENT) - linearrgb_to_srgb_v3_v3(rgb, fp); - else - copy_v3_v3(rgb, fp); - - hist->data_r[i] = rgb[0]; - hist->data_g[i] = rgb[1]; - hist->data_b[i] = rgb[2]; - hist->data_luma[i] = rgb_to_luma(rgb); - } - else if (ibuf->rect) { - cp = (unsigned char *)(ibuf->rect + y * ibuf->x + x); - hist->data_r[i] = (float)cp[0] / 255.0f; - hist->data_g[i] = (float)cp[1] / 255.0f; - hist->data_b[i] = (float)cp[2] / 255.0f; - hist->data_luma[i] = (float)rgb_to_luma_byte(cp) / 255.0f; - } - } - } + + hist->co[0][0] = x1f; + hist->co[0][1] = y1f; + hist->co[1][0] = x2f; + hist->co[1][1] = y2f; + + BKE_histogram_update_sample_line(hist, ibuf, (scene->r.color_mgt_flag & R_COLOR_MANAGEMENT) != 0); ED_space_image_release_buffer(sima, lock); @@ -2133,7 +2141,10 @@ static int image_sample_line_exec(bContext *C, wmOperator *op) static int image_sample_line_invoke(bContext *C, wmOperator *op, wmEvent *event) { SpaceImage *sima = CTX_wm_space_image(C); - + + Histogram *hist = &sima->sample_line_hist; + hist->flag &= ~HISTO_FLAG_SAMPLELINE; + if (!ED_space_image_has_buffer(sima)) return OPERATOR_CANCELLED; @@ -2397,56 +2408,15 @@ void IMAGE_OT_cycle_render_slot(wmOperatorType *ot) /* goes over all ImageUsers, and sets frame numbers if auto-refresh is set */ +static void image_update_frame(struct Image *UNUSED(ima), struct ImageUser *iuser, void *customdata) +{ + int cfra = *(int*)customdata; + + BKE_image_user_check_frame_calc(iuser, cfra, 0); +} + void ED_image_update_frame(const Main *mainp, int cfra) { - wmWindowManager *wm; - wmWindow *win; - Tex *tex; - - /* texture users */ - for (tex = mainp->tex.first; tex; tex = tex->id.next) { - if (tex->type == TEX_IMAGE && tex->ima) { - if (ELEM(tex->ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { - if (tex->iuser.flag & IMA_ANIM_ALWAYS) - BKE_image_user_frame_calc(&tex->iuser, cfra, 0); - } - } - } - - /* image window, compo node users */ - for (wm = mainp->wm.first; wm; wm = wm->id.next) { /* only 1 wm */ - for (win = wm->windows.first; win; win = win->next) { - ScrArea *sa; - for (sa = win->screen->areabase.first; sa; sa = sa->next) { - if (sa->spacetype == SPACE_VIEW3D) { - View3D *v3d = sa->spacedata.first; - BGpic *bgpic; - for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) - if (bgpic->iuser.flag & IMA_ANIM_ALWAYS) - BKE_image_user_frame_calc(&bgpic->iuser, cfra, 0); - } - else if (sa->spacetype == SPACE_IMAGE) { - SpaceImage *sima = sa->spacedata.first; - if (sima->iuser.flag & IMA_ANIM_ALWAYS) - BKE_image_user_frame_calc(&sima->iuser, cfra, 0); - } - else if (sa->spacetype == SPACE_NODE) { - SpaceNode *snode = sa->spacedata.first; - if ((snode->treetype == NTREE_COMPOSIT) && (snode->nodetree)) { - bNode *node; - for (node = snode->nodetree->nodes.first; node; node = node->next) { - if (node->id && node->type == CMP_NODE_IMAGE) { - Image *ima = (Image *)node->id; - ImageUser *iuser = node->storage; - if (ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) - if (iuser->flag & IMA_ANIM_ALWAYS) - BKE_image_user_frame_calc(iuser, cfra, 0); - } - } - } - } - } - } - } + BKE_image_walk_all_users(mainp, &cfra, image_update_frame); } diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index 9e0f538056c..32e6f588e27 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -473,6 +473,7 @@ static void image_operatortypes(void) WM_operatortype_append(IMAGE_OT_new); WM_operatortype_append(IMAGE_OT_open); + WM_operatortype_append(IMAGE_OT_match_movie_length); WM_operatortype_append(IMAGE_OT_replace); WM_operatortype_append(IMAGE_OT_reload); WM_operatortype_append(IMAGE_OT_save); @@ -589,8 +590,7 @@ static void image_refresh(const bContext *C, ScrArea *UNUSED(sa)) ima = ED_space_image(sima); - if (sima->iuser.flag & IMA_ANIM_ALWAYS) - BKE_image_user_frame_calc(&sima->iuser, scene->r.cfra, 0); + BKE_image_user_check_frame_calc(&sima->iuser, scene->r.cfra, 0); /* check if we have to set the image from the editmesh */ if (ima && (ima->source == IMA_SRC_VIEWER || sima->pin)) ; @@ -824,15 +824,18 @@ static void image_main_area_draw(const bContext *C, ARegion *ar) draw_uvedit_main(sima, ar, scene, obedit, obact); ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW); - + /* Grease Pencil too (in addition to UV's) */ draw_image_grease_pencil((bContext *)C, 1); + /* sample line */ + draw_image_sample_line(sima); + UI_view2d_view_restore(C); /* draw Grease Pencil - screen space only */ draw_image_grease_pencil((bContext *)C, 0); - + /* scrollers? */ #if 0 scrollers = UI_view2d_scrollers_calc(C, v2d, V2D_UNIT_VALUES, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY); @@ -911,6 +914,9 @@ static void image_scope_area_draw(const bContext *C, ARegion *ar) void *lock; ImBuf *ibuf = ED_space_image_acquire_buffer(sima, &lock); if (ibuf) { + if (!sima->scopes.ok) { + BKE_histogram_update_sample_line(&sima->sample_line_hist, ibuf, scene->r.color_mgt_flag & R_COLOR_MANAGEMENT); + } scopes_update(&sima->scopes, ibuf, scene->r.color_mgt_flag & R_COLOR_MANAGEMENT); } ED_space_image_release_buffer(sima, lock); diff --git a/source/blender/editors/space_info/info_draw.c b/source/blender/editors/space_info/info_draw.c index 2409ab8c4e0..329917a9f7e 100644 --- a/source/blender/editors/space_info/info_draw.c +++ b/source/blender/editors/space_info/info_draw.c @@ -63,11 +63,11 @@ /* complicates things a bit, so leaving in old simple code */ #define USE_INFO_NEWLINE -static void info_report_color(unsigned char *fg, unsigned char *bg, Report *report, int bool) +static void info_report_color(unsigned char *fg, unsigned char *bg, Report *report, const short do_tint) { if (report->flag & SELECT) { fg[0] = 255; fg[1] = 255; fg[2] = 255; - if (bool) { + if (do_tint) { bg[0] = 96; bg[1] = 128; bg[2] = 255; } else { @@ -78,30 +78,30 @@ static void info_report_color(unsigned char *fg, unsigned char *bg, Report *repo fg[0] = 0; fg[1] = 0; fg[2] = 0; if (report->type & RPT_ERROR_ALL) { - if (bool) { bg[0] = 220; bg[1] = 0; bg[2] = 0; } - else { bg[0] = 214; bg[1] = 0; bg[2] = 0; } + if (do_tint) { bg[0] = 220; bg[1] = 0; bg[2] = 0; } + else { bg[0] = 214; bg[1] = 0; bg[2] = 0; } } else if (report->type & RPT_WARNING_ALL) { - if (bool) { bg[0] = 220; bg[1] = 128; bg[2] = 96; } - else { bg[0] = 214; bg[1] = 122; bg[2] = 90; } + if (do_tint) { bg[0] = 220; bg[1] = 128; bg[2] = 96; } + else { bg[0] = 214; bg[1] = 122; bg[2] = 90; } } #if 0 // XXX: this looks like the selected color, so don't use this else if (report->type & RPT_OPERATOR_ALL) { - if (bool) { bg[0] = 96; bg[1] = 128; bg[2] = 255; } - else { bg[0] = 90; bg[1] = 122; bg[2] = 249; } + if (do_tint) { bg[0] = 96; bg[1] = 128; bg[2] = 255; } + else { bg[0] = 90; bg[1] = 122; bg[2] = 249; } } #endif else if (report->type & RPT_INFO_ALL) { - if (bool) { bg[0] = 0; bg[1] = 170; bg[2] = 0; } - else { bg[0] = 0; bg[1] = 164; bg[2] = 0; } + if (do_tint) { bg[0] = 0; bg[1] = 170; bg[2] = 0; } + else { bg[0] = 0; bg[1] = 164; bg[2] = 0; } } else if (report->type & RPT_DEBUG_ALL) { - if (bool) { bg[0] = 196; bg[1] = 196; bg[2] = 196; } - else { bg[0] = 190; bg[1] = 190; bg[2] = 190; } + if (do_tint) { bg[0] = 196; bg[1] = 196; bg[2] = 196; } + else { bg[0] = 190; bg[1] = 190; bg[2] = 190; } } else { - if (bool) { bg[0] = 120; bg[1] = 120; bg[2] = 120; } - else { bg[0] = 114; bg[1] = 114; bg[2] = 114; } + if (do_tint) { bg[0] = 120; bg[1] = 120; bg[2] = 120; } + else { bg[0] = 114; bg[1] = 114; bg[2] = 114; } } } } diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c index dd21fca93ce..0eec61f599e 100644 --- a/source/blender/editors/space_logic/logic_window.c +++ b/source/blender/editors/space_logic/logic_window.c @@ -1151,155 +1151,155 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short uiBut *but; short ysize; const char *str; - + /* yco is at the top of the rect, draw downwards */ - + set_col_sensor(sens->type, 0); - + switch (sens->type) { - case SENS_ALWAYS: + case SENS_ALWAYS: { ysize= 24; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - + draw_default_sensor_header(sens, block, xco, yco, width); - + yco-= ysize; - + break; } - case SENS_TOUCH: + case SENS_TOUCH: { - ysize= 48; - - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - + ysize= 48; + + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + draw_default_sensor_header(sens, block, xco, yco, width); - - ts= sens->data; - + + ts= sens->data; + // uiDefBut(block, TEX, 1, "Property:", xco, yco-22, width, 19, &ts->name, 0, MAX_NAME, 0, 0, "Only look for Objects with this property"); uiDefIDPoinBut(block, test_matpoin_but, ID_MA, 1, "MA:", (short)(xco + 10), (short)(yco-44), (short)(width - 20), 19, &ts->ma, "Only look for floors with this Material"); // uiDefButF(block, NUM, 1, "Margin:", xco+width/2, yco-44, width/2, 19, &ts->dist, 0.0, 10.0, 100, 0, "Extra margin (distance) for larger sensitivity"); - yco-= ysize; - break; + yco-= ysize; + break; } - case SENS_COLLISION: + case SENS_COLLISION: { ysize= 48; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - + draw_default_sensor_header(sens, block, xco, yco, width); cs= sens->data; - + /* The collision sensor will become a generic collision (i.e. it */ /* absorb the old touch sensor). */ uiDefButBitS(block, TOG, SENS_COLLISION_PULSE, B_REDR, "Pulse", (short)(xco + 10), (short)(yco - 44), - (short)(0.20 * (width-20)), 19, &cs->mode, 0.0, 0.0, 0, 0, - "Changes to the set of colliding objects generated pulses"); - + (short)(0.20 * (width-20)), 19, &cs->mode, 0.0, 0.0, 0, 0, + "Changes to the set of colliding objects generated pulses"); + uiDefButBitS(block, TOG, SENS_COLLISION_MATERIAL, B_REDR, "M/P", (short)(xco + 10 + (0.20 * (width-20))), (short)(yco - 44), - (short)(0.20 * (width-20)), 19, &cs->mode, 0.0, 0.0, 0, 0, - "Toggle collision on material or property"); - + (short)(0.20 * (width-20)), 19, &cs->mode, 0.0, 0.0, 0, 0, + "Toggle collision on material or property"); + if (cs->mode & SENS_COLLISION_MATERIAL) { uiDefBut(block, TEX, 1, "Material:", (short)(xco + 10 + 0.40 * (width-20)), - (short)(yco-44), (short)(0.6*(width-20)), 19, &cs->materialName, 0, MAX_NAME, 0, 0, - "Only look for Objects with this material"); + (short)(yco-44), (short)(0.6*(width-20)), 19, &cs->materialName, 0, MAX_NAME, 0, 0, + "Only look for Objects with this material"); } else { uiDefBut(block, TEX, 1, "Property:", (short)(xco + 10 + 0.40 * (width-20)), (short)(yco-44), - (short)(0.6*(width-20)), 19, &cs->name, 0, MAX_NAME, 0, 0, - "Only look for Objects with this property"); + (short)(0.6*(width-20)), 19, &cs->name, 0, MAX_NAME, 0, 0, + "Only look for Objects with this property"); } - + /* uiDefButS(block, NUM, 1, "Damp:", xco+10+width-90, yco-24, 70, 19, &cs->damp, 0, 250, 0, 0, "For 'damp' time don't detect another collision"); */ - + yco-= ysize; break; } - case SENS_NEAR: + case SENS_NEAR: { ysize= 72; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - + draw_default_sensor_header(sens, block, xco, yco, width); ns= sens->data; - + uiDefBut(block, TEX, 1, "Property:", (short)(10+xco), (short)(yco-44), (short)(width-20), 19, - &ns->name, 0, MAX_NAME, 0, 0, "Only look for Objects with this property"); + &ns->name, 0, MAX_NAME, 0, 0, "Only look for Objects with this property"); uiDefButF(block, NUM, 1, "Dist", (short)(10+xco), (short)(yco-68), (short)((width-22)/2), 19, - &ns->dist, 0.0, 1000.0, 1000, 0, "Trigger distance"); + &ns->dist, 0.0, 1000.0, 1000, 0, "Trigger distance"); uiDefButF(block, NUM, 1, "Reset", (short)(10+xco+(width-22)/2), (short)(yco-68), (short)((width-22)/2), 19, - &ns->resetdist, 0.0, 1000.0, 1000, 0, "Reset distance"); + &ns->resetdist, 0.0, 1000.0, 1000, 0, "Reset distance"); yco-= ysize; break; } - case SENS_RADAR: + case SENS_RADAR: { - ysize= 72; - + ysize= 72; + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - + draw_default_sensor_header(sens, block, xco, yco, width); - + rs= sens->data; - + uiDefBut(block, TEX, 1, "Prop:", - (short)(10+xco), (short)(yco-44), (short)(0.7 * (width-20)), 19, - &rs->name, 0, MAX_NAME, 0, 0, - "Only look for Objects with this property"); + (short)(10+xco), (short)(yco-44), (short)(0.7 * (width-20)), 19, + &rs->name, 0, MAX_NAME, 0, 0, + "Only look for Objects with this property"); - str = "Type %t|+X axis %x0|+Y axis %x1|+Z axis %x2|-X axis %x3|-Y axis %x4|-Z axis %x5"; + str = "Type %t|+X axis %x0|+Y axis %x1|+Z axis %x2|-X axis %x3|-Y axis %x4|-Z axis %x5"; uiDefButS(block, MENU, B_REDR, str, - (short)(10+xco+0.7 * (width-20)), (short)(yco-44), (short)(0.3 * (width-22)), 19, - &rs->axis, 2.0, 31, 0, 0, - "Specify along which axis the radar cone is cast"); - + (short)(10+xco+0.7 * (width-20)), (short)(yco-44), (short)(0.3 * (width-22)), 19, + &rs->axis, 2.0, 31, 0, 0, + "Specify along which axis the radar cone is cast"); + uiDefButF(block, NUM, 1, "Ang:", - (short)(10+xco), (short)(yco-68), (short)((width-20)/2), 19, - &rs->angle, 0.0, 179.9, 10, 0, - "Opening angle of the radar cone"); + (short)(10+xco), (short)(yco-68), (short)((width-20)/2), 19, + &rs->angle, 0.0, 179.9, 10, 0, + "Opening angle of the radar cone"); uiDefButF(block, NUM, 1, "Dist:", - (short)(xco+10 + (width-20)/2), (short)(yco-68), (short)((width-20)/2), 19, - &rs->range, 0.01, 10000.0, 100, 0, - "Depth of the radar cone"); + (short)(xco+10 + (width-20)/2), (short)(yco-68), (short)((width-20)/2), 19, + &rs->range, 0.01, 10000.0, 100, 0, + "Depth of the radar cone"); yco-= ysize; break; } - case SENS_KEYBOARD: + case SENS_KEYBOARD: { ks= sens->data; - + /* 5 lines: 120 height */ ysize= (ks->type&1) ? 96:120; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - + /* header line */ draw_default_sensor_header(sens, block, xco, yco, width); - + /* part of line 1 */ uiDefBut(block, LABEL, 0, "Key", xco, yco-44, 40, 19, NULL, 0, 0, 0, 0, ""); uiDefButBitS(block, TOG, 1, B_REDR, "All keys", xco+40+(width/2), yco-44, (width/2)-50, 19, - &ks->type, 0, 0, 0, 0, ""); - - + &ks->type, 0, 0, 0, 0, ""); + + if ((ks->type&1)==0) { /* is All Keys option off? */ /* line 2: hotkey and allkeys toggle */ but = uiDefKeyevtButS(block, 0, "", xco+40, yco-44, (width)/2, 19, &ks->key, "Key code"); uiButSetFunc(but, test_keyboard_event, ks, NULL); - + /* line 3: two key modifyers (qual1, qual2) */ uiDefBut(block, LABEL, 0, "Hold", xco, yco-68, 40, 19, NULL, 0, 0, 0, 0, ""); but = uiDefKeyevtButS(block, 0, "", xco+40, yco-68, (width-50)/2, 19, &ks->qual, "Modifier key code"); @@ -1307,50 +1307,50 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short but = uiDefKeyevtButS(block, 0, "", xco+40+(width-50)/2, yco-68, (width-50)/2, 19, &ks->qual2, "Second Modifier key code"); uiButSetFunc(but, test_keyboard_event, ks, NULL); } - + /* line 4: toggle property for string logging mode */ uiDefBut(block, TEX, 1, "LogToggle: ", - xco+10, yco-((ks->type&1) ? 68:92), (width-20), 19, - ks->toggleName, 0, MAX_NAME, 0, 0, - "Property that indicates whether to log " - "keystrokes as a string"); - + xco+10, yco-((ks->type&1) ? 68:92), (width-20), 19, + ks->toggleName, 0, MAX_NAME, 0, 0, + "Property that indicates whether to log " + "keystrokes as a string"); + /* line 5: target property for string logging mode */ uiDefBut(block, TEX, 1, "Target: ", - xco+10, yco-((ks->type&1) ? 92:116), (width-20), 19, - ks->targetName, 0, MAX_NAME, 0, 0, - "Property that receives the keystrokes in case " - "a string is logged"); - + xco+10, yco-((ks->type&1) ? 92:116), (width-20), 19, + ks->targetName, 0, MAX_NAME, 0, 0, + "Property that receives the keystrokes in case " + "a string is logged"); + yco-= ysize; break; } - case SENS_PROPERTY: + case SENS_PROPERTY: { ysize= 96; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, - (float)xco+width, (float)yco, 1); - + (float)xco+width, (float)yco, 1); + draw_default_sensor_header(sens, block, xco, yco, width); ps= sens->data; - - str= "Type %t|Equal %x0|Not Equal %x1|Interval %x2|Changed %x3"; + + str= "Type %t|Equal %x0|Not Equal %x1|Interval %x2|Changed %x3"; /* str= "Type %t|Equal %x0|Not Equal %x1"; */ uiDefButI(block, MENU, B_REDR, str, xco+30, yco-44, width-60, 19, - &ps->type, 0, 31, 0, 0, "Type"); - + &ps->type, 0, 31, 0, 0, "Type"); + if (ps->type != SENS_PROP_EXPRESSION) { uiDefBut(block, TEX, 1, "Prop: ", xco+30, yco-68, width-60, 19, - ps->name, 0, MAX_NAME, 0, 0, "Property name"); + ps->name, 0, MAX_NAME, 0, 0, "Property name"); } - + if (ps->type == SENS_PROP_INTERVAL) { uiDefBut(block, TEX, 1, "Min: ", xco, yco-92, width/2, 19, - ps->value, 0, MAX_NAME, 0, 0, "check for min value"); + ps->value, 0, MAX_NAME, 0, 0, "check for min value"); uiDefBut(block, TEX, 1, "Max: ", xco+width/2, yco-92, width/2, 19, - ps->maxvalue, 0, MAX_NAME, 0, 0, "check for max value"); + ps->maxvalue, 0, MAX_NAME, 0, 0, "check for max value"); } else if (ps->type == SENS_PROP_CHANGED) { /* pass */ @@ -1359,199 +1359,199 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short uiDefBut(block, TEX, 1, "Value: ", xco+30, yco-92, width-60, 19, ps->value, 0, MAX_NAME, 0, 0, "check for value"); } - + yco-= ysize; break; } - case SENS_ARMATURE: + case SENS_ARMATURE: { ysize= 70; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, - (float)xco+width, (float)yco, 1); - + (float)xco+width, (float)yco, 1); + draw_default_sensor_header(sens, block, xco, yco, width); arm= sens->data; if (ob->type == OB_ARMATURE) { uiBlockBeginAlign(block); but = uiDefBut(block, TEX, 1, "Bone: ", - (xco+10), (yco-44), (width-20)/2, 19, - arm->posechannel, 0, MAX_NAME, 0, 0, - "Bone on which you want to check a constraint"); + (xco+10), (yco-44), (width-20)/2, 19, + arm->posechannel, 0, MAX_NAME, 0, 0, + "Bone on which you want to check a constraint"); uiButSetFunc(but, check_armature_sensor, but, arm); but = uiDefBut(block, TEX, 1, "Cons: ", - (xco+10)+(width-20)/2, (yco-44), (width-20)/2, 19, - arm->constraint, 0, MAX_NAME, 0, 0, - "Name of the constraint you want to control"); + (xco+10)+(width-20)/2, (yco-44), (width-20)/2, 19, + arm->constraint, 0, MAX_NAME, 0, 0, + "Name of the constraint you want to control"); uiButSetFunc(but, check_armature_sensor, but, arm); uiBlockEndAlign(block); - str= "Type %t|State changed %x0|Lin error below %x1|Lin error above %x2|Rot error below %x3|Rot error above %x4"; + str= "Type %t|State changed %x0|Lin error below %x1|Lin error above %x2|Rot error below %x3|Rot error above %x4"; uiDefButI(block, MENU, B_REDR, str, xco+10, yco-66, 0.4*(width-20), 19, - &arm->type, 0, 31, 0, 0, "Type"); - + &arm->type, 0, 31, 0, 0, "Type"); + if (arm->type != SENS_ARM_STATE_CHANGED) { uiDefButF(block, NUM, 1, "Value: ", xco+10+0.4*(width-20), yco-66, 0.6*(width-20), 19, - &arm->value, -10000.0, 10000.0, 100, 0, "Test the error against this value"); + &arm->value, -10000.0, 10000.0, 100, 0, "Test the error against this value"); } } yco-= ysize; break; } - case SENS_ACTUATOR: + case SENS_ACTUATOR: { ysize= 48; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, - (float)xco+width, (float)yco, 1); - + (float)xco+width, (float)yco, 1); + draw_default_sensor_header(sens, block, xco, yco, width); as= sens->data; - + uiDefBut(block, TEX, 1, "Act: ", xco+30, yco-44, width-60, 19, - as->name, 0, MAX_NAME, 0, 0, "Actuator name, actuator active state modifications will be detected"); + as->name, 0, MAX_NAME, 0, 0, "Actuator name, actuator active state modifications will be detected"); yco-= ysize; break; } - case SENS_DELAY: + case SENS_DELAY: { ysize= 48; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, - (float)xco+width, (float)yco, 1); - + (float)xco+width, (float)yco, 1); + draw_default_sensor_header(sens, block, xco, yco, width); ds = sens->data; - + uiDefButS(block, NUM, 0, "Delay", (short)(10+xco), (short)(yco-44), (short)((width-22)*0.4+10), 19, - &ds->delay, 0.0, 5000.0, 0, 0, "Delay in number of logic tics before the positive trigger (default 60 per second)"); + &ds->delay, 0.0, 5000.0, 0, 0, "Delay in number of logic tics before the positive trigger (default 60 per second)"); uiDefButS(block, NUM, 0, "Dur", (short)(10+xco+(width-22)*0.4+10), (short)(yco-44), (short)((width-22)*0.4-10), 19, - &ds->duration, 0.0, 5000.0, 0, 0, "If >0, delay in number of logic tics before the negative trigger following the positive trigger"); + &ds->duration, 0.0, 5000.0, 0, 0, "If >0, delay in number of logic tics before the negative trigger following the positive trigger"); uiDefButBitS(block, TOG, SENS_DELAY_REPEAT, 0, "REP", (short)(xco + 10 + (width-22)*0.8), (short)(yco - 44), - (short)(0.20 * (width-22)), 19, &ds->flag, 0.0, 0.0, 0, 0, - "Toggle repeat option. If selected, the sensor restarts after Delay+Dur logic tics"); + (short)(0.20 * (width-22)), 19, &ds->flag, 0.0, 0.0, 0, 0, + "Toggle repeat option. If selected, the sensor restarts after Delay+Dur logic tics"); yco-= ysize; break; } - case SENS_MOUSE: + case SENS_MOUSE: { ms= sens->data; /* Two lines: 48 pixels high. */ ysize = 48; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - + /* line 1: header */ draw_default_sensor_header(sens, block, xco, yco, width); - + /* Line 2: type selection. The number are a bit mangled to get * proper compatibility with older .blend files. */ /* Any sensor type default is 0 but the ms enum starts in 1. * Therefore the mouse sensor is initialized to 1 in sca.c */ str= "Type %t|Left button %x1|Middle button %x2|" - "Right button %x4|Wheel Up %x5|Wheel Down %x6|Movement %x8|Mouse over %x16|Mouse over any%x32"; + "Right button %x4|Wheel Up %x5|Wheel Down %x6|Movement %x8|Mouse over %x16|Mouse over any%x32"; uiDefButS(block, MENU, B_REDR, str, xco+10, yco-44, (width*0.8f)-20, 19, - &ms->type, 0, 31, 0, 0, - "Specify the type of event this mouse sensor should trigger on"); - + &ms->type, 0, 31, 0, 0, + "Specify the type of event this mouse sensor should trigger on"); + if (ms->type==32) { uiDefButBitS(block, TOG, SENS_MOUSE_FOCUS_PULSE, B_REDR, "Pulse", (short)(xco + 10) + (width*0.8f)-20, (short)(yco - 44), - (short)(0.20 * (width-20)), 19, &ms->flag, 0.0, 0.0, 0, 0, - "Moving the mouse over a different object generates a pulse"); + (short)(0.20 * (width-20)), 19, &ms->flag, 0.0, 0.0, 0, 0, + "Moving the mouse over a different object generates a pulse"); } - + yco-= ysize; break; } - case SENS_RANDOM: + case SENS_RANDOM: { ysize = 48; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - + draw_default_sensor_header(sens, block, xco, yco, width); randomSensor = sens->data; /* some files were wrongly written, avoid crash now */ if (randomSensor) { uiDefButI(block, NUM, 1, "Seed: ", xco+10, yco-44, (width-20), 19, - &randomSensor->seed, 0, 1000, 0, 0, - "Initial seed of the generator. (Choose 0 for not random)"); + &randomSensor->seed, 0, 1000, 0, 0, + "Initial seed of the generator. (Choose 0 for not random)"); } yco-= ysize; break; } - case SENS_RAY: + case SENS_RAY: { ysize = 72; glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - + draw_default_sensor_header(sens, block, xco, yco, width); raySens = sens->data; - + /* 1. property or material */ uiDefButBitS(block, TOG, SENS_COLLISION_MATERIAL, B_REDR, "M/P", - xco + 10, yco - 44, 0.20 * (width-20), 19, - &raySens->mode, 0.0, 0.0, 0, 0, - "Toggle collision on material or property"); - + xco + 10, yco - 44, 0.20 * (width-20), 19, + &raySens->mode, 0.0, 0.0, 0, 0, + "Toggle collision on material or property"); + if (raySens->mode & SENS_COLLISION_MATERIAL) { uiDefBut(block, TEX, 1, "Material:", xco + 10 + 0.20 * (width-20), yco-44, 0.8*(width-20), 19, - &raySens->matname, 0, MAX_NAME, 0, 0, - "Only look for Objects with this material"); + &raySens->matname, 0, MAX_NAME, 0, 0, + "Only look for Objects with this material"); } else { uiDefBut(block, TEX, 1, "Property:", xco + 10 + 0.20 * (width-20), yco-44, 0.8*(width-20), 19, - &raySens->propname, 0, MAX_NAME, 0, 0, - "Only look for Objects with this property"); + &raySens->propname, 0, MAX_NAME, 0, 0, + "Only look for Objects with this property"); } /* X-Ray option */ uiDefButBitS(block, TOG, SENS_RAY_XRAY, 1, "X", - xco + 10, yco - 68, 0.10 * (width-20), 19, - &raySens->mode, 0.0, 0.0, 0, 0, - "Toggle X-Ray option (see through objects that don't have the property)"); + xco + 10, yco - 68, 0.10 * (width-20), 19, + &raySens->mode, 0.0, 0.0, 0, 0, + "Toggle X-Ray option (see through objects that don't have the property)"); /* 2. sensing range */ uiDefButF(block, NUM, 1, "Range", xco+10 + 0.10 * (width-20), yco-68, 0.5 * (width-20), 19, - &raySens->range, 0.01, 10000.0, 100, 0, - "Sense objects no farther than this distance"); - + &raySens->range, 0.01, 10000.0, 100, 0, + "Sense objects no farther than this distance"); + /* 3. axis choice */ - str = "Type %t|+ X axis %x1|+ Y axis %x0|+ Z axis %x2|- X axis %x3|- Y axis %x4|- Z axis %x5"; + str = "Type %t|+ X axis %x1|+ Y axis %x0|+ Z axis %x2|- X axis %x3|- Y axis %x4|- Z axis %x5"; uiDefButI(block, MENU, B_REDR, str, xco+10 + 0.6 * (width-20), yco-68, 0.4 * (width-20), 19, - &raySens->axisflag, 2.0, 31, 0, 0, - "Specify along which axis the ray is cast"); - - yco-= ysize; + &raySens->axisflag, 2.0, 31, 0, 0, + "Specify along which axis the ray is cast"); + + yco-= ysize; break; } - case SENS_MESSAGE: + case SENS_MESSAGE: { mes = sens->data; ysize = 2 * 24; /* total number of lines * 24 pixels/line */ - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, - (float)xco+width, (float)yco, 1); - + (float)xco+width, (float)yco, 1); + /* line 1: header line */ draw_default_sensor_header(sens, block, xco, yco, width); - + /* line 2: Subject filter */ uiDefBut(block, TEX, 1, "Subject: ", - (xco+10), (yco-44), (width-20), 19, - mes->subject, 0, MAX_NAME, 0, 0, - "Optional subject filter: only accept messages with this subject" - ", or empty for all"); - + (xco+10), (yco-44), (width-20), 19, + mes->subject, 0, MAX_NAME, 0, 0, + "Optional subject filter: only accept messages with this subject" + ", or empty for all"); + yco -= ysize; break; } @@ -1559,96 +1559,96 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short { ysize = 72; - + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - + /* line 1: header */ draw_default_sensor_header(sens, block, xco, yco, width); joy= sens->data; uiDefButC(block, NUM, 1, "Index:", xco+10, yco-44, 0.33 * (width-20), 19, - &joy->joyindex, 0, SENS_JOY_MAXINDEX-1, 100, 0, - "Specify which joystick to use"); + &joy->joyindex, 0, SENS_JOY_MAXINDEX-1, 100, 0, + "Specify which joystick to use"); - str= "Type %t|Button %x0|Axis %x1|Single Axis %x3|Hat%x2"; + str= "Type %t|Button %x0|Axis %x1|Single Axis %x3|Hat%x2"; uiDefButC(block, MENU, B_REDR, str, xco+87, yco-44, 0.26 * (width-20), 19, - &joy->type, 0, 31, 0, 0, - "The type of event this joystick sensor is triggered on"); - + &joy->type, 0, 31, 0, 0, + "The type of event this joystick sensor is triggered on"); + if (joy->type != SENS_JOY_AXIS_SINGLE) { if (joy->flag & SENS_JOY_ANY_EVENT) { switch (joy->type) { - case SENS_JOY_AXIS: - str = "All Axis Events"; - break; - case SENS_JOY_BUTTON: - str = "All Button Events"; - break; - default: - str = "All Hat Events"; - break; + case SENS_JOY_AXIS: + str = "All Axis Events"; + break; + case SENS_JOY_BUTTON: + str = "All Button Events"; + break; + default: + str = "All Hat Events"; + break; } } else { str = "All"; } - + uiDefButBitS(block, TOG, SENS_JOY_ANY_EVENT, B_REDR, str, - xco+10 + 0.475 * (width-20), yco-68, ((joy->flag & SENS_JOY_ANY_EVENT) ? 0.525 : 0.12) * (width-20), 19, - &joy->flag, 0, 0, 0, 0, - "Triggered by all events on this joysticks current type (axis/button/hat)"); + xco+10 + 0.475 * (width-20), yco-68, ((joy->flag & SENS_JOY_ANY_EVENT) ? 0.525 : 0.12) * (width-20), 19, + &joy->flag, 0, 0, 0, 0, + "Triggered by all events on this joysticks current type (axis/button/hat)"); } if (joy->type == SENS_JOY_BUTTON) { if ((joy->flag & SENS_JOY_ANY_EVENT)==0) { uiDefButI(block, NUM, 1, "Number:", xco+10 + 0.6 * (width-20), yco-68, 0.4 * (width-20), 19, - &joy->button, 0, 18, 100, 0, - "Specify which button to use"); + &joy->button, 0, 18, 100, 0, + "Specify which button to use"); } } else if (joy->type == SENS_JOY_AXIS) { uiDefButS(block, NUM, 1, "Number:", xco+10, yco-68, 0.46 * (width-20), 19, - &joy->axis, 1, 8.0, 100, 0, - "Specify which axis pair to use, 1 is useually the main direction input"); + &joy->axis, 1, 8.0, 100, 0, + "Specify which axis pair to use, 1 is useually the main direction input"); uiDefButI(block, NUM, 1, "Threshold:", xco+10 + 0.6 * (width-20), yco-44, 0.4 * (width-20), 19, - &joy->precision, 0, 32768.0, 100, 0, - "Specify the precision of the axis"); + &joy->precision, 0, 32768.0, 100, 0, + "Specify the precision of the axis"); if ((joy->flag & SENS_JOY_ANY_EVENT)==0) { - str = "Type %t|Up Axis %x1 |Down Axis %x3|Left Axis %x2|Right Axis %x0"; + str = "Type %t|Up Axis %x1 |Down Axis %x3|Left Axis %x2|Right Axis %x0"; uiDefButI(block, MENU, B_REDR, str, xco+10 + 0.6 * (width-20), yco-68, 0.4 * (width-20), 19, - &joy->axisf, 2.0, 31, 0, 0, - "The direction of the axis, use 'All Events' to receive events on any direction"); + &joy->axisf, 2.0, 31, 0, 0, + "The direction of the axis, use 'All Events' to receive events on any direction"); } } else if (joy->type == SENS_JOY_HAT) { uiDefButI(block, NUM, 1, "Number:", xco+10, yco-68, 0.46 * (width-20), 19, - &joy->hat, 1, 4.0, 100, 0, - "Specify which hat to use"); - + &joy->hat, 1, 4.0, 100, 0, + "Specify which hat to use"); + if ((joy->flag & SENS_JOY_ANY_EVENT)==0) { - str = "Direction%t|Up%x1|Down%x4|Left%x8|Right%x2|%l|Up/Right%x3|Down/Left%x12|Up/Left%x9|Down/Right%x6"; + str = "Direction%t|Up%x1|Down%x4|Left%x8|Right%x2|%l|Up/Right%x3|Down/Left%x12|Up/Left%x9|Down/Right%x6"; uiDefButI(block, MENU, 0, str, xco+10 + 0.6 * (width-20), yco-68, 0.4 * (width-20), 19, - &joy->hatf, 2.0, 31, 0, 0, - "The direction of the hat, use 'All Events' to receive events on any direction"); + &joy->hatf, 2.0, 31, 0, 0, + "The direction of the hat, use 'All Events' to receive events on any direction"); } } else { /* (joy->type == SENS_JOY_AXIS_SINGLE)*/ uiDefButS(block, NUM, 1, "Number:", xco+10, yco-68, 0.46 * (width-20), 19, - &joy->axis_single, 1, 16.0, 100, 0, - "Specify a single axis (verticle/horizontal/other) to detect"); - + &joy->axis_single, 1, 16.0, 100, 0, + "Specify a single axis (verticle/horizontal/other) to detect"); + uiDefButI(block, NUM, 1, "Threshold:", xco+10 + 0.6 * (width-20), yco-44, 0.4 * (width-20), 19, - &joy->precision, 0, 32768.0, 100, 0, - "Specify the precision of the axis"); + &joy->precision, 0, 32768.0, 100, 0, + "Specify the precision of the axis"); } yco-= ysize; break; } } - + return yco-4; } @@ -1859,7 +1859,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo set_col_actuator(act->type, 0); switch (act->type) { - case ACT_OBJECT: + case ACT_OBJECT: { oa = act->data; wval = (width-100)/3; @@ -1890,7 +1890,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiDefButBitS(block, TOG, ACT_DLOC_LOCAL, 0, "L", xco+45+3*wval, yco-45, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation"); uiDefButBitS(block, TOG, ACT_DROT_LOCAL, 0, "L", xco+45+3*wval, yco-64, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation"); - + if (ob->gameflag & OB_DYNAMIC) { uiDefBut(block, LABEL, 0, "Force", xco, yco-87, 55, 19, NULL, 0, 0, 0, 0, "Sets the force"); uiBlockBeginAlign(block); @@ -1903,7 +1903,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiBlockBeginAlign(block); uiDefButF(block, NUM, 0, "", xco+45, yco-106, wval, 19, oa->forcerot, -10000.0, 10000.0, 10, 0, ""); uiDefButF(block, NUM, 0, "", xco+45+wval, yco-106, wval, 19, oa->forcerot+1, -10000.0, 10000.0, 10, 0, ""); - uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-106, wval, 19, oa->forcerot+2, -10000.0, 10000.0, 10, 0, ""); + uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-106, wval, 19, oa->forcerot+2, -10000.0, 10000.0, 10, 0, ""); uiBlockEndAlign(block); } @@ -1914,14 +1914,14 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiDefButF(block, NUM, 0, "", xco+45+wval, yco-129, wval, 19, oa->linearvelocity+1, -10000.0, 10000.0, 10, 0, ""); uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-129, wval, 19, oa->linearvelocity+2, -10000.0, 10000.0, 10, 0, ""); uiBlockEndAlign(block); - + uiDefBut(block, LABEL, 0, "AngV", xco, yco-148, 45, 19, NULL, 0, 0, 0, 0, "Sets the angular velocity"); uiBlockBeginAlign(block); uiDefButF(block, NUM, 0, "", xco+45, yco-148, wval, 19, oa->angularvelocity, -10000.0, 10000.0, 10, 0, ""); uiDefButF(block, NUM, 0, "", xco+45+wval, yco-148, wval, 19, oa->angularvelocity+1, -10000.0, 10000.0, 10, 0, ""); uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-148, wval, 19, oa->angularvelocity+2, -10000.0, 10000.0, 10, 0, ""); uiBlockEndAlign(block); - + uiDefBut(block, LABEL, 0, "Damp", xco, yco-171, 45, 19, NULL, 0, 0, 0, 0, "Number of frames to reach the target velocity"); uiDefButS(block, NUM, 0, "", xco+45, yco-171, wval, 19, &oa->damping, 0.0, 1000.0, 100, 0, ""); @@ -1929,9 +1929,9 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiDefButBitS(block, TOG, ACT_TORQUE_LOCAL, 0, "L", xco+45+3*wval, yco-106, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation"); uiDefButBitS(block, TOG, ACT_LIN_VEL_LOCAL, 0, "L", xco+45+3*wval, yco-129, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation"); uiDefButBitS(block, TOG, ACT_ANG_VEL_LOCAL, 0, "L", xco+45+3*wval, yco-148, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation"); - + uiDefButBitS(block, TOG, ACT_ADD_LIN_VEL, 0, "use_additive", xco+45+3*wval+15, yco-129, 35, 19, &oa->flag, 0.0, 0.0, 0, 0, "Toggles between ADD and SET linV"); - } + } } else if (oa->type == ACT_OBJECT_SERVO) { ysize= 195; @@ -1984,8 +1984,8 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo yco-= ysize; break; } - case ACT_ACTION: - case ACT_SHAPEACTION: + case ACT_ACTION: + case ACT_SHAPEACTION: { /* DrawAct */ #ifdef __NLA_ACTION_BY_MOTION_ACTUATOR @@ -2010,7 +2010,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiDefIDPoinBut(block, test_actionpoin_but, ID_AC, 1, "AC: ", xco+10+ (width/3), yco-24, ((width/3)*2) - (20 + 60), 19, &aa->act, "Action name"); uiDefButBitS(block, TOGN, 1, 0, "Continue", xco+((width/3)*2)+20, yco-24, 60, 19, - &aa->end_reset, 0.0, 0.0, 0, 0, "Restore last frame when switching on/off, otherwise play from the start each time"); + &aa->end_reset, 0.0, 0.0, 0, 0, "Restore last frame when switching on/off, otherwise play from the start each time"); if (aa->type == ACT_ACTION_FROM_PROP) { @@ -2020,7 +2020,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiDefButF(block, NUM, 0, "Sta: ", xco+10, yco-44, (width-20)/2, 19, &aa->sta, 1.0, MAXFRAMEF, 0, 0, "Start frame"); uiDefButF(block, NUM, 0, "End: ", xco+10+(width-20)/2, yco-44, (width-20)/2, 19, &aa->end, 1.0, MAXFRAMEF, 0, 0, "End frame"); } - + uiDefButS(block, NUM, 0, "Blendin: ", xco+10, yco-64, (width-20)/2, 19, &aa->blendin, 0.0, 32767, 0.0, 0.0, "Number of frames of motion blending"); uiDefButS(block, NUM, 0, "Priority: ", xco+10+(width-20)/2, yco-64, (width-20)/2, 19, &aa->priority, 0.0, 100.0, 0.0, 0.0, "Execution priority - lower numbers will override actions with higher numbers, With 2 or more actions at once, the overriding channels must be lower in the stack"); @@ -2038,7 +2038,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo yco-=ysize; break; } - case ACT_IPO: + case ACT_IPO: { ia= act->data; @@ -2051,55 +2051,55 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiDefButS(block, MENU, B_REDR, str, xco+10, yco-24, (width-20)/2, 19, &ia->type, 0, 0, 0, 0, ""); - but = uiDefButBitS(block, TOG, ACT_IPOFORCE, ACT_IPOFORCE, - "Force", xco+10+(width-20)/2, yco-24, (width-20)/4-10, 19, - &ia->flag, 0, 0, 0, 0, - "Apply Ipo as a global or local force depending on the local option (dynamic objects only)"); + but = uiDefButBitS(block, TOG, ACT_IPOFORCE, ACT_IPOFORCE, + "Force", xco+10+(width-20)/2, yco-24, (width-20)/4-10, 19, + &ia->flag, 0, 0, 0, 0, + "Apply Ipo as a global or local force depending on the local option (dynamic objects only)"); uiButSetFunc(but, change_ipo_actuator, but, ia); - but = uiDefButBitS(block, TOG, ACT_IPOADD, ACT_IPOADD, - "Add", xco+3*(width-20)/4, yco-24, (width-20)/4-10, 19, - &ia->flag, 0, 0, 0, 0, - "Ipo is added to the current loc/rot/scale in global or local coordinate according to Local flag"); + but = uiDefButBitS(block, TOG, ACT_IPOADD, ACT_IPOADD, + "Add", xco+3*(width-20)/4, yco-24, (width-20)/4-10, 19, + &ia->flag, 0, 0, 0, 0, + "Ipo is added to the current loc/rot/scale in global or local coordinate according to Local flag"); uiButSetFunc(but, change_ipo_actuator, but, ia); /* Only show the do-force-local toggle if force is requested */ if (ia->flag & (ACT_IPOFORCE|ACT_IPOADD)) { - uiDefButBitS(block, TOG, ACT_IPOLOCAL, 0, - "L", xco+width-30, yco-24, 20, 19, - &ia->flag, 0, 0, 0, 0, - "Let the ipo acts in local coordinates, used in Force and Add mode"); + uiDefButBitS(block, TOG, ACT_IPOLOCAL, 0, + "L", xco+width-30, yco-24, 20, 19, + &ia->flag, 0, 0, 0, 0, + "Let the ipo acts in local coordinates, used in Force and Add mode"); } if (ia->type==ACT_IPO_FROM_PROP) { - uiDefBut(block, TEX, 0, - "Prop: ", xco+10, yco-44, width-80, 19, - ia->name, 0.0, MAX_NAME, 0, 0, - "Use this property to define the Ipo position"); + uiDefBut(block, TEX, 0, + "Prop: ", xco+10, yco-44, width-80, 19, + ia->name, 0.0, MAX_NAME, 0, 0, + "Use this property to define the Ipo position"); } else { - uiDefButF(block, NUM, 0, - "Sta", xco+10, yco-44, (width-80)/2, 19, - &ia->sta, 1.0, MAXFRAMEF, 0, 0, - "Start frame"); - uiDefButF(block, NUM, 0, - "End", xco+10+(width-80)/2, yco-44, (width-80)/2, 19, - &ia->end, 1.0, MAXFRAMEF, 0, 0, - "End frame"); + uiDefButF(block, NUM, 0, + "Sta", xco+10, yco-44, (width-80)/2, 19, + &ia->sta, 1.0, MAXFRAMEF, 0, 0, + "Start frame"); + uiDefButF(block, NUM, 0, + "End", xco+10+(width-80)/2, yco-44, (width-80)/2, 19, + &ia->end, 1.0, MAXFRAMEF, 0, 0, + "End frame"); } - uiDefButBitS(block, TOG, ACT_IPOCHILD, B_REDR, - "Child", xco+10+(width-80), yco-44, 60, 19, - &ia->flag, 0, 0, 0, 0, - "Update IPO on all children Objects as well"); - uiDefBut(block, TEX, 0, - "FrameProp: ", xco+10, yco-64, width-20, 19, - ia->frameProp, 0.0, MAX_NAME, 0, 0, - "Assign the action's current frame number to this property"); + uiDefButBitS(block, TOG, ACT_IPOCHILD, B_REDR, + "Child", xco+10+(width-80), yco-44, 60, 19, + &ia->flag, 0, 0, 0, 0, + "Update IPO on all children Objects as well"); + uiDefBut(block, TEX, 0, + "FrameProp: ", xco+10, yco-64, width-20, 19, + ia->frameProp, 0.0, MAX_NAME, 0, 0, + "Assign the action's current frame number to this property"); yco-= ysize; break; } - case ACT_PROPERTY: + case ACT_PROPERTY: { ysize= 68; @@ -2129,7 +2129,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo break; } - case ACT_SOUND: + case ACT_SOUND: { sa = act->data; sa->sndnr = 0; @@ -2193,743 +2193,743 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo } } MEM_freeN((void *)str); - } + } else { uiDefButO(block, BUT, "sound.open", 0, "Load Sound", xco+10, yco-22, width-20, 19, "Load a sound file"); } - + yco-= ysize; break; } - case ACT_CAMERA: + case ACT_CAMERA: - ysize= 48; + ysize= 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - - ca= act->data; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "OB:", xco+10, yco-24, (width-20)/2, 19, &(ca->ob), "Look at this Object"); - uiDefButF(block, NUM, 0, "Height:", xco+10+(width-20)/2, yco-24, (width-20)/2, 19, &ca->height, 0.0, 20.0, 0, 0, ""); - - uiDefButF(block, NUM, 0, "Min:", xco+10, yco-44, (width-60)/2, 19, &ca->min, 0.0, 20.0, 0, 0, ""); - - if (ca->axis==0) ca->axis= 'x'; - uiDefButS(block, ROW, 0, "X", xco+10+(width-60)/2, yco-44, 20, 19, &ca->axis, 4.0, (float)'x', 0, 0, "Camera tries to get behind the X axis"); - uiDefButS(block, ROW, 0, "Y", xco+30+(width-60)/2, yco-44, 20, 19, &ca->axis, 4.0, (float)'y', 0, 0, "Camera tries to get behind the Y axis"); - - uiDefButF(block, NUM, 0, "Max:", xco+20+(width)/2, yco-44, (width-60)/2, 19, &ca->max, 0.0, 20.0, 0, 0, ""); + ca= act->data; - yco-= ysize; + uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "OB:", xco+10, yco-24, (width-20)/2, 19, &(ca->ob), "Look at this Object"); + uiDefButF(block, NUM, 0, "Height:", xco+10+(width-20)/2, yco-24, (width-20)/2, 19, &ca->height, 0.0, 20.0, 0, 0, ""); - break; + uiDefButF(block, NUM, 0, "Min:", xco+10, yco-44, (width-60)/2, 19, &ca->min, 0.0, 20.0, 0, 0, ""); - case ACT_EDIT_OBJECT: - - eoa= act->data; + if (ca->axis==0) ca->axis= 'x'; + uiDefButS(block, ROW, 0, "X", xco+10+(width-60)/2, yco-44, 20, 19, &ca->axis, 4.0, (float)'x', 0, 0, "Camera tries to get behind the X axis"); + uiDefButS(block, ROW, 0, "Y", xco+30+(width-60)/2, yco-44, 20, 19, &ca->axis, 4.0, (float)'y', 0, 0, "Camera tries to get behind the Y axis"); - if (eoa->type==ACT_EDOB_ADD_OBJECT) { - ysize = 92; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + uiDefButF(block, NUM, 0, "Max:", xco+20+(width)/2, yco-44, (width-60)/2, 19, &ca->max, 0.0, 20.0, 0, 0, ""); + + yco-= ysize; + + break; + + case ACT_EDIT_OBJECT: + + eoa= act->data; + + if (eoa->type==ACT_EDOB_ADD_OBJECT) { + ysize = 92; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + + uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "OB:", xco+10, yco-44, (width-20)/2, 19, &(eoa->ob), "Add this Object and all its children (cant be on an visible layer)"); + uiDefButI(block, NUM, 0, "Time:", xco+10+(width-20)/2, yco-44, (width-20)/2, 19, &eoa->time, 0.0, 2000.0, 0, 0, "Duration the new Object lives"); + + wval= (width-60)/3; + uiDefBut(block, LABEL, 0, "linV", xco, yco-68, 45, 19, + NULL, 0, 0, 0, 0, + "Velocity upon creation"); + uiDefButF(block, NUM, 0, "", xco+45, yco-68, wval, 19, + eoa->linVelocity, -100.0, 100.0, 10, 0, + "Velocity upon creation, x component"); + uiDefButF(block, NUM, 0, "", xco+45+wval, yco-68, wval, 19, + eoa->linVelocity+1, -100.0, 100.0, 10, 0, + "Velocity upon creation, y component"); + uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-68, wval, 19, + eoa->linVelocity+2, -100.0, 100.0, 10, 0, + "Velocity upon creation, z component"); + uiDefButBitS(block, TOG, ACT_EDOB_LOCAL_LINV, 0, "L", xco+45+3*wval, yco-68, 15, 19, + &eoa->localflag, 0.0, 0.0, 0, 0, + "Apply the transformation locally"); + + + uiDefBut(block, LABEL, 0, "AngV", xco, yco-90, 45, 19, + NULL, 0, 0, 0, 0, + "Angular velocity upon creation"); + uiDefButF(block, NUM, 0, "", xco+45, yco-90, wval, 19, + eoa->angVelocity, -10000.0, 10000.0, 10, 0, + "Angular velocity upon creation, x component"); + uiDefButF(block, NUM, 0, "", xco+45+wval, yco-90, wval, 19, + eoa->angVelocity+1, -10000.0, 10000.0, 10, 0, + "Angular velocity upon creation, y component"); + uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-90, wval, 19, + eoa->angVelocity+2, -10000.0, 10000.0, 10, 0, + "Angular velocity upon creation, z component"); + uiDefButBitS(block, TOG, ACT_EDOB_LOCAL_ANGV, 0, "L", xco+45+3*wval, yco-90, 15, 19, + &eoa->localflag, 0.0, 0.0, 0, 0, + "Apply the rotation locally"); - uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "OB:", xco+10, yco-44, (width-20)/2, 19, &(eoa->ob), "Add this Object and all its children (cant be on an visible layer)"); - uiDefButI(block, NUM, 0, "Time:", xco+10+(width-20)/2, yco-44, (width-20)/2, 19, &eoa->time, 0.0, 2000.0, 0, 0, "Duration the new Object lives"); - - wval= (width-60)/3; - uiDefBut(block, LABEL, 0, "linV", xco, yco-68, 45, 19, - NULL, 0, 0, 0, 0, - "Velocity upon creation"); - uiDefButF(block, NUM, 0, "", xco+45, yco-68, wval, 19, - eoa->linVelocity, -100.0, 100.0, 10, 0, - "Velocity upon creation, x component"); - uiDefButF(block, NUM, 0, "", xco+45+wval, yco-68, wval, 19, - eoa->linVelocity+1, -100.0, 100.0, 10, 0, - "Velocity upon creation, y component"); - uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-68, wval, 19, - eoa->linVelocity+2, -100.0, 100.0, 10, 0, - "Velocity upon creation, z component"); - uiDefButBitS(block, TOG, ACT_EDOB_LOCAL_LINV, 0, "L", xco+45+3*wval, yco-68, 15, 19, - &eoa->localflag, 0.0, 0.0, 0, 0, - "Apply the transformation locally"); - - - uiDefBut(block, LABEL, 0, "AngV", xco, yco-90, 45, 19, - NULL, 0, 0, 0, 0, - "Angular velocity upon creation"); - uiDefButF(block, NUM, 0, "", xco+45, yco-90, wval, 19, - eoa->angVelocity, -10000.0, 10000.0, 10, 0, - "Angular velocity upon creation, x component"); - uiDefButF(block, NUM, 0, "", xco+45+wval, yco-90, wval, 19, - eoa->angVelocity+1, -10000.0, 10000.0, 10, 0, - "Angular velocity upon creation, y component"); - uiDefButF(block, NUM, 0, "", xco+45+2*wval, yco-90, wval, 19, - eoa->angVelocity+2, -10000.0, 10000.0, 10, 0, - "Angular velocity upon creation, z component"); - uiDefButBitS(block, TOG, ACT_EDOB_LOCAL_ANGV, 0, "L", xco+45+3*wval, yco-90, 15, 19, - &eoa->localflag, 0.0, 0.0, 0, 0, - "Apply the rotation locally"); - - } - else if (eoa->type==ACT_EDOB_END_OBJECT) { - ysize= 28; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - } - else if (eoa->type==ACT_EDOB_REPLACE_MESH) { - ysize= 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - - uiDefIDPoinBut(block, test_meshpoin_but, ID_ME, 1, "ME:", xco+40, yco-44, (width-80)/2, 19, &(eoa->me), "replace the existing, when left blank 'Phys' will remake the existing physics mesh"); - - uiDefButBitS(block, TOGN, ACT_EDOB_REPLACE_MESH_NOGFX, 0, "Gfx", xco+40 + (width-80)/2, yco-44, (width-80)/4, 19, &eoa->flag, 0, 0, 0, 0, "Replace the display mesh"); - uiDefButBitS(block, TOG, ACT_EDOB_REPLACE_MESH_PHYS, 0, "Phys", xco+40 + (width-80)/2 +(width-80)/4, yco-44, (width-80)/4, 19, &eoa->flag, 0, 0, 0, 0, "Replace the physics mesh (triangle bounds only. compound shapes not supported)"); - } - else if (eoa->type==ACT_EDOB_TRACK_TO) { - ysize= 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - - uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "OB:", xco+10, yco-44, (width-20)/2, 19, &(eoa->ob), "Track to this Object"); - uiDefButI(block, NUM, 0, "Time:", xco+10+(width-20)/2, yco-44, (width-20)/2-40, 19, &eoa->time, 0.0, 2000.0, 0, 0, "Duration the tracking takes"); - uiDefButS(block, TOG, 0, "3D", xco+width-50, yco-44, 40, 19, &eoa->flag, 0.0, 0.0, 0, 0, "Enable 3D tracking"); - } - else if (eoa->type==ACT_EDOB_DYNAMICS) { - ysize= 69; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - - str= "Dynamic Operation %t|Restore Dynamics %x0|Suspend Dynamics %x1|Enable Rigid Body %x2|Disable Rigid Body %x3|Set Mass %x4"; - uiDefButS(block, MENU, B_REDR, str, xco+40, yco-44, (width-80), 19, &(eoa->dyn_operation), 0.0, 0.0, 0, 0, ""); - if (eoa->dyn_operation==4) { - uiDefButF(block, NUM, 0, "", xco+40, yco-63, width-80, 19, - &eoa->mass, 0.0, 10000.0, 10, 0, - "Mass for object"); } - } - str= "Edit Object %t|Add Object %x0|End Object %x1|Replace Mesh %x2|Track to %x3|Dynamics %x4"; - uiDefButS(block, MENU, B_REDR, str, xco+40, yco-24, (width-80), 19, &eoa->type, 0.0, 0.0, 0, 0, ""); + else if (eoa->type==ACT_EDOB_END_OBJECT) { + ysize= 28; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + } + else if (eoa->type==ACT_EDOB_REPLACE_MESH) { + ysize= 48; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - yco-= ysize; + uiDefIDPoinBut(block, test_meshpoin_but, ID_ME, 1, "ME:", xco+40, yco-44, (width-80)/2, 19, &(eoa->me), "replace the existing, when left blank 'Phys' will remake the existing physics mesh"); - break; + uiDefButBitS(block, TOGN, ACT_EDOB_REPLACE_MESH_NOGFX, 0, "Gfx", xco+40 + (width-80)/2, yco-44, (width-80)/4, 19, &eoa->flag, 0, 0, 0, 0, "Replace the display mesh"); + uiDefButBitS(block, TOG, ACT_EDOB_REPLACE_MESH_PHYS, 0, "Phys", xco+40 + (width-80)/2 +(width-80)/4, yco-44, (width-80)/4, 19, &eoa->flag, 0, 0, 0, 0, "Replace the physics mesh (triangle bounds only. compound shapes not supported)"); + } + else if (eoa->type==ACT_EDOB_TRACK_TO) { + ysize= 48; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - case ACT_CONSTRAINT: - coa= act->data; - - if (coa->type == ACT_CONST_TYPE_LOC) { - ysize= 69; + uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "OB:", xco+10, yco-44, (width-20)/2, 19, &(eoa->ob), "Track to this Object"); + uiDefButI(block, NUM, 0, "Time:", xco+10+(width-20)/2, yco-44, (width-20)/2-40, 19, &eoa->time, 0.0, 2000.0, 0, 0, "Duration the tracking takes"); + uiDefButS(block, TOG, 0, "3D", xco+width-50, yco-44, 40, 19, &eoa->flag, 0.0, 0.0, 0, 0, "Enable 3D tracking"); + } + else if (eoa->type==ACT_EDOB_DYNAMICS) { + ysize= 69; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - - /* str= "Limit %t|None %x0|Loc X %x1|Loc Y %x2|Loc Z %x4|Rot X %x8|Rot Y %x16|Rot Z %x32"; */ - /* coa->flag &= ~(63); */ - str= "Limit %t|None %x0|Loc X %x1|Loc Y %x2|Loc Z %x4"; - coa->flag &= 7; - coa->time = 0; - uiDefButS(block, MENU, 1, str, xco+10, yco-65, 70, 19, &coa->flag, 0.0, 0.0, 0, 0, ""); - - uiDefButS(block, NUM, 0, "damp", xco+10, yco-45, 70, 19, &coa->damp, 0.0, 100.0, 0, 0, "Damping factor: time constant (in frame) of low pass filter"); - uiDefBut(block, LABEL, 0, "Min", xco+80, yco-45, (width-90)/2, 19, NULL, 0.0, 0.0, 0, 0, ""); - uiDefBut(block, LABEL, 0, "Max", xco+80+(width-90)/2, yco-45, (width-90)/2, 19, NULL, 0.0, 0.0, 0, 0, ""); - - if (coa->flag & ACT_CONST_LOCX) fp= coa->minloc; - else if (coa->flag & ACT_CONST_LOCY) fp= coa->minloc+1; - else if (coa->flag & ACT_CONST_LOCZ) fp= coa->minloc+2; - else if (coa->flag & ACT_CONST_ROTX) fp= coa->minrot; - else if (coa->flag & ACT_CONST_ROTY) fp= coa->minrot+1; - else fp= coa->minrot+2; - - uiDefButF(block, NUM, 0, "", xco+80, yco-65, (width-90)/2, 19, fp, -2000.0, 2000.0, 10, 0, ""); - uiDefButF(block, NUM, 0, "", xco+80+(width-90)/2, yco-65, (width-90)/2, 19, fp+3, -2000.0, 2000.0, 10, 0, ""); - } - else if (coa->type == ACT_CONST_TYPE_DIST) { - ysize= 106; + str= "Dynamic Operation %t|Restore Dynamics %x0|Suspend Dynamics %x1|Enable Rigid Body %x2|Disable Rigid Body %x3|Set Mass %x4"; + uiDefButS(block, MENU, B_REDR, str, xco+40, yco-44, (width-80), 19, &(eoa->dyn_operation), 0.0, 0.0, 0, 0, ""); + if (eoa->dyn_operation==4) { + uiDefButF(block, NUM, 0, "", xco+40, yco-63, width-80, 19, + &eoa->mass, 0.0, 10000.0, 10, 0, + "Mass for object"); + } + } + str= "Edit Object %t|Add Object %x0|End Object %x1|Replace Mesh %x2|Track to %x3|Dynamics %x4"; + uiDefButS(block, MENU, B_REDR, str, xco+40, yco-24, (width-80), 19, &eoa->type, 0.0, 0.0, 0, 0, ""); - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - - str= "Direction %t|None %x0|X axis %x1|Y axis %x2|Z axis %x4|-X axis %x8|-Y axis %x16|-Z axis %x32"; - uiDefButS(block, MENU, B_REDR, str, xco+10, yco-65, 70, 19, &coa->mode, 0.0, 0.0, 0, 0, "Set the direction of the ray"); - - uiDefButS(block, NUM, 0, "damp", xco+10, yco-45, 70, 19, &coa->damp, 0.0, 100.0, 0, 0, "Damping factor: time constant (in frame) of low pass filter"); - uiDefBut(block, LABEL, 0, "Range", xco+80, yco-45, (width-115)/2, 19, NULL, 0.0, 0.0, 0, 0, "Set the maximum length of ray"); - uiDefButBitS(block, TOG, ACT_CONST_DISTANCE, B_REDR, "Dist", xco+80+(width-115)/2, yco-45, (width-115)/2, 19, &coa->flag, 0.0, 0.0, 0, 0, "Force distance of object to point of impact of ray"); - uiDefButBitS(block, TOG, ACT_CONST_LOCAL, 0, "L", xco+80+(width-115), yco-45, 25, 19, - &coa->flag, 0.0, 0.0, 0, 0, "Set ray along object's axis or global axis"); - - if (coa->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp= coa->minloc; - else if (coa->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp= coa->minloc+1; - else fp= coa->minloc+2; - - uiDefButF(block, NUM, 0, "", xco+80, yco-65, (width-115)/2, 19, fp+3, 0.0, 2000.0, 10, 0, "Maximum length of ray"); - if (coa->flag & ACT_CONST_DISTANCE) - uiDefButF(block, NUM, 0, "", xco+80+(width-115)/2, yco-65, (width-115)/2, 19, fp, -2000.0, 2000.0, 10, 0, "Keep this distance to target"); - uiDefButBitS(block, TOG, ACT_CONST_NORMAL, 0, "N", xco+80+(width-115), yco-65, 25, 19, - &coa->flag, 0.0, 0.0, 0, 0, "Set object axis along (local axis) or parallel (global axis) to the normal at hit position"); - uiDefButBitS(block, TOG, ACT_CONST_MATERIAL, B_REDR, "M/P", xco+10, yco-84, 40, 19, - &coa->flag, 0.0, 0.0, 0, 0, "Detect material instead of property"); - if (coa->flag & ACT_CONST_MATERIAL) { - uiDefBut(block, TEX, 1, "Material:", xco + 50, yco-84, (width-60), 19, - coa->matprop, 0, MAX_NAME, 0, 0, - "Ray detects only Objects with this material"); + yco-= ysize; + + break; + + case ACT_CONSTRAINT: + coa= act->data; + + if (coa->type == ACT_CONST_TYPE_LOC) { + ysize= 69; + + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + + /* str= "Limit %t|None %x0|Loc X %x1|Loc Y %x2|Loc Z %x4|Rot X %x8|Rot Y %x16|Rot Z %x32"; */ + /* coa->flag &= ~(63); */ + str= "Limit %t|None %x0|Loc X %x1|Loc Y %x2|Loc Z %x4"; + coa->flag &= 7; + coa->time = 0; + uiDefButS(block, MENU, 1, str, xco+10, yco-65, 70, 19, &coa->flag, 0.0, 0.0, 0, 0, ""); + + uiDefButS(block, NUM, 0, "damp", xco+10, yco-45, 70, 19, &coa->damp, 0.0, 100.0, 0, 0, "Damping factor: time constant (in frame) of low pass filter"); + uiDefBut(block, LABEL, 0, "Min", xco+80, yco-45, (width-90)/2, 19, NULL, 0.0, 0.0, 0, 0, ""); + uiDefBut(block, LABEL, 0, "Max", xco+80+(width-90)/2, yco-45, (width-90)/2, 19, NULL, 0.0, 0.0, 0, 0, ""); + + if (coa->flag & ACT_CONST_LOCX) fp= coa->minloc; + else if (coa->flag & ACT_CONST_LOCY) fp= coa->minloc+1; + else if (coa->flag & ACT_CONST_LOCZ) fp= coa->minloc+2; + else if (coa->flag & ACT_CONST_ROTX) fp= coa->minrot; + else if (coa->flag & ACT_CONST_ROTY) fp= coa->minrot+1; + else fp= coa->minrot+2; + + uiDefButF(block, NUM, 0, "", xco+80, yco-65, (width-90)/2, 19, fp, -2000.0, 2000.0, 10, 0, ""); + uiDefButF(block, NUM, 0, "", xco+80+(width-90)/2, yco-65, (width-90)/2, 19, fp+3, -2000.0, 2000.0, 10, 0, ""); } - else { - uiDefBut(block, TEX, 1, "Property:", xco + 50, yco-84, (width-60), 19, - coa->matprop, 0, MAX_NAME, 0, 0, - "Ray detect only Objects with this property"); + else if (coa->type == ACT_CONST_TYPE_DIST) { + ysize= 106; + + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + + str= "Direction %t|None %x0|X axis %x1|Y axis %x2|Z axis %x4|-X axis %x8|-Y axis %x16|-Z axis %x32"; + uiDefButS(block, MENU, B_REDR, str, xco+10, yco-65, 70, 19, &coa->mode, 0.0, 0.0, 0, 0, "Set the direction of the ray"); + + uiDefButS(block, NUM, 0, "damp", xco+10, yco-45, 70, 19, &coa->damp, 0.0, 100.0, 0, 0, "Damping factor: time constant (in frame) of low pass filter"); + uiDefBut(block, LABEL, 0, "Range", xco+80, yco-45, (width-115)/2, 19, NULL, 0.0, 0.0, 0, 0, "Set the maximum length of ray"); + uiDefButBitS(block, TOG, ACT_CONST_DISTANCE, B_REDR, "Dist", xco+80+(width-115)/2, yco-45, (width-115)/2, 19, &coa->flag, 0.0, 0.0, 0, 0, "Force distance of object to point of impact of ray"); + uiDefButBitS(block, TOG, ACT_CONST_LOCAL, 0, "L", xco+80+(width-115), yco-45, 25, 19, + &coa->flag, 0.0, 0.0, 0, 0, "Set ray along object's axis or global axis"); + + if (coa->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp= coa->minloc; + else if (coa->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp= coa->minloc+1; + else fp= coa->minloc+2; + + uiDefButF(block, NUM, 0, "", xco+80, yco-65, (width-115)/2, 19, fp+3, 0.0, 2000.0, 10, 0, "Maximum length of ray"); + if (coa->flag & ACT_CONST_DISTANCE) + uiDefButF(block, NUM, 0, "", xco+80+(width-115)/2, yco-65, (width-115)/2, 19, fp, -2000.0, 2000.0, 10, 0, "Keep this distance to target"); + uiDefButBitS(block, TOG, ACT_CONST_NORMAL, 0, "N", xco+80+(width-115), yco-65, 25, 19, + &coa->flag, 0.0, 0.0, 0, 0, "Set object axis along (local axis) or parallel (global axis) to the normal at hit position"); + uiDefButBitS(block, TOG, ACT_CONST_MATERIAL, B_REDR, "M/P", xco+10, yco-84, 40, 19, + &coa->flag, 0.0, 0.0, 0, 0, "Detect material instead of property"); + if (coa->flag & ACT_CONST_MATERIAL) { + uiDefBut(block, TEX, 1, "Material:", xco + 50, yco-84, (width-60), 19, + coa->matprop, 0, MAX_NAME, 0, 0, + "Ray detects only Objects with this material"); + } + else { + uiDefBut(block, TEX, 1, "Property:", xco + 50, yco-84, (width-60), 19, + coa->matprop, 0, MAX_NAME, 0, 0, + "Ray detect only Objects with this property"); + } + uiDefButBitS(block, TOG, ACT_CONST_PERMANENT, 0, "PER", xco+10, yco-103, 40, 19, + &coa->flag, 0.0, 0.0, 0, 0, "Persistent actuator: stays active even if ray does not reach target"); + uiDefButS(block, NUM, 0, "time", xco+50, yco-103, (width-60)/2, 19, &(coa->time), 0.0, 1000.0, 0, 0, "Maximum activation time in frame, 0 for unlimited"); + uiDefButS(block, NUM, 0, "rotDamp", xco+50+(width-60)/2, yco-103, (width-60)/2, 19, &(coa->rotdamp), 0.0, 100.0, 0, 0, "Use a different damping for orientation"); } - uiDefButBitS(block, TOG, ACT_CONST_PERMANENT, 0, "PER", xco+10, yco-103, 40, 19, - &coa->flag, 0.0, 0.0, 0, 0, "Persistent actuator: stays active even if ray does not reach target"); - uiDefButS(block, NUM, 0, "time", xco+50, yco-103, (width-60)/2, 19, &(coa->time), 0.0, 1000.0, 0, 0, "Maximum activation time in frame, 0 for unlimited"); - uiDefButS(block, NUM, 0, "rotDamp", xco+50+(width-60)/2, yco-103, (width-60)/2, 19, &(coa->rotdamp), 0.0, 100.0, 0, 0, "Use a different damping for orientation"); - } - else if (coa->type == ACT_CONST_TYPE_ORI) { - ysize= 87; + else if (coa->type == ACT_CONST_TYPE_ORI) { + ysize= 87; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - - str= "Direction %t|None %x0|X axis %x1|Y axis %x2|Z axis %x4"; - uiDefButS(block, MENU, B_REDR, str, xco+10, yco-65, 70, 19, &coa->mode, 0.0, 0.0, 0, 0, "Select the axis to be aligned along the reference direction"); - - uiDefButS(block, NUM, 0, "damp", xco+10, yco-45, 70, 19, &coa->damp, 0.0, 100.0, 0, 0, "Damping factor: time constant (in frame) of low pass filter"); - uiDefBut(block, LABEL, 0, "X", xco+80, yco-45, (width-115)/3, 19, NULL, 0.0, 0.0, 0, 0, ""); - uiDefBut(block, LABEL, 0, "Y", xco+80+(width-115)/3, yco-45, (width-115)/3, 19, NULL, 0.0, 0.0, 0, 0, ""); - uiDefBut(block, LABEL, 0, "Z", xco+80+2*(width-115)/3, yco-45, (width-115)/3, 19, NULL, 0.0, 0.0, 0, 0, ""); - - uiDefButF(block, NUM, 0, "", xco+80, yco-65, (width-115)/3, 19, &coa->maxrot[0], -2000.0, 2000.0, 10, 0, "X component of reference direction"); - uiDefButF(block, NUM, 0, "", xco+80+(width-115)/3, yco-65, (width-115)/3, 19, &coa->maxrot[1], -2000.0, 2000.0, 10, 0, "Y component of reference direction"); - uiDefButF(block, NUM, 0, "", xco+80+2*(width-115)/3, yco-65, (width-115)/3, 19, &coa->maxrot[2], -2000.0, 2000.0, 10, 0, "Z component of reference direction"); - - uiDefButS(block, NUM, 0, "time", xco+10, yco-84, 70, 19, &(coa->time), 0.0, 1000.0, 0, 0, "Maximum activation time in frame, 0 for unlimited"); - uiDefButF(block, NUM, 0, "min", xco+80, yco-84, (width-115)/2, 19, &(coa->minloc[0]), 0.0, 180.0, 10, 1, "Minimum angle (in degree) to maintain with target direction. No correction is done if angle with target direction is between min and max"); - uiDefButF(block, NUM, 0, "max", xco+80+(width-115)/2, yco-84, (width-115)/2, 19, &(coa->maxloc[0]), 0.0, 180.0, 10, 1, "Maximum angle (in degree) allowed with target direction. No correction is done if angle with target direction is between min and max"); - } - else if (coa->type == ACT_CONST_TYPE_FH) { - ysize= 106; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - - str= "Direction %t|None %x0|X axis %x1|Y axis %x2|Z axis %x4|-X axis %x8|-Y axis %x16|-Z axis %x32"; - uiDefButS(block, MENU, B_REDR, str, xco+10, yco-65, 70, 19, &coa->mode, 0.0, 0.0, 0, 0, "Set the direction of the ray (in world coordinate)"); - - if (coa->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp= coa->minloc; - else if (coa->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp= coa->minloc+1; - else fp= coa->minloc+2; - - uiDefButF(block, NUM, 0, "damp", xco+10, yco-45, (width-70)/2, 19, &coa->maxrot[0], 0.0, 1.0, 1, 0, "Damping factor of the Fh spring force"); - uiDefButF(block, NUM, 0, "dist", xco+10+(width-70)/2, yco-45, (width-70)/2, 19, fp, 0.010, 2000.0, 10, 0, "Height of the Fh area"); - uiDefButBitS(block, TOG, ACT_CONST_DOROTFH, 0, "Rot Fh", xco+10+(width-70), yco-45, 50, 19, &coa->flag, 0.0, 0.0, 0, 0, "Keep object axis parallel to normal"); - - uiDefButF(block, NUMSLI, 0, "Fh ", xco+80, yco-65, (width-115), 19, fp+3, 0.0, 1.0, 0, 0, "Spring force within the Fh area"); - uiDefButBitS(block, TOG, ACT_CONST_NORMAL, 0, "N", xco+80+(width-115), yco-65, 25, 19, - &coa->flag, 0.0, 0.0, 0, 0, "Add a horizontal spring force on slopes"); - uiDefButBitS(block, TOG, ACT_CONST_MATERIAL, B_REDR, "M/P", xco+10, yco-84, 40, 19, - &coa->flag, 0.0, 0.0, 0, 0, "Detect material instead of property"); - if (coa->flag & ACT_CONST_MATERIAL) { - uiDefBut(block, TEX, 1, "Material:", xco + 50, yco-84, (width-60), 19, - coa->matprop, 0, MAX_NAME, 0, 0, - "Ray detects only Objects with this material"); + str= "Direction %t|None %x0|X axis %x1|Y axis %x2|Z axis %x4"; + uiDefButS(block, MENU, B_REDR, str, xco+10, yco-65, 70, 19, &coa->mode, 0.0, 0.0, 0, 0, "Select the axis to be aligned along the reference direction"); + + uiDefButS(block, NUM, 0, "damp", xco+10, yco-45, 70, 19, &coa->damp, 0.0, 100.0, 0, 0, "Damping factor: time constant (in frame) of low pass filter"); + uiDefBut(block, LABEL, 0, "X", xco+80, yco-45, (width-115)/3, 19, NULL, 0.0, 0.0, 0, 0, ""); + uiDefBut(block, LABEL, 0, "Y", xco+80+(width-115)/3, yco-45, (width-115)/3, 19, NULL, 0.0, 0.0, 0, 0, ""); + uiDefBut(block, LABEL, 0, "Z", xco+80+2*(width-115)/3, yco-45, (width-115)/3, 19, NULL, 0.0, 0.0, 0, 0, ""); + + uiDefButF(block, NUM, 0, "", xco+80, yco-65, (width-115)/3, 19, &coa->maxrot[0], -2000.0, 2000.0, 10, 0, "X component of reference direction"); + uiDefButF(block, NUM, 0, "", xco+80+(width-115)/3, yco-65, (width-115)/3, 19, &coa->maxrot[1], -2000.0, 2000.0, 10, 0, "Y component of reference direction"); + uiDefButF(block, NUM, 0, "", xco+80+2*(width-115)/3, yco-65, (width-115)/3, 19, &coa->maxrot[2], -2000.0, 2000.0, 10, 0, "Z component of reference direction"); + + uiDefButS(block, NUM, 0, "time", xco+10, yco-84, 70, 19, &(coa->time), 0.0, 1000.0, 0, 0, "Maximum activation time in frame, 0 for unlimited"); + uiDefButF(block, NUM, 0, "min", xco+80, yco-84, (width-115)/2, 19, &(coa->minloc[0]), 0.0, 180.0, 10, 1, "Minimum angle (in degree) to maintain with target direction. No correction is done if angle with target direction is between min and max"); + uiDefButF(block, NUM, 0, "max", xco+80+(width-115)/2, yco-84, (width-115)/2, 19, &(coa->maxloc[0]), 0.0, 180.0, 10, 1, "Maximum angle (in degree) allowed with target direction. No correction is done if angle with target direction is between min and max"); } - else { - uiDefBut(block, TEX, 1, "Property:", xco + 50, yco-84, (width-60), 19, - coa->matprop, 0, MAX_NAME, 0, 0, - "Ray detect only Objects with this property"); + else if (coa->type == ACT_CONST_TYPE_FH) { + ysize= 106; + + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + + str= "Direction %t|None %x0|X axis %x1|Y axis %x2|Z axis %x4|-X axis %x8|-Y axis %x16|-Z axis %x32"; + uiDefButS(block, MENU, B_REDR, str, xco+10, yco-65, 70, 19, &coa->mode, 0.0, 0.0, 0, 0, "Set the direction of the ray (in world coordinate)"); + + if (coa->mode & (ACT_CONST_DIRPX|ACT_CONST_DIRNX)) fp= coa->minloc; + else if (coa->mode & (ACT_CONST_DIRPY|ACT_CONST_DIRNY)) fp= coa->minloc+1; + else fp= coa->minloc+2; + + uiDefButF(block, NUM, 0, "damp", xco+10, yco-45, (width-70)/2, 19, &coa->maxrot[0], 0.0, 1.0, 1, 0, "Damping factor of the Fh spring force"); + uiDefButF(block, NUM, 0, "dist", xco+10+(width-70)/2, yco-45, (width-70)/2, 19, fp, 0.010, 2000.0, 10, 0, "Height of the Fh area"); + uiDefButBitS(block, TOG, ACT_CONST_DOROTFH, 0, "Rot Fh", xco+10+(width-70), yco-45, 50, 19, &coa->flag, 0.0, 0.0, 0, 0, "Keep object axis parallel to normal"); + + uiDefButF(block, NUMSLI, 0, "Fh ", xco+80, yco-65, (width-115), 19, fp+3, 0.0, 1.0, 0, 0, "Spring force within the Fh area"); + uiDefButBitS(block, TOG, ACT_CONST_NORMAL, 0, "N", xco+80+(width-115), yco-65, 25, 19, + &coa->flag, 0.0, 0.0, 0, 0, "Add a horizontal spring force on slopes"); + uiDefButBitS(block, TOG, ACT_CONST_MATERIAL, B_REDR, "M/P", xco+10, yco-84, 40, 19, + &coa->flag, 0.0, 0.0, 0, 0, "Detect material instead of property"); + if (coa->flag & ACT_CONST_MATERIAL) { + uiDefBut(block, TEX, 1, "Material:", xco + 50, yco-84, (width-60), 19, + coa->matprop, 0, MAX_NAME, 0, 0, + "Ray detects only Objects with this material"); + } + else { + uiDefBut(block, TEX, 1, "Property:", xco + 50, yco-84, (width-60), 19, + coa->matprop, 0, MAX_NAME, 0, 0, + "Ray detect only Objects with this property"); + } + uiDefButBitS(block, TOG, ACT_CONST_PERMANENT, 0, "PER", xco+10, yco-103, 40, 19, + &coa->flag, 0.0, 0.0, 0, 0, "Persistent actuator: stays active even if ray does not reach target"); + uiDefButS(block, NUM, 0, "time", xco+50, yco-103, 90, 19, &(coa->time), 0.0, 1000.0, 0, 0, "Maximum activation time in frame, 0 for unlimited"); + uiDefButF(block, NUM, 0, "rotDamp", xco+140, yco-103, (width-150), 19, &coa->maxrot[1], 0.0, 1.0, 1, 0, "Use a different damping for rotation"); } - uiDefButBitS(block, TOG, ACT_CONST_PERMANENT, 0, "PER", xco+10, yco-103, 40, 19, - &coa->flag, 0.0, 0.0, 0, 0, "Persistent actuator: stays active even if ray does not reach target"); - uiDefButS(block, NUM, 0, "time", xco+50, yco-103, 90, 19, &(coa->time), 0.0, 1000.0, 0, 0, "Maximum activation time in frame, 0 for unlimited"); - uiDefButF(block, NUM, 0, "rotDamp", xco+140, yco-103, (width-150), 19, &coa->maxrot[1], 0.0, 1.0, 1, 0, "Use a different damping for rotation"); - } - str= "Constraint Type %t|Location %x0|Distance %x1|Orientation %x2|Force field %x3"; - but = uiDefButS(block, MENU, B_REDR, str, xco+40, yco-23, (width-80), 19, &coa->type, 0.0, 0.0, 0, 0, ""); - yco-= ysize; - break; + str= "Constraint Type %t|Location %x0|Distance %x1|Orientation %x2|Force field %x3"; + but = uiDefButS(block, MENU, B_REDR, str, xco+40, yco-23, (width-80), 19, &coa->type, 0.0, 0.0, 0, 0, ""); + yco-= ysize; + break; - case ACT_SCENE: - sca= act->data; - - if (sca->type==ACT_SCENE_RESTART) { - ysize= 28; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - } - else if (sca->type==ACT_SCENE_CAMERA) { + case ACT_SCENE: + sca= act->data; - ysize= 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + if (sca->type==ACT_SCENE_RESTART) { + ysize= 28; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + } + else if (sca->type==ACT_SCENE_CAMERA) { - uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "OB:", xco+40, yco-44, (width-80), 19, &(sca->camera), "Set this Camera. Leave empty to refer to self object"); - } - else if (sca->type==ACT_SCENE_SET) { - - ysize= 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + ysize= 48; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Set this Scene"); - } - else if (sca->type==ACT_SCENE_ADD_FRONT) { - - ysize= 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "OB:", xco+40, yco-44, (width-80), 19, &(sca->camera), "Set this Camera. Leave empty to refer to self object"); + } + else if (sca->type==ACT_SCENE_SET) { - uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Add an Overlay Scene"); - } - else if (sca->type==ACT_SCENE_ADD_BACK) { - - ysize= 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + ysize= 48; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Add a Background Scene"); - } - else if (sca->type==ACT_SCENE_REMOVE) { - - ysize= 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Set this Scene"); + } + else if (sca->type==ACT_SCENE_ADD_FRONT) { - uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Remove a Scene"); - } - else if (sca->type==ACT_SCENE_SUSPEND) { - - ysize= 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + ysize= 48; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Pause a Scene"); - } - else if (sca->type==ACT_SCENE_RESUME) { - - ysize= 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Add an Overlay Scene"); + } + else if (sca->type==ACT_SCENE_ADD_BACK) { - uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Unpause a Scene"); - } + ysize= 48; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - str= "Scene %t|Restart %x0|Set Scene %x1|Set Camera %x2|Add OverlayScene %x3|Add BackgroundScene %x4|Remove Scene %x5|Suspend Scene %x6|Resume Scene %x7"; - uiDefButS(block, MENU, B_REDR, str, xco+40, yco-24, (width-80), 19, &sca->type, 0.0, 0.0, 0, 0, ""); + uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Add a Background Scene"); + } + else if (sca->type==ACT_SCENE_REMOVE) { - yco-= ysize; - break; - case ACT_GAME: + ysize= 48; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + + uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Remove a Scene"); + } + else if (sca->type==ACT_SCENE_SUSPEND) { + + ysize= 48; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + + uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Pause a Scene"); + } + else if (sca->type==ACT_SCENE_RESUME) { + + ysize= 48; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + + uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 1, "SCE:", xco+40, yco-44, (width-80), 19, &(sca->scene), "Unpause a Scene"); + } + + str= "Scene %t|Restart %x0|Set Scene %x1|Set Camera %x2|Add OverlayScene %x3|Add BackgroundScene %x4|Remove Scene %x5|Suspend Scene %x6|Resume Scene %x7"; + uiDefButS(block, MENU, B_REDR, str, xco+40, yco-24, (width-80), 19, &sca->type, 0.0, 0.0, 0, 0, ""); + + yco-= ysize; + break; + case ACT_GAME: { gma = act->data; if (gma->type == ACT_GAME_LOAD) { //ysize = 68; ysize = 48; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - uiDefBut(block, TEX, 1, "File: ", xco+10, yco-44, width-20, 19, &(gma->filename), 0, sizeof(gma->filename), 0, 0, "Load this blend file, use the \"//\" prefix for a path relative to the current blend file"); -// uiDefBut(block, TEX, 1, "Anim: ", xco+10, yco-64, width-20, 19, &(gma->loadaniname), 0, sizeof(gma->loadaniname), 0, 0, "Use this loadinganimation"); + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + uiDefBut(block, TEX, 1, "File: ", xco+10, yco-44, width-20, 19, &(gma->filename), 0, sizeof(gma->filename), 0, 0, "Load this blend file, use the \"//\" prefix for a path relative to the current blend file"); + // uiDefBut(block, TEX, 1, "Anim: ", xco+10, yco-64, width-20, 19, &(gma->loadaniname), 0, sizeof(gma->loadaniname), 0, 0, "Use this loadinganimation"); } #if 0 else if (gma->type == ACT_GAME_START) { - ysize = 68; - glRects(xco, yco-ysize, xco+width, yco); + ysize = 68; + glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - uiDefBut(block, TEX, 1, "File: ", xco+10, yco-44, width-20, 19, &(gma->filename), 0, sizeof(gma->filename), 0, 0, "Load this file"); + uiDefBut(block, TEX, 1, "File: ", xco+10, yco-44, width-20, 19, &(gma->filename), 0, sizeof(gma->filename), 0, 0, "Load this file"); uiDefBut(block, TEX, 1, "Anim: ", xco+10, yco-64, width-20, 19, &(gma->loadaniname), 0, sizeof(gma->loadaniname), 0, 0, "Use this loadinganimation"); } #endif else if (ELEM4(gma->type, ACT_GAME_RESTART, ACT_GAME_QUIT, ACT_GAME_SAVECFG, ACT_GAME_LOADCFG)) { - ysize = 28; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + ysize = 28; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); } //str = "Scene %t|Load game%x0|Start loaded game%x1|Restart this game%x2|Quit this game %x3"; str = "Scene %t|Start new game%x0|Restart this game%x2|Quit this game %x3|Save bge.logic.globalDict %x4|Load bge.logic.globalDict %x5"; - uiDefButS(block, MENU, B_REDR, str, xco+40, yco-24, (width-80), 19, &gma->type, 0.0, 0.0, 0, 0, ""); + uiDefButS(block, MENU, B_REDR, str, xco+40, yco-24, (width-80), 19, &gma->type, 0.0, 0.0, 0, 0, ""); - yco -= ysize; - break; + yco -= ysize; + break; } - case ACT_GROUP: - ga= act->data; + case ACT_GROUP: + ga= act->data; - ysize= 52; + ysize= 52; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - - str= "GroupKey types %t|Set Key %x6|Play %x0|Ping Pong %x1|Flipper %x2|Loop Stop %x3|Loop End %x4|Property %x5"; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - uiDefButS(block, MENU, 1, str, xco+20, yco-24, width-40, 19, &ga->type, 0, 0, 0, 0, ""); - if (ga->type==ACT_GROUP_SET) { - uiDefBut(block, TEX, 0, "Key: ", xco+20, yco-44, (width-10)/2, 19, ga->name, 0.0, MAX_NAME, 0, 0, "This name defines groupkey to be set"); - uiDefButI(block, NUM, 0, "Frame:", xco+20+(width-10)/2, yco-44, (width-70)/2, 19, &ga->sta, 0.0, 2500.0, 0, 0, "Set this frame"); - } - else if (ga->type==ACT_GROUP_FROM_PROP) { - uiDefBut(block, TEX, 0, "Prop: ", xco+20, yco-44, width-40, 19, ga->name, 0.0, MAX_NAME, 0, 0, "Use this property to define the Group position"); - } - else { - uiDefButI(block, NUM, 0, "State", xco+20, yco-44, (width-40)/2, 19, &ga->sta, 0.0, 2500.0, 0, 0, "Start frame"); - uiDefButI(block, NUM, 0, "End", xco+20+(width-40)/2, yco-44, (width-40)/2, 19, &ga->end, 0.0, 2500.0, 0, 0, "End frame"); - } - yco-= ysize; - break; + str= "GroupKey types %t|Set Key %x6|Play %x0|Ping Pong %x1|Flipper %x2|Loop Stop %x3|Loop End %x4|Property %x5"; - case ACT_VISIBILITY: - ysize = 24; + uiDefButS(block, MENU, 1, str, xco+20, yco-24, width-40, 19, &ga->type, 0, 0, 0, 0, ""); + if (ga->type==ACT_GROUP_SET) { + uiDefBut(block, TEX, 0, "Key: ", xco+20, yco-44, (width-10)/2, 19, ga->name, 0.0, MAX_NAME, 0, 0, "This name defines groupkey to be set"); + uiDefButI(block, NUM, 0, "Frame:", xco+20+(width-10)/2, yco-44, (width-70)/2, 19, &ga->sta, 0.0, 2500.0, 0, 0, "Set this frame"); + } + else if (ga->type==ACT_GROUP_FROM_PROP) { + uiDefBut(block, TEX, 0, "Prop: ", xco+20, yco-44, width-40, 19, ga->name, 0.0, MAX_NAME, 0, 0, "Use this property to define the Group position"); + } + else { + uiDefButI(block, NUM, 0, "State", xco+20, yco-44, (width-40)/2, 19, &ga->sta, 0.0, 2500.0, 0, 0, "Start frame"); + uiDefButI(block, NUM, 0, "End", xco+20+(width-40)/2, yco-44, (width-40)/2, 19, &ga->end, 0.0, 2500.0, 0, 0, "End frame"); + } + yco-= ysize; + break; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, - (float)yco-ysize, (float)xco+width, (float)yco, 1); - - visAct = act->data; + case ACT_VISIBILITY: + ysize = 24; - uiBlockBeginAlign(block); - uiDefButBitI(block, TOGN, ACT_VISIBILITY_INVISIBLE, B_REDR, - "Visible", - xco + 10, yco - 20, (width - 20)/3, 19, &visAct->flag, - 0.0, 0.0, 0, 0, - "Set the objects visible. Initialized from the objects render restriction toggle (access in the outliner)"); - uiDefButBitI(block, TOG, ACT_VISIBILITY_OCCLUSION, B_REDR, - "Occlusion", - xco + 10 + ((width - 20)/3), yco - 20, (width - 20)/3, 19, &visAct->flag, - 0.0, 0.0, 0, 0, - "Set the object to occlude objects behind it. Initialized from the object type in physics button"); - uiBlockEndAlign(block); - - uiDefButBitI(block, TOG, ACT_VISIBILITY_RECURSIVE, 0, - "Children", - xco + 10 + (((width - 20)/3)*2)+10, yco - 20, ((width - 20)/3)-10, 19, &visAct->flag, - 0.0, 0.0, 0, 0, - "Sets all the children of this object to the same visibility/occlusion recursively"); + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, + (float)yco-ysize, (float)xco+width, (float)yco, 1); - yco-= ysize; + visAct = act->data; - break; - - case ACT_STATE: - ysize = 34; + uiBlockBeginAlign(block); + uiDefButBitI(block, TOGN, ACT_VISIBILITY_INVISIBLE, B_REDR, + "Visible", + xco + 10, yco - 20, (width - 20)/3, 19, &visAct->flag, + 0.0, 0.0, 0, 0, + "Set the objects visible. Initialized from the objects render restriction toggle (access in the outliner)"); + uiDefButBitI(block, TOG, ACT_VISIBILITY_OCCLUSION, B_REDR, + "Occlusion", + xco + 10 + ((width - 20)/3), yco - 20, (width - 20)/3, 19, &visAct->flag, + 0.0, 0.0, 0, 0, + "Set the object to occlude objects behind it. Initialized from the object type in physics button"); + uiBlockEndAlign(block); - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, - (float)yco-ysize, (float)xco+width, (float)yco, 1); - - staAct = act->data; + uiDefButBitI(block, TOG, ACT_VISIBILITY_RECURSIVE, 0, + "Children", + xco + 10 + (((width - 20)/3)*2)+10, yco - 20, ((width - 20)/3)-10, 19, &visAct->flag, + 0.0, 0.0, 0, 0, + "Sets all the children of this object to the same visibility/occlusion recursively"); - str= "Operation %t|Cpy %x0|Add %x1|Sub %x2|Inv %x3"; + yco-= ysize; - uiDefButI(block, MENU, B_REDR, str, - xco + 10, yco - 24, 65, 19, &staAct->type, - 0.0, 0.0, 0, 0, - "Select the bit operation on object state mask"); + break; - for (wval=0; wval<15; wval+=5) { - uiBlockBeginAlign(block); - for (stbit=0; stbit<5; stbit++) { - but = uiDefButBitI(block, TOG, 1<<(stbit+wval), stbit+wval, "", (short)(xco+85+12*stbit+13*wval), yco-17, 12, 12, (int *)&(staAct->mask), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+wval))); - uiButSetFunc(but, check_state_mask, but, &(staAct->mask)); - } - for (stbit=0; stbit<5; stbit++) { - but = uiDefButBitI(block, TOG, 1<<(stbit+wval+15), stbit+wval+15, "", (short)(xco+85+12*stbit+13*wval), yco-29, 12, 12, (int *)&(staAct->mask), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+wval+15))); - uiButSetFunc(but, check_state_mask, but, &(staAct->mask)); - } - } - uiBlockEndAlign(block); + case ACT_STATE: + ysize = 34; - yco-= ysize; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, + (float)yco-ysize, (float)xco+width, (float)yco, 1); - break; + staAct = act->data; - case ACT_RANDOM: - ysize = 69; + str= "Operation %t|Cpy %x0|Add %x1|Sub %x2|Inv %x3"; + + uiDefButI(block, MENU, B_REDR, str, + xco + 10, yco - 24, 65, 19, &staAct->type, + 0.0, 0.0, 0, 0, + "Select the bit operation on object state mask"); + + for (wval=0; wval<15; wval+=5) { + uiBlockBeginAlign(block); + for (stbit=0; stbit<5; stbit++) { + but = uiDefButBitI(block, TOG, 1<<(stbit+wval), stbit+wval, "", (short)(xco+85+12*stbit+13*wval), yco-17, 12, 12, (int *)&(staAct->mask), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+wval))); + uiButSetFunc(but, check_state_mask, but, &(staAct->mask)); + } + for (stbit=0; stbit<5; stbit++) { + but = uiDefButBitI(block, TOG, 1<<(stbit+wval+15), stbit+wval+15, "", (short)(xco+85+12*stbit+13*wval), yco-29, 12, 12, (int *)&(staAct->mask), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+wval+15))); + uiButSetFunc(but, check_state_mask, but, &(staAct->mask)); + } + } + uiBlockEndAlign(block); + + yco-= ysize; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, - (float)yco-ysize, (float)xco+width, (float)yco, 1); - - randAct = act->data; - - /* 1. seed */ - uiDefButI(block, NUM, 1, "Seed: ", (xco+10), yco-24, 0.4 *(width-20), 19, - &randAct->seed, 0, 1000, 0, 0, - "Initial seed of the random generator. Use Python for more freedom. " - " (Choose 0 for not random)"); - - /* 2. distribution type */ - /* One pick per distribution. These numbers MUST match the #defines */ - /* in game.h !!! */ - str= "Distribution %t|Bool Constant %x0|Bool Uniform %x1" - "|Bool Bernoulli %x2|Int Constant %x3|Int Uniform %x4" - "|Int Poisson %x5|Float Constant %x6|Float Uniform %x7" - "|Float Normal %x8|Float Neg. Exp. %x9"; - uiDefButI(block, MENU, B_REDR, str, (xco+10) + 0.4 * (width-20), yco-24, 0.6 * (width-20), 19, - &randAct->distribution, 0.0, 0.0, 0, 0, - "Choose the type of distribution"); - - /* 3. property */ - uiDefBut(block, TEX, 1, "Property:", (xco+10), yco-44, (width-20), 19, - &randAct->propname, 0, MAX_NAME, 0, 0, - "Assign the random value to this property"); - - /*4. and 5. arguments for the distribution*/ - switch (randAct->distribution) { - case ACT_RANDOM_BOOL_CONST: - uiDefButBitI(block, TOG, 1, 1, "Always true", (xco+10), yco-64, (width-20), 19, - &randAct->int_arg_1, 2.0, 1, 0, 0, - "Always false or always true"); - break; - case ACT_RANDOM_BOOL_UNIFORM: - uiDefBut(block, LABEL, 0, " Do a 50-50 pick", (xco+10), yco-64, (width-20), 19, - NULL, 0, 0, 0, 0, - "Choose between true and false, 50% chance each"); - break; - case ACT_RANDOM_BOOL_BERNOUILLI: - uiDefButF(block, NUM, 1, "Chance", (xco+10), yco-64, (width-20), 19, - &randAct->float_arg_1, 0.0, 1.0, 0, 0, - "Pick a number between 0 and 1. Success if you stay " - "below this value"); - break; - case ACT_RANDOM_INT_CONST: - uiDefButI(block, NUM, 1, "Value: ", (xco+10), yco-64, (width-20), 19, - &randAct->int_arg_1, -1000, 1000, 0, 0, - "Always return this number"); - break; - case ACT_RANDOM_INT_UNIFORM: - uiDefButI(block, NUM, 1, "Min: ", (xco+10), yco-64, (width-20)/2, 19, - &randAct->int_arg_1, -1000, 1000, 0, 0, - "Choose a number from a range. " - "Lower boundary of the range"); - uiDefButI(block, NUM, 1, "Max: ", (xco+10) + (width-20)/2, yco-64, (width-20)/2, 19, - &randAct->int_arg_2, -1000, 1000, 0, 0, - "Choose a number from a range. " - "Upper boundary of the range"); - break; - case ACT_RANDOM_INT_POISSON: - uiDefButF(block, NUM, 1, "Mean: ", (xco+10), yco-64, (width-20), 19, - &randAct->float_arg_1, 0.01, 100.0, 0, 0, - "Expected mean value of the distribution"); - break; - case ACT_RANDOM_FLOAT_CONST: - uiDefButF(block, NUM, 1, "Value: ", (xco+10), yco-64, (width-20), 19, - &randAct->float_arg_1, 0.0, 1.0, 0, 0, - "Always return this number"); - break; - case ACT_RANDOM_FLOAT_UNIFORM: - uiDefButF(block, NUM, 1, "Min: ", (xco+10), yco-64, (width-20)/2, 19, - &randAct->float_arg_1, -10000.0, 10000.0, 0, 0, - "Choose a number from a range" - "Lower boundary of the range"); - uiDefButF(block, NUM, 1, "Max: ", (xco+10) + (width-20)/2, yco-64, (width-20)/2, 19, - &randAct->float_arg_2, -10000.0, 10000.0, 0, 0, - "Choose a number from a range" - "Upper boundary of the range"); - break; - case ACT_RANDOM_FLOAT_NORMAL: - uiDefButF(block, NUM, 1, "Mean: ", (xco+10), yco-64, (width-20)/2, 19, - &randAct->float_arg_1, -10000.0, 10000.0, 0, 0, - "A normal distribution. Mean of the distribution"); - uiDefButF(block, NUM, 1, "SD: ", (xco+10) + (width-20)/2, yco-64, (width-20)/2, 19, - &randAct->float_arg_2, 0.0, 10000.0, 0, 0, - "A normal distribution. Standard deviation of the " - "distribution"); - break; - case ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL: - uiDefButF(block, NUM, 1, "Half-life time: ", (xco+10), yco-64, (width-20), 19, - &randAct->float_arg_1, 0.001, 10000.0, 0, 0, - "Negative exponential dropoff"); break; - default: - ; /* don't know what this distro is... can be useful for testing */ - /* though :) */ - } - yco-= ysize; - break; - case ACT_MESSAGE: - ma = act->data; + case ACT_RANDOM: + ysize = 69; - ysize = 4 + (3 * 24); /* footer + number of lines * 24 pixels/line */ - - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, - (float)xco+width, (float)yco, 1); - - myline=1; - - /* line 1: To */ - uiDefBut(block, TEX, 1, "To: ", - (xco+10), (yco-(myline++*24)), (width-20), 19, - &ma->toPropName, 0, MAX_NAME, 0, 0, - "Optional send message to objects with this name only, or empty to broadcast"); - - /* line 2: Message Subject */ - uiDefBut(block, TEX, 1, "Subject: ", - (xco+10), (yco-(myline++*24)), (width-20), 19, - &ma->subject, 0, MAX_NAME, 0, 0, - "Optional message subject. This is what can be filtered on"); - - /* line 3: Text/Property */ - uiDefButBitS(block, TOG, 1, B_REDR, "T/P", - (xco+10), (yco-(myline*24)), (0.20 * (width-20)), 19, - &ma->bodyType, 0.0, 0.0, 0, 0, - "Toggle message type: either Text or a PropertyName"); - - if (ma->bodyType == ACT_MESG_MESG) { - /* line 3: Message Body */ - uiDefBut(block, TEX, 1, "Body: ", - (xco+10+(0.20*(width-20))), (yco-(myline++*24)), (0.8*(width-20)), 19, - &ma->body, 0, MAX_NAME, 0, 0, - "Optional message body Text"); - } - else { - /* line 3: Property body (set by property) */ - uiDefBut(block, TEX, 1, "Propname: ", - (xco+10+(0.20*(width-20))), (yco-(myline++*24)), (0.8*(width-20)), 19, - &ma->body, 0, MAX_NAME, 0, 0, - "The message body will be set by the Property Value"); - } - - yco -= ysize; - break; - case ACT_2DFILTER: - tdfa = act->data; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, + (float)yco-ysize, (float)xco+width, (float)yco, 1); + + randAct = act->data; + + /* 1. seed */ + uiDefButI(block, NUM, 1, "Seed: ", (xco+10), yco-24, 0.4 *(width-20), 19, + &randAct->seed, 0, 1000, 0, 0, + "Initial seed of the random generator. Use Python for more freedom. " + " (Choose 0 for not random)"); + + /* 2. distribution type */ + /* One pick per distribution. These numbers MUST match the #defines */ + /* in game.h !!! */ + str= "Distribution %t|Bool Constant %x0|Bool Uniform %x1" + "|Bool Bernoulli %x2|Int Constant %x3|Int Uniform %x4" + "|Int Poisson %x5|Float Constant %x6|Float Uniform %x7" + "|Float Normal %x8|Float Neg. Exp. %x9"; + uiDefButI(block, MENU, B_REDR, str, (xco+10) + 0.4 * (width-20), yco-24, 0.6 * (width-20), 19, + &randAct->distribution, 0.0, 0.0, 0, 0, + "Choose the type of distribution"); + + /* 3. property */ + uiDefBut(block, TEX, 1, "Property:", (xco+10), yco-44, (width-20), 19, + &randAct->propname, 0, MAX_NAME, 0, 0, + "Assign the random value to this property"); + + /*4. and 5. arguments for the distribution*/ + switch (randAct->distribution) { + case ACT_RANDOM_BOOL_CONST: + uiDefButBitI(block, TOG, 1, 1, "Always true", (xco+10), yco-64, (width-20), 19, + &randAct->int_arg_1, 2.0, 1, 0, 0, + "Always false or always true"); + break; + case ACT_RANDOM_BOOL_UNIFORM: + uiDefBut(block, LABEL, 0, " Do a 50-50 pick", (xco+10), yco-64, (width-20), 19, + NULL, 0, 0, 0, 0, + "Choose between true and false, 50% chance each"); + break; + case ACT_RANDOM_BOOL_BERNOUILLI: + uiDefButF(block, NUM, 1, "Chance", (xco+10), yco-64, (width-20), 19, + &randAct->float_arg_1, 0.0, 1.0, 0, 0, + "Pick a number between 0 and 1. Success if you stay " + "below this value"); + break; + case ACT_RANDOM_INT_CONST: + uiDefButI(block, NUM, 1, "Value: ", (xco+10), yco-64, (width-20), 19, + &randAct->int_arg_1, -1000, 1000, 0, 0, + "Always return this number"); + break; + case ACT_RANDOM_INT_UNIFORM: + uiDefButI(block, NUM, 1, "Min: ", (xco+10), yco-64, (width-20)/2, 19, + &randAct->int_arg_1, -1000, 1000, 0, 0, + "Choose a number from a range. " + "Lower boundary of the range"); + uiDefButI(block, NUM, 1, "Max: ", (xco+10) + (width-20)/2, yco-64, (width-20)/2, 19, + &randAct->int_arg_2, -1000, 1000, 0, 0, + "Choose a number from a range. " + "Upper boundary of the range"); + break; + case ACT_RANDOM_INT_POISSON: + uiDefButF(block, NUM, 1, "Mean: ", (xco+10), yco-64, (width-20), 19, + &randAct->float_arg_1, 0.01, 100.0, 0, 0, + "Expected mean value of the distribution"); + break; + case ACT_RANDOM_FLOAT_CONST: + uiDefButF(block, NUM, 1, "Value: ", (xco+10), yco-64, (width-20), 19, + &randAct->float_arg_1, 0.0, 1.0, 0, 0, + "Always return this number"); + break; + case ACT_RANDOM_FLOAT_UNIFORM: + uiDefButF(block, NUM, 1, "Min: ", (xco+10), yco-64, (width-20)/2, 19, + &randAct->float_arg_1, -10000.0, 10000.0, 0, 0, + "Choose a number from a range" + "Lower boundary of the range"); + uiDefButF(block, NUM, 1, "Max: ", (xco+10) + (width-20)/2, yco-64, (width-20)/2, 19, + &randAct->float_arg_2, -10000.0, 10000.0, 0, 0, + "Choose a number from a range" + "Upper boundary of the range"); + break; + case ACT_RANDOM_FLOAT_NORMAL: + uiDefButF(block, NUM, 1, "Mean: ", (xco+10), yco-64, (width-20)/2, 19, + &randAct->float_arg_1, -10000.0, 10000.0, 0, 0, + "A normal distribution. Mean of the distribution"); + uiDefButF(block, NUM, 1, "SD: ", (xco+10) + (width-20)/2, yco-64, (width-20)/2, 19, + &randAct->float_arg_2, 0.0, 10000.0, 0, 0, + "A normal distribution. Standard deviation of the " + "distribution"); + break; + case ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL: + uiDefButF(block, NUM, 1, "Half-life time: ", (xco+10), yco-64, (width-20), 19, + &randAct->float_arg_1, 0.001, 10000.0, 0, 0, + "Negative exponential dropoff"); + break; + default: + ; /* don't know what this distro is... can be useful for testing */ + /* though :) */ + } - ysize = 50; - if (tdfa->type == ACT_2DFILTER_CUSTOMFILTER) { - ysize +=20; - } - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + yco-= ysize; + break; + case ACT_MESSAGE: + ma = act->data; - switch (tdfa->type) { - case ACT_2DFILTER_MOTIONBLUR: - if (!tdfa->flag) { - uiDefButS(block, TOG, B_REDR, "D", xco+30, yco-44, 19, 19, &tdfa->flag, 0.0, 0.0, 0.0, 0.0, "Disable Motion Blur"); - uiDefButF(block, NUM, B_REDR, "Value:", xco+52, yco-44, width-82, 19, &tdfa->float_arg, 0.0, 1.0, 0.0, 0.0, "Set motion blur value"); - } - else { - uiDefButS(block, TOG, B_REDR, "Disabled", xco+30, yco-44, width-60, 19, &tdfa->flag, 0.0, 0.0, 0.0, 0.0, "Enable Motion Blur"); - } - break; - case ACT_2DFILTER_BLUR: - case ACT_2DFILTER_SHARPEN: - case ACT_2DFILTER_DILATION: - case ACT_2DFILTER_EROSION: - case ACT_2DFILTER_LAPLACIAN: - case ACT_2DFILTER_SOBEL: - case ACT_2DFILTER_PREWITT: - case ACT_2DFILTER_GRAYSCALE: - case ACT_2DFILTER_SEPIA: - case ACT_2DFILTER_INVERT: - case ACT_2DFILTER_NOFILTER: - case ACT_2DFILTER_DISABLED: - case ACT_2DFILTER_ENABLED: - uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30, yco-44, width-60, 19, &tdfa->int_arg, 0.0, MAX_RENDER_PASS-1, 0.0, 0.0, "Set filter order"); - break; - case ACT_2DFILTER_CUSTOMFILTER: - uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30, yco-44, width-60, 19, &tdfa->int_arg, 0.0, MAX_RENDER_PASS-1, 0.0, 0.0, "Set filter order"); - uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Script: ", xco+30, yco-64, width-60, 19, &tdfa->text, ""); - break; - } - - str= "2D Filter %t|Motion Blur %x1|Blur %x2|Sharpen %x3|Dilation %x4|Erosion %x5|" - "Laplacian %x6|Sobel %x7|Prewitt %x8|Gray Scale %x9|Sepia %x10|Invert %x11|Custom Filter %x12|" - "Enable Filter %x-2|Disable Filter %x-1|Remove Filter %x0|"; - uiDefButS(block, MENU, B_REDR, str, xco+30, yco-24, width-60, 19, &tdfa->type, 0.0, 0.0, 0.0, 0.0, "2D filter type"); - - yco -= ysize; - break; - case ACT_PARENT: - parAct = act->data; + ysize = 4 + (3 * 24); /* footer + number of lines * 24 pixels/line */ - if (parAct->type==ACT_PARENT_SET) { - - ysize= 48; glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "OB:", xco+95, yco-24, (width-100), 19, &(parAct->ob), "Set this object as parent"); - uiBlockBeginAlign(block); - uiDefButBitS(block, TOGN, ACT_PARENT_COMPOUND, B_REDR, - "Compound", - xco + 5, yco - 44, (width - 10)/2, 19, &parAct->flag, - 0.0, 0.0, 0, 0, - "Add this object shape to the parent shape (only if the parent shape is already compound)"); - uiDefButBitS(block, TOGN, ACT_PARENT_GHOST, B_REDR, - "Ghost", - xco + 5 + ((width - 10)/2), yco - 44, (width - 10)/2, 19, &parAct->flag, - 0.0, 0.0, 0, 0, - "Make this object ghost while parented (only if not compound)"); - uiBlockEndAlign(block); - } - else if (parAct->type==ACT_PARENT_REMOVE) { + uiEmboss((float)xco, (float)yco-ysize, + (float)xco+width, (float)yco, 1); + + myline=1; + + /* line 1: To */ + uiDefBut(block, TEX, 1, "To: ", + (xco+10), (yco-(myline++*24)), (width-20), 19, + &ma->toPropName, 0, MAX_NAME, 0, 0, + "Optional send message to objects with this name only, or empty to broadcast"); + + /* line 2: Message Subject */ + uiDefBut(block, TEX, 1, "Subject: ", + (xco+10), (yco-(myline++*24)), (width-20), 19, + &ma->subject, 0, MAX_NAME, 0, 0, + "Optional message subject. This is what can be filtered on"); + + /* line 3: Text/Property */ + uiDefButBitS(block, TOG, 1, B_REDR, "T/P", + (xco+10), (yco-(myline*24)), (0.20 * (width-20)), 19, + &ma->bodyType, 0.0, 0.0, 0, 0, + "Toggle message type: either Text or a PropertyName"); + + if (ma->bodyType == ACT_MESG_MESG) { + /* line 3: Message Body */ + uiDefBut(block, TEX, 1, "Body: ", + (xco+10+(0.20*(width-20))), (yco-(myline++*24)), (0.8*(width-20)), 19, + &ma->body, 0, MAX_NAME, 0, 0, + "Optional message body Text"); + } + else { + /* line 3: Property body (set by property) */ + uiDefBut(block, TEX, 1, "Propname: ", + (xco+10+(0.20*(width-20))), (yco-(myline++*24)), (0.8*(width-20)), 19, + &ma->body, 0, MAX_NAME, 0, 0, + "The message body will be set by the Property Value"); + } - ysize= 28; + yco -= ysize; + break; + case ACT_2DFILTER: + tdfa = act->data; + + ysize = 50; + if (tdfa->type == ACT_2DFILTER_CUSTOMFILTER) { + ysize +=20; + } glRects(xco, yco-ysize, xco+width, yco); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - } - str= "Parent %t|Set Parent %x0|Remove Parent %x1"; - uiDefButI(block, MENU, B_REDR, str, xco+5, yco-24, parAct->type==1?(width-80):90, 19, &parAct->type, 0.0, 0.0, 0, 0, ""); + switch (tdfa->type) { + case ACT_2DFILTER_MOTIONBLUR: + if (!tdfa->flag) { + uiDefButS(block, TOG, B_REDR, "D", xco+30, yco-44, 19, 19, &tdfa->flag, 0.0, 0.0, 0.0, 0.0, "Disable Motion Blur"); + uiDefButF(block, NUM, B_REDR, "Value:", xco+52, yco-44, width-82, 19, &tdfa->float_arg, 0.0, 1.0, 0.0, 0.0, "Set motion blur value"); + } + else { + uiDefButS(block, TOG, B_REDR, "Disabled", xco+30, yco-44, width-60, 19, &tdfa->flag, 0.0, 0.0, 0.0, 0.0, "Enable Motion Blur"); + } + break; + case ACT_2DFILTER_BLUR: + case ACT_2DFILTER_SHARPEN: + case ACT_2DFILTER_DILATION: + case ACT_2DFILTER_EROSION: + case ACT_2DFILTER_LAPLACIAN: + case ACT_2DFILTER_SOBEL: + case ACT_2DFILTER_PREWITT: + case ACT_2DFILTER_GRAYSCALE: + case ACT_2DFILTER_SEPIA: + case ACT_2DFILTER_INVERT: + case ACT_2DFILTER_NOFILTER: + case ACT_2DFILTER_DISABLED: + case ACT_2DFILTER_ENABLED: + uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30, yco-44, width-60, 19, &tdfa->int_arg, 0.0, MAX_RENDER_PASS-1, 0.0, 0.0, "Set filter order"); + break; + case ACT_2DFILTER_CUSTOMFILTER: + uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30, yco-44, width-60, 19, &tdfa->int_arg, 0.0, MAX_RENDER_PASS-1, 0.0, 0.0, "Set filter order"); + uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Script: ", xco+30, yco-64, width-60, 19, &tdfa->text, ""); + break; + } - yco-= ysize; - break; - case ACT_ARMATURE: - armAct = act->data; + str= "2D Filter %t|Motion Blur %x1|Blur %x2|Sharpen %x3|Dilation %x4|Erosion %x5|" + "Laplacian %x6|Sobel %x7|Prewitt %x8|Gray Scale %x9|Sepia %x10|Invert %x11|Custom Filter %x12|" + "Enable Filter %x-2|Disable Filter %x-1|Remove Filter %x0|"; + uiDefButS(block, MENU, B_REDR, str, xco+30, yco-24, width-60, 19, &tdfa->type, 0.0, 0.0, 0.0, 0.0, "2D filter type"); - if (ob->type == OB_ARMATURE) { - str= "Constraint %t|Run armature %x0|Enable %x1|Disable %x2|Set target %x3|Set weight %x4"; - uiDefButI(block, MENU, B_REDR, str, xco+5, yco-24, (width-10)*0.35, 19, &armAct->type, 0.0, 0.0, 0, 0, ""); + yco -= ysize; + break; + case ACT_PARENT: + parAct = act->data; - switch (armAct->type) { - case ACT_ARM_RUN: - ysize = 28; - break; - default: + if (parAct->type==ACT_PARENT_SET) { + + ysize= 48; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "OB:", xco+95, yco-24, (width-100), 19, &(parAct->ob), "Set this object as parent"); uiBlockBeginAlign(block); - but = uiDefBut(block, TEX, 1, "Bone: ", - (xco+5), (yco-44), (width-10)/2, 19, - armAct->posechannel, 0, MAX_NAME, 0, 0, - "Bone on which the constraint is defined"); - uiButSetFunc(but, check_armature_actuator, but, armAct); - but = uiDefBut(block, TEX, 1, "Cons: ", - (xco+5)+(width-10)/2, (yco-44), (width-10)/2, 19, - armAct->constraint, 0, MAX_NAME, 0, 0, - "Name of the constraint you want to control"); - uiButSetFunc(but, check_armature_actuator, but, armAct); + uiDefButBitS(block, TOGN, ACT_PARENT_COMPOUND, B_REDR, + "Compound", + xco + 5, yco - 44, (width - 10)/2, 19, &parAct->flag, + 0.0, 0.0, 0, 0, + "Add this object shape to the parent shape (only if the parent shape is already compound)"); + uiDefButBitS(block, TOGN, ACT_PARENT_GHOST, B_REDR, + "Ghost", + xco + 5 + ((width - 10)/2), yco - 44, (width - 10)/2, 19, &parAct->flag, + 0.0, 0.0, 0, 0, + "Make this object ghost while parented (only if not compound)"); uiBlockEndAlign(block); - ysize = 48; + } + else if (parAct->type==ACT_PARENT_REMOVE) { + + ysize= 28; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + } + + str= "Parent %t|Set Parent %x0|Remove Parent %x1"; + uiDefButI(block, MENU, B_REDR, str, xco+5, yco-24, parAct->type==1?(width-80):90, 19, &parAct->type, 0.0, 0.0, 0, 0, ""); + + yco-= ysize; + break; + case ACT_ARMATURE: + armAct = act->data; + + if (ob->type == OB_ARMATURE) { + str= "Constraint %t|Run armature %x0|Enable %x1|Disable %x2|Set target %x3|Set weight %x4"; + uiDefButI(block, MENU, B_REDR, str, xco+5, yco-24, (width-10)*0.35, 19, &armAct->type, 0.0, 0.0, 0, 0, ""); + switch (armAct->type) { - case ACT_ARM_SETTARGET: - uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "Target: ", xco+5, yco-64, (width-10), 19, &(armAct->target), "Set this object as the target of the constraint"); - uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "Secondary Target: ", xco+5, yco-84, (width-10), 19, &(armAct->subtarget), "Set this object as the secondary target of the constraint (only IK polar target at the moment)"); - ysize += 40; - break; - case ACT_ARM_SETWEIGHT: - uiDefButF(block, NUM, B_REDR, "Weight:", xco+5+(width-10)*0.35, yco-24, (width-10)*0.65, 19, &armAct->weight, 0.0, 1.0, 0.0, 0.0, "Set weight of this constraint"); - break; + case ACT_ARM_RUN: + ysize = 28; + break; + default: + uiBlockBeginAlign(block); + but = uiDefBut(block, TEX, 1, "Bone: ", + (xco+5), (yco-44), (width-10)/2, 19, + armAct->posechannel, 0, MAX_NAME, 0, 0, + "Bone on which the constraint is defined"); + uiButSetFunc(but, check_armature_actuator, but, armAct); + but = uiDefBut(block, TEX, 1, "Cons: ", + (xco+5)+(width-10)/2, (yco-44), (width-10)/2, 19, + armAct->constraint, 0, MAX_NAME, 0, 0, + "Name of the constraint you want to control"); + uiButSetFunc(but, check_armature_actuator, but, armAct); + uiBlockEndAlign(block); + ysize = 48; + switch (armAct->type) { + case ACT_ARM_SETTARGET: + uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "Target: ", xco+5, yco-64, (width-10), 19, &(armAct->target), "Set this object as the target of the constraint"); + uiDefIDPoinBut(block, test_obpoin_but, ID_OB, 1, "Secondary Target: ", xco+5, yco-84, (width-10), 19, &(armAct->subtarget), "Set this object as the secondary target of the constraint (only IK polar target at the moment)"); + ysize += 40; + break; + case ACT_ARM_SETWEIGHT: + uiDefButF(block, NUM, B_REDR, "Weight:", xco+5+(width-10)*0.35, yco-24, (width-10)*0.65, 19, &armAct->weight, 0.0, 1.0, 0.0, 0.0, "Set weight of this constraint"); + break; + } } } - } - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - yco-= ysize; - break; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + yco-= ysize; + break; - default: - ysize= 4; + default: + ysize= 4; - glRects(xco, yco-ysize, xco+width, yco); - uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); - - yco-= ysize; - break; + glRects(xco, yco-ysize, xco+width, yco); + uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); + + yco-= ysize; + break; } uiBlockSetEmboss(block, UI_EMBOSS); diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index a6578ffb3f7..7eb0f676707 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -80,26 +80,17 @@ static void nla_action_get_color(AnimData *adt, bAction *act, float color[4]) { if (adt && (adt->flag & ADT_NLA_EDIT_ON)) { - // greenish color (same as tweaking strip) - hardcoded for now - color[0] = 0.30f; - color[1] = 0.95f; - color[2] = 0.10f; - color[3] = 0.30f; + /* greenish color (same as tweaking strip) */ + UI_GetThemeColor4fv(TH_NLA_TWEAK, color); } else { if (act) { - // reddish color - hardcoded for now - color[0] = 0.8f; - color[1] = 0.2f; - color[2] = 0.0f; - color[3] = 0.4f; + /* reddish color - same as dopesheet summary */ + UI_GetThemeColor4fv(TH_ANIM_ACTIVE, color); } else { - // greyish-red color - hardcoded for now - color[0] = 0.6f; - color[1] = 0.5f; - color[2] = 0.5f; - color[3] = 0.3f; + /* greyish-red color */ + UI_GetThemeColor4fv(TH_ANIM_INACTIVE, color); } } @@ -166,17 +157,11 @@ static void nla_strip_get_color_inside(AnimData *adt, NlaStrip *strip, float col /* Transition Clip */ if (strip->flag & NLASTRIP_FLAG_SELECT) { /* selected - use a bright blue color */ - // FIXME: hardcoded temp-hack colors - color[0] = 0.18f; - color[1] = 0.46f; - color[2] = 0.86f; + UI_GetThemeColor3fv(TH_NLA_TRANSITION_SEL, color); } else { /* normal, unselected strip - use (hardly noticeable) blue tinge */ - // FIXME: hardcoded temp-hack colors - color[0] = 0.11f; - color[1] = 0.15f; - color[2] = 0.19f; + UI_GetThemeColor3fv(TH_NLA_TRANSITION, color); } } else if (strip->type == NLASTRIP_TYPE_META) { @@ -184,34 +169,22 @@ static void nla_strip_get_color_inside(AnimData *adt, NlaStrip *strip, float col // TODO: should temporary metas get different colors too? if (strip->flag & NLASTRIP_FLAG_SELECT) { /* selected - use a bold purple color */ - // FIXME: hardcoded temp-hack colors - color[0] = 0.41f; - color[1] = 0.13f; - color[2] = 0.59f; + UI_GetThemeColor3fv(TH_NLA_META_SEL, color); } else { /* normal, unselected strip - use (hardly noticeable) dark purple tinge */ - // FIXME: hardcoded temp-hack colors - color[0] = 0.20f; - color[1] = 0.15f; - color[2] = 0.26f; + UI_GetThemeColor3fv(TH_NLA_META, color); } } else if (strip->type == NLASTRIP_TYPE_SOUND) { /* Sound Clip */ if (strip->flag & NLASTRIP_FLAG_SELECT) { /* selected - use a bright teal color */ - // FIXME: hardcoded temp-hack colors - color[0] = 0.12f; - color[1] = 0.48f; - color[2] = 0.48f; + UI_GetThemeColor3fv(TH_NLA_SOUND_SEL, color); } else { /* normal, unselected strip - use (hardly noticeable) teal tinge */ - // FIXME: hardcoded temp-hack colors - color[0] = 0.17f; - color[1] = 0.24f; - color[2] = 0.24f; + UI_GetThemeColor3fv(TH_NLA_SOUND, color); } } else { @@ -220,19 +193,13 @@ static void nla_strip_get_color_inside(AnimData *adt, NlaStrip *strip, float col /* active strip should be drawn green when it is acting as the tweaking strip. * however, this case should be skipped for when not in EditMode... */ - // FIXME: hardcoded temp-hack colors - color[0] = 0.3f; - color[1] = 0.95f; - color[2] = 0.1f; + UI_GetThemeColor3fv(TH_NLA_TWEAK, color); } else if (strip->flag & NLASTRIP_FLAG_TWEAKUSER) { /* alert user that this strip is also used by the tweaking track (this is set when going into * 'editmode' for that strip), since the edits made here may not be what the user anticipated */ - // FIXME: hardcoded temp-hack colors - color[0] = 0.85f; - color[1] = 0.0f; - color[2] = 0.0f; + UI_GetThemeColor3fv(TH_NLA_TWEAK_DUPLI, color); } else if (strip->flag & NLASTRIP_FLAG_SELECT) { /* selected strip - use theme color for selected */ @@ -792,21 +759,24 @@ static void draw_nla_channel_list_gl(bAnimContext *ac, ListBase *anim_data, View glEnable(GL_BLEND); /* draw backing strip behind channel name */ + // FIXME: hardcoded colors!!! if (group == 5) { - /* Action Line */ - // TODO: if tweaking some action, use the same color as for the tweaked track (quick hack done for now) + float color[4]; + + /* Action Line + * The alpha values action_get_color returns are only useful for drawing + * strips backgrounds but here we're doing channel list backgrounds instead + * so we ignore that and use our own when needed + */ + nla_action_get_color(adt, (bAction *)ale->data, color); + if (adt && (adt->flag & ADT_NLA_EDIT_ON)) { - // greenish color (same as tweaking strip) - hardcoded for now - glColor3f(0.3f, 0.95f, 0.1f); + /* Yes, the color vector has 4 components, BUT we only want to be using 3 of them! */ + glColor3fv(color); } else { - /* if a track is being solo'd, action is ignored, so draw less boldly (alpha lower) */ - float alpha = (adt && (adt->flag & ADT_NLA_SOLO_TRACK)) ? 0.3f : 1.0f; - - if (ale->data) - glColor4f(0.8f, 0.2f, 0.0f, alpha); // reddish color - hardcoded for now - else - glColor4f(0.6f, 0.5f, 0.5f, alpha); // greyish-red color - hardcoded for now + float alpha = (adt && (adt->flag & ADT_NLA_SOLO_TRACK)) ? 0.3 : 1.0f; + glColor4f(color[0], color[1], color[2], alpha); } offset += 7 * indent; diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index db75198bcd4..8aa56823baf 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -54,6 +54,7 @@ #include "BKE_node.h" #include "BLF_api.h" +#include "BLF_translation.h" #include "NOD_composite.h" #include "NOD_shader.h" @@ -82,30 +83,30 @@ #include "node_intern.h" // XXX interface.h -extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select); +extern void ui_dropshadow(rctf *rct, float radius, float aspect, float alpha, int select); /* ****************** SOCKET BUTTON DRAW FUNCTIONS ***************** */ static void node_sync_cb(bContext *UNUSED(C), void *snode_v, void *node_v) { - SpaceNode *snode= snode_v; + SpaceNode *snode = snode_v; - if (snode->treetype==NTREE_SHADER) { + if (snode->treetype == NTREE_SHADER) { nodeShaderSynchronizeID(node_v, 1); // allqueue(REDRAWBUTSSHADING, 0); } } static void node_socket_button_label(const bContext *UNUSED(C), uiBlock *block, - bNodeTree *UNUSED(ntree), bNode *UNUSED(node), bNodeSocket *sock, - const char *UNUSED(name), int x, int y, int width) + bNodeTree *UNUSED(ntree), bNode *UNUSED(node), bNodeSocket *sock, + const char *UNUSED(name), int x, int y, int width) { - uiDefBut(block, LABEL, 0, sock->name, x, y, width, NODE_DY, NULL, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, IFACE_(sock->name), x, y, width, NODE_DY, NULL, 0, 0, 0, 0, ""); } static void node_socket_button_default(const bContext *C, uiBlock *block, - bNodeTree *ntree, bNode *node, bNodeSocket *sock, - const char *name, int x, int y, int width) + bNodeTree *ntree, bNode *node, bNodeSocket *sock, + const char *name, int x, int y, int width) { if (sock->link || (sock->flag & SOCK_HIDE_VALUE)) node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); @@ -115,9 +116,9 @@ static void node_socket_button_default(const bContext *C, uiBlock *block, RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); - bt = uiDefButR(block, NUM, B_NODE_EXEC, name, - x, y+1, width, NODE_DY-2, - &ptr, "default_value", 0, 0, 0, -1, -1, NULL); + bt = uiDefButR(block, NUM, B_NODE_EXEC, IFACE_(name), + x, y + 1, width, NODE_DY - 2, + &ptr, "default_value", 0, 0, 0, -1, -1, NULL); if (node) uiButSetFunc(bt, node_sync_cb, CTX_wm_space_node(C), node); } @@ -132,22 +133,22 @@ typedef struct SocketComponentMenuArgs { /* NOTE: this is a block-menu, needs 0 events, otherwise the menu closes */ static uiBlock *socket_component_menu(bContext *C, ARegion *ar, void *args_v) { - SocketComponentMenuArgs *args= (SocketComponentMenuArgs*)args_v; + SocketComponentMenuArgs *args = (SocketComponentMenuArgs *)args_v; uiBlock *block; uiLayout *layout; - block= uiBeginBlock(C, ar, __func__, UI_EMBOSS); + block = uiBeginBlock(C, ar, __func__, UI_EMBOSS); uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN); - layout= uiLayoutColumn(uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, args->x, args->y+2, args->width, NODE_DY, UI_GetStyle()), 0); + layout = uiLayoutColumn(uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, args->x, args->y + 2, args->width, NODE_DY, UI_GetStyle()), 0); uiItemR(layout, &args->ptr, "default_value", UI_ITEM_R_EXPAND, "", ICON_NONE); return block; } static void node_socket_button_components(const bContext *C, uiBlock *block, - bNodeTree *ntree, bNode *node, bNodeSocket *sock, - const char *name, int x, int y, int width) + bNodeTree *ntree, bNode *node, bNodeSocket *sock, + const char *name, int x, int y, int width) { if (sock->link || (sock->flag & SOCK_HIDE_VALUE)) node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); @@ -157,7 +158,7 @@ static void node_socket_button_components(const bContext *C, uiBlock *block, RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); - args= MEM_callocN(sizeof(SocketComponentMenuArgs), "SocketComponentMenuArgs"); + args = MEM_callocN(sizeof(SocketComponentMenuArgs), "SocketComponentMenuArgs"); args->ptr = ptr; args->x = x; @@ -167,43 +168,43 @@ static void node_socket_button_components(const bContext *C, uiBlock *block, args->arg1 = CTX_wm_space_node(C); args->arg2 = node; - uiDefBlockButN(block, socket_component_menu, args, name, x, y+1, width, NODE_DY-2, ""); + uiDefBlockButN(block, socket_component_menu, args, IFACE_(name), x, y + 1, width, NODE_DY - 2, ""); } } static void node_socket_button_color(const bContext *C, uiBlock *block, - bNodeTree *ntree, bNode *node, bNodeSocket *sock, - const char *name, int x, int y, int width) + bNodeTree *ntree, bNode *node, bNodeSocket *sock, + const char *name, int x, int y, int width) { if (sock->link || (sock->flag & SOCK_HIDE_VALUE)) - node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); + node_socket_button_label(C, block, ntree, node, sock, IFACE_(name), x, y, width); else { PointerRNA ptr; uiBut *bt; - int labelw= width - 40; + int labelw = width - 40; RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr); - bt=uiDefButR(block, COL, B_NODE_EXEC, "", - x, y+2, (labelw>0 ? 40 : width), NODE_DY-2, - &ptr, "default_value", 0, 0, 0, -1, -1, NULL); + bt = uiDefButR(block, COL, B_NODE_EXEC, "", + x, y + 2, (labelw > 0 ? 40 : width), NODE_DY - 2, + &ptr, "default_value", 0, 0, 0, -1, -1, NULL); if (node) uiButSetFunc(bt, node_sync_cb, CTX_wm_space_node(C), node); - if (name[0]!='\0' && labelw>0) - uiDefBut(block, LABEL, 0, name, x + 40, y+2, labelw, NODE_DY-2, NULL, 0, 0, 0, 0, ""); + if (name[0] != '\0' && labelw > 0) + uiDefBut(block, LABEL, 0, IFACE_(name), x + 40, y + 2, labelw, NODE_DY - 2, NULL, 0, 0, 0, 0, ""); } } /* standard draw function, display the default input value */ static void node_draw_input_default(const bContext *C, uiBlock *block, - bNodeTree *ntree, bNode *node, bNodeSocket *sock, - const char *name, int x, int y, int width) + bNodeTree *ntree, bNode *node, bNodeSocket *sock, + const char *name, int x, int y, int width) { bNodeSocketType *stype = ntreeGetSocketType(sock->type); if (stype->buttonfunc) stype->buttonfunc(C, block, ntree, node, sock, name, x, y, width); else - node_socket_button_label(C, block, ntree, node, sock, name, x, y, width); + node_socket_button_label(C, block, ntree, node, sock, IFACE_(name), x, y, width); } static void node_draw_output_default(const bContext *C, uiBlock *block, @@ -213,14 +214,15 @@ static void node_draw_output_default(const bContext *C, uiBlock *block, SpaceNode *snode = CTX_wm_space_node(C); float slen; int ofs = 0; + const char *ui_name = IFACE_(name); UI_ThemeColor(TH_TEXT); - slen= snode->aspect*UI_GetStringWidth(name); + slen = snode->aspect * UI_GetStringWidth(ui_name); while (slen > node->width) { ofs++; - slen= snode->aspect*UI_GetStringWidth(name+ofs); + slen = snode->aspect * UI_GetStringWidth(ui_name + ofs); } - uiDefBut(block, LABEL, 0, name+ofs, (short)(sock->locx-15.0f-slen), (short)(sock->locy-9.0f), - (short)(node->width-NODE_DY), NODE_DY, NULL, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, ui_name + ofs, (short)(sock->locx - 15.0f - slen), (short)(sock->locy - 9.0f), + (short)(node->width - NODE_DY), NODE_DY, NULL, 0, 0, 0, 0, ""); } /* ****************** BASE DRAW FUNCTIONS FOR NEW OPERATOR NODES ***************** */ @@ -228,37 +230,37 @@ static void node_draw_output_default(const bContext *C, uiBlock *block, #if 0 /* UNUSED */ static void node_draw_socket_new(bNodeSocket *sock, float size) { - float x=sock->locx, y=sock->locy; + float x = sock->locx, y = sock->locy; /* 16 values of sin function */ static float si[16] = { - 0.00000000f, 0.39435585f, 0.72479278f,0.93775213f, - 0.99871650f,0.89780453f,0.65137248f,0.29936312f, - -0.10116832f,-0.48530196f,-0.79077573f,-0.96807711f, - -0.98846832f,-0.84864425f,-0.57126821f,-0.20129852f + 0.00000000f, 0.39435585f, 0.72479278f, 0.93775213f, + 0.99871650f, 0.89780453f, 0.65137248f, 0.29936312f, + -0.10116832f, -0.48530196f, -0.79077573f, -0.96807711f, + -0.98846832f, -0.84864425f, -0.57126821f, -0.20129852f }; /* 16 values of cos function */ - static float co[16] ={ - 1.00000000f,0.91895781f,0.68896691f,0.34730525f, - -0.05064916f,-0.44039415f,-0.75875812f,-0.95413925f, - -0.99486932f,-0.87434661f,-0.61210598f,-0.25065253f, - 0.15142777f,0.52896401f,0.82076344f,0.97952994f, + static float co[16] = { + 1.00000000f, 0.91895781f, 0.68896691f, 0.34730525f, + -0.05064916f, -0.44039415f, -0.75875812f, -0.95413925f, + -0.99486932f, -0.87434661f, -0.61210598f, -0.25065253f, + 0.15142777f, 0.52896401f, 0.82076344f, 0.97952994f, }; int a; glColor3ub(180, 180, 180); glBegin(GL_POLYGON); - for (a=0; a<16; a++) - glVertex2f(x+size*si[a], y+size*co[a]); + for (a = 0; a < 16; a++) + glVertex2f(x + size * si[a], y + size * co[a]); glEnd(); glColor4ub(0, 0, 0, 150); glEnable(GL_BLEND); glEnable(GL_LINE_SMOOTH); glBegin(GL_LINE_LOOP); - for (a=0; a<16; a++) - glVertex2f(x+size*si[a], y+size*co[a]); + for (a = 0; a < 16; a++) + glVertex2f(x + size * si[a], y + size * co[a]); glEnd(); glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); @@ -298,9 +300,9 @@ static void node_buts_mix_rgb(uiLayout *layout, bContext *UNUSED(C), PointerRNA { uiLayout *row; - bNodeTree *ntree= (bNodeTree*)ptr->id.data; + bNodeTree *ntree = (bNodeTree *)ptr->id.data; - row= uiLayoutRow(layout, 1); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "blend_type", 0, "", ICON_NONE); if (ntree->type == NTREE_COMPOSIT) uiItemR(row, ptr, "use_alpha", 0, "", ICON_IMAGE_RGB_ALPHA); @@ -311,21 +313,21 @@ static void node_buts_time(uiLayout *layout, bContext *UNUSED(C), PointerRNA *pt uiLayout *row; #if 0 /* XXX no context access here .. */ - bNode *node= ptr->data; - CurveMapping *cumap= node->storage; + bNode *node = ptr->data; + CurveMapping *cumap = node->storage; if (cumap) { cumap->flag |= CUMA_DRAW_CFRA; - if (node->custom1<node->custom2) - cumap->sample[0]= (float)(CFRA - node->custom1)/(float)(node->custom2-node->custom1); + if (node->custom1 < node->custom2) + cumap->sample[0] = (float)(CFRA - node->custom1) / (float)(node->custom2 - node->custom1); } #endif uiTemplateCurveMapping(layout, ptr, "curve", 's', 0, 0); - row= uiLayoutRow(layout, 1); - uiItemR(row, ptr, "frame_start", 0, "Sta", ICON_NONE); - uiItemR(row, ptr, "frame_end", 0, "End", ICON_NONE); + row = uiLayoutRow(layout, 1); + uiItemR(row, ptr, "frame_start", 0, IFACE_("Sta"), ICON_NONE); + uiItemR(row, ptr, "frame_end", 0, IFACE_("End"), ICON_NONE); } static void node_buts_colorramp(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) @@ -338,18 +340,18 @@ static void node_buts_curvevec(uiLayout *layout, bContext *UNUSED(C), PointerRNA uiTemplateCurveMapping(layout, ptr, "mapping", 'v', 0, 0); } -static float *_sample_col= NULL; // bad bad, 2.5 will do better? +static float *_sample_col = NULL; // bad bad, 2.5 will do better? #if 0 static void node_curvemap_sample(float *col) { - _sample_col= col; + _sample_col = col; } #endif static void node_buts_curvecol(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { - bNode *node= ptr->data; - CurveMapping *cumap= node->storage; + bNode *node = ptr->data; + CurveMapping *cumap = node->storage; if (_sample_col) { cumap->flag |= CUMA_DRAW_SAMPLE; @@ -366,99 +368,68 @@ static void node_normal_cb(bContext *C, void *ntree_v, void *node_v) Main *bmain = CTX_data_main(C); ED_node_generic_update(bmain, ntree_v, node_v); - WM_event_add_notifier(C, NC_NODE|NA_EDITED, ntree_v); + WM_event_add_notifier(C, NC_NODE | NA_EDITED, ntree_v); } static void node_buts_normal(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNodeTree *ntree= ptr->id.data; - bNode *node= ptr->data; - rctf *butr= &node->butr; - bNodeSocket *sock= node->outputs.first; /* first socket stores normal */ - float *nor= ((bNodeSocketValueVector*)sock->default_value)->value; + uiBlock *block = uiLayoutAbsoluteBlock(layout); + bNodeTree *ntree = ptr->id.data; + bNode *node = ptr->data; + rctf *butr = &node->butr; + bNodeSocket *sock = node->outputs.first; /* first socket stores normal */ + float *nor = ((bNodeSocketValueVector *)sock->default_value)->value; uiBut *bt; - bt= uiDefButF(block, BUT_NORMAL, B_NODE_EXEC, "", - (short)butr->xmin, (short)butr->xmin, - butr->xmax-butr->xmin, butr->xmax-butr->xmin, - nor, 0.0f, 1.0f, 0, 0, ""); + bt = uiDefButF(block, BUT_NORMAL, B_NODE_EXEC, "", + (short)butr->xmin, (short)butr->xmin, + butr->xmax - butr->xmin, butr->xmax - butr->xmin, + nor, 0.0f, 1.0f, 0, 0, ""); uiButSetFunc(bt, node_normal_cb, ntree, node); } #if 0 // not used in 2.5x yet static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v) { - Main *bmain= CTX_data_main(C); - bNodeTree *ntree= ntree_v; - bNode *node= node_v; + Main *bmain = CTX_data_main(C); + bNodeTree *ntree = ntree_v; + bNode *node = node_v; Tex *tex; - if (node->menunr<1) return; + if (node->menunr < 1) return; if (node->id) { node->id->us--; - node->id= NULL; + node->id = NULL; } - tex= BLI_findlink(&bmain->tex, node->menunr-1); + tex = BLI_findlink(&bmain->tex, node->menunr - 1); - node->id= &tex->id; + node->id = &tex->id; id_us_plus(node->id); - BLI_strncpy(node->name, node->id->name+2, sizeof(node->name)); + BLI_strncpy(node->name, node->id->name + 2, sizeof(node->name)); nodeSetActive(ntree, node); - if ( ntree->type == NTREE_TEXTURE ) + if (ntree->type == NTREE_TEXTURE) ntreeTexCheckCyclics(ntree); // allqueue(REDRAWBUTSSHADING, 0); // allqueue(REDRAWNODE, 0); NodeTagChanged(ntree, node); - node->menunr= 0; + node->menunr = 0; } #endif -static void node_dynamic_update_cb(bContext *C, void *UNUSED(ntree_v), void *node_v) -{ - Main *bmain= CTX_data_main(C); - Material *ma; - bNode *node= (bNode *)node_v; - ID *id= node->id; - int error= 0; - - if (BTST(node->custom1, NODE_DYNAMIC_ERROR)) error= 1; - - /* Users only have to press the "update" button in one pynode - * and we also update all others sharing the same script */ - for (ma= bmain->mat.first; ma; ma= ma->id.next) { - if (ma->nodetree) { - bNode *nd; - for (nd= ma->nodetree->nodes.first; nd; nd= nd->next) { - if ((nd->type == NODE_DYNAMIC) && (nd->id == id)) { - nd->custom1= 0; - nd->custom1= BSET(nd->custom1, NODE_DYNAMIC_REPARSE); - nd->menunr= 0; - if (error) - nd->custom1= BSET(nd->custom1, NODE_DYNAMIC_ERROR); - } - } - } - } - - // allqueue(REDRAWBUTSSHADING, 0); - // allqueue(REDRAWNODE, 0); - // XXX BIF_preview_changed(ID_MA); -} static void node_buts_texture(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { - bNode *node= ptr->data; + bNode *node = ptr->data; short multi = ( - node->id && - ((Tex*)node->id)->use_nodes && - (node->type != CMP_NODE_TEXTURE) && - (node->type != TEX_NODE_TEXTURE) - ); + node->id && + ((Tex *)node->id)->use_nodes && + (node->type != CMP_NODE_TEXTURE) && + (node->type != TEX_NODE_TEXTURE) + ); uiItemR(layout, ptr, "texture", 0, "", ICON_NONE); @@ -476,9 +447,9 @@ static void node_buts_math(uiLayout *layout, bContext *UNUSED(C), PointerRNA *pt static int node_resize_area_default(bNode *node, int x, int y) { if (node->flag & NODE_HIDDEN) { - rctf totr= node->totr; + rctf totr = node->totr; /* right part of node */ - totr.xmin = node->totr.xmax-20.0f; + totr.xmin = node->totr.xmax - 20.0f; if (BLI_in_rctf(&totr, x, y)) return NODE_RESIZE_RIGHT; else @@ -486,12 +457,12 @@ static int node_resize_area_default(bNode *node, int x, int y) } else { const float size = 10.0f; - rctf totr= node->totr; + rctf totr = node->totr; int dir = 0; - if (x >= totr.xmax-size && x < totr.xmax && y >= totr.ymin && y < totr.ymax) + if (x >= totr.xmax - size && x < totr.xmax && y >= totr.ymin && y < totr.ymax) dir |= NODE_RESIZE_RIGHT; - if (x >= totr.xmin && x < totr.xmin+size && y >= totr.ymin && y < totr.ymax) + if (x >= totr.xmin && x < totr.xmin + size && y >= totr.ymin && y < totr.ymax) dir |= NODE_RESIZE_LEFT; return dir; } @@ -500,7 +471,7 @@ static int node_resize_area_default(bNode *node, int x, int y) /* ****************** BUTTON CALLBACKS FOR COMMON NODES ***************** */ /* width of socket columns in group display */ -#define NODE_GROUP_FRAME 120 +#define NODE_GROUP_FRAME 120 /* based on settings in node, sets drawing rect info. each redraw! */ /* note: this assumes only 1 group at a time is drawn (linked data) */ @@ -511,13 +482,13 @@ static void node_update_group(const bContext *C, bNodeTree *ntree, bNode *gnode) node_update_default(C, ntree, gnode); } else { - bNodeTree *ngroup= (bNodeTree *)gnode->id; + bNodeTree *ngroup = (bNodeTree *)gnode->id; bNode *node; bNodeSocket *sock, *gsock; float locx, locy; - rctf *rect= &gnode->totr; - float node_group_frame= U.dpi*NODE_GROUP_FRAME/72; - float group_header= 26*U.dpi/72; + rctf *rect = &gnode->totr; + float node_group_frame = U.dpi * NODE_GROUP_FRAME / 72; + float group_header = 26 * U.dpi / 72; int counter; int dy; @@ -530,64 +501,64 @@ static void node_update_group(const bContext *C, bNodeTree *ntree, bNode *gnode) rect->xmin = rect->xmax = locx; rect->ymin = rect->ymax = locy; - counter= 1; - for (node= ngroup->nodes.first; node; node= node->next) { + counter = 1; + for (node = ngroup->nodes.first; node; node = node->next) { if (counter) { - *rect= node->totr; - counter= 0; + *rect = node->totr; + counter = 0; } else BLI_union_rctf(rect, &node->totr); } /* add some room for links to group sockets */ - rect->xmin -= 4*NODE_DY; - rect->xmax += 4*NODE_DY; - rect->ymin-= NODE_DY; - rect->ymax+= NODE_DY; + rect->xmin -= 4 * NODE_DY; + rect->xmax += 4 * NODE_DY; + rect->ymin -= NODE_DY; + rect->ymax += NODE_DY; /* input sockets */ - dy = 0.5f*(rect->ymin+rect->ymax) + NODE_DY*(BLI_countlist(&gnode->inputs)-1); - gsock=ngroup->inputs.first; - sock=gnode->inputs.first; + dy = 0.5f * (rect->ymin + rect->ymax) + NODE_DY * (BLI_countlist(&gnode->inputs) - 1); + gsock = ngroup->inputs.first; + sock = gnode->inputs.first; while (gsock || sock) { while (sock && !sock->groupsock) { sock->locx = rect->xmin - node_group_frame; sock->locy = dy; /* prevent long socket lists from growing out of the group box */ - if (dy-3*NODE_DYS < rect->ymin) - rect->ymin = dy-3*NODE_DYS; - if (dy+3*NODE_DYS > rect->ymax) - rect->ymax = dy+3*NODE_DYS; - dy -= 2*NODE_DY; + if (dy - 3 * NODE_DYS < rect->ymin) + rect->ymin = dy - 3 * NODE_DYS; + if (dy + 3 * NODE_DYS > rect->ymax) + rect->ymax = dy + 3 * NODE_DYS; + dy -= 2 * NODE_DY; sock = sock->next; } - while (gsock && (!sock || sock->groupsock!=gsock)) { + while (gsock && (!sock || sock->groupsock != gsock)) { gsock->locx = rect->xmin; gsock->locy = dy; /* prevent long socket lists from growing out of the group box */ - if (dy-3*NODE_DYS < rect->ymin) - rect->ymin = dy-3*NODE_DYS; - if (dy+3*NODE_DYS > rect->ymax) - rect->ymax = dy+3*NODE_DYS; - dy -= 2*NODE_DY; + if (dy - 3 * NODE_DYS < rect->ymin) + rect->ymin = dy - 3 * NODE_DYS; + if (dy + 3 * NODE_DYS > rect->ymax) + rect->ymax = dy + 3 * NODE_DYS; + dy -= 2 * NODE_DY; gsock = gsock->next; } - while (sock && gsock && sock->groupsock==gsock) { + while (sock && gsock && sock->groupsock == gsock) { gsock->locx = rect->xmin; sock->locx = rect->xmin - node_group_frame; sock->locy = gsock->locy = dy; /* prevent long socket lists from growing out of the group box */ - if (dy-3*NODE_DYS < rect->ymin) - rect->ymin = dy-3*NODE_DYS; - if (dy+3*NODE_DYS > rect->ymax) - rect->ymax = dy+3*NODE_DYS; - dy -= 2*NODE_DY; + if (dy - 3 * NODE_DYS < rect->ymin) + rect->ymin = dy - 3 * NODE_DYS; + if (dy + 3 * NODE_DYS > rect->ymax) + rect->ymax = dy + 3 * NODE_DYS; + dy -= 2 * NODE_DY; sock = sock->next; gsock = gsock->next; @@ -595,47 +566,47 @@ static void node_update_group(const bContext *C, bNodeTree *ntree, bNode *gnode) } /* output sockets */ - dy = 0.5f*(rect->ymin+rect->ymax) + NODE_DY*(BLI_countlist(&gnode->outputs)-1); - gsock=ngroup->outputs.first; - sock=gnode->outputs.first; + dy = 0.5f * (rect->ymin + rect->ymax) + NODE_DY * (BLI_countlist(&gnode->outputs) - 1); + gsock = ngroup->outputs.first; + sock = gnode->outputs.first; while (gsock || sock) { while (sock && !sock->groupsock) { sock->locx = rect->xmax + node_group_frame; sock->locy = dy - NODE_DYS; /* prevent long socket lists from growing out of the group box */ - if (dy-3*NODE_DYS < rect->ymin) - rect->ymin = dy-3*NODE_DYS; - if (dy+3*NODE_DYS > rect->ymax) - rect->ymax = dy+3*NODE_DYS; - dy -= 2*NODE_DY; + if (dy - 3 * NODE_DYS < rect->ymin) + rect->ymin = dy - 3 * NODE_DYS; + if (dy + 3 * NODE_DYS > rect->ymax) + rect->ymax = dy + 3 * NODE_DYS; + dy -= 2 * NODE_DY; sock = sock->next; } - while (gsock && (!sock || sock->groupsock!=gsock)) { + while (gsock && (!sock || sock->groupsock != gsock)) { gsock->locx = rect->xmax; gsock->locy = dy - NODE_DYS; /* prevent long socket lists from growing out of the group box */ - if (dy-3*NODE_DYS < rect->ymin) - rect->ymin = dy-3*NODE_DYS; - if (dy+3*NODE_DYS > rect->ymax) - rect->ymax = dy+3*NODE_DYS; - dy -= 2*NODE_DY; + if (dy - 3 * NODE_DYS < rect->ymin) + rect->ymin = dy - 3 * NODE_DYS; + if (dy + 3 * NODE_DYS > rect->ymax) + rect->ymax = dy + 3 * NODE_DYS; + dy -= 2 * NODE_DY; gsock = gsock->next; } - while (sock && gsock && sock->groupsock==gsock) { + while (sock && gsock && sock->groupsock == gsock) { gsock->locx = rect->xmax; sock->locx = rect->xmax + node_group_frame; sock->locy = gsock->locy = dy - NODE_DYS; /* prevent long socket lists from growing out of the group box */ - if (dy-3*NODE_DYS < rect->ymin) - rect->ymin = dy-3*NODE_DYS; - if (dy+3*NODE_DYS > rect->ymax) - rect->ymax = dy+3*NODE_DYS; - dy -= 2*NODE_DY; + if (dy - 3 * NODE_DYS < rect->ymin) + rect->ymin = dy - 3 * NODE_DYS; + if (dy + 3 * NODE_DYS > rect->ymax) + rect->ymax = dy + 3 * NODE_DYS; + dy -= 2 * NODE_DY; sock = sock->next; gsock = gsock->next; @@ -646,16 +617,16 @@ static void node_update_group(const bContext *C, bNodeTree *ntree, bNode *gnode) * Add margin for header and input/output columns. */ uiExplicitBoundsBlock(gnode->block, - rect->xmin - node_group_frame, - rect->ymin, - rect->xmax + node_group_frame, - rect->ymax + group_header); + rect->xmin - node_group_frame, + rect->ymin, + rect->xmax + node_group_frame, + rect->ymax + group_header); } } static void update_group_input_cb(bContext *UNUSED(C), void *UNUSED(snode_v), void *ngroup_v) { - bNodeTree *ngroup= (bNodeTree*)ngroup_v; + bNodeTree *ngroup = (bNodeTree *)ngroup_v; ngroup->update |= NTREE_UPDATE_GROUP_IN; ntreeUpdateTree(ngroup); @@ -663,7 +634,7 @@ static void update_group_input_cb(bContext *UNUSED(C), void *UNUSED(snode_v), vo static void update_group_output_cb(bContext *UNUSED(C), void *UNUSED(snode_v), void *ngroup_v) { - bNodeTree *ngroup= (bNodeTree*)ngroup_v; + bNodeTree *ngroup = (bNodeTree *)ngroup_v; ngroup->update |= NTREE_UPDATE_GROUP_OUT; ntreeUpdateTree(ngroup); @@ -671,55 +642,56 @@ static void update_group_output_cb(bContext *UNUSED(C), void *UNUSED(snode_v), v static void draw_group_socket_name(SpaceNode *snode, bNode *gnode, bNodeSocket *sock, int in_out, float xoffset, float yoffset) { - bNodeTree *ngroup= (bNodeTree*)gnode->id; + bNodeTree *ngroup = (bNodeTree *)gnode->id; uiBut *bt; + const char *ui_name = IFACE_(sock->name); if (sock->flag & SOCK_DYNAMIC) { bt = uiDefBut(gnode->block, TEX, 0, "", - sock->locx+xoffset, sock->locy+1+yoffset, 72, NODE_DY, - sock->name, 0, sizeof(sock->name), 0, 0, ""); - if (in_out==SOCK_IN) + sock->locx + xoffset, sock->locy + 1 + yoffset, 72, NODE_DY, + sock->name, 0, sizeof(sock->name), 0, 0, ""); + if (in_out == SOCK_IN) uiButSetFunc(bt, update_group_input_cb, snode, ngroup); else uiButSetFunc(bt, update_group_output_cb, snode, ngroup); } else { - uiDefBut(gnode->block, LABEL, 0, sock->name, - sock->locx+xoffset, sock->locy+1+yoffset, 72, NODE_DY, - NULL, 0, sizeof(sock->name), 0, 0, ""); + uiDefBut(gnode->block, LABEL, 0, ui_name, + sock->locx + xoffset, sock->locy + 1 + yoffset, 72, NODE_DY, + NULL, 0, sizeof(ui_name), 0, 0, ""); } } static void draw_group_socket(const bContext *C, SpaceNode *snode, bNodeTree *ntree, bNode *gnode, bNodeSocket *sock, bNodeSocket *gsock, int index, int in_out) { - bNodeTree *ngroup= (bNodeTree*)gnode->id; - bNodeSocketType *stype= ntreeGetSocketType(gsock ? gsock->type : sock->type); + bNodeTree *ngroup = (bNodeTree *)gnode->id; + bNodeSocketType *stype = ntreeGetSocketType(gsock ? gsock->type : sock->type); uiBut *bt; float offset; int draw_value; - float node_group_frame= U.dpi*NODE_GROUP_FRAME/72; - float socket_size= NODE_SOCKSIZE*U.dpi/72; - float arrowbutw= 0.8f*UI_UNIT_X; + float node_group_frame = U.dpi * NODE_GROUP_FRAME / 72; + float socket_size = NODE_SOCKSIZE * U.dpi / 72; + float arrowbutw = 0.8f * UI_UNIT_X; /* layout stuff for buttons on group left frame */ - float colw= 0.6f*node_group_frame; - float col1= 6 - node_group_frame; - float col2= col1 + colw+6; - float col3= - arrowbutw - 6; + float colw = 0.6f * node_group_frame; + float col1 = 6 - node_group_frame; + float col2 = col1 + colw + 6; + float col3 = -arrowbutw - 6; /* layout stuff for buttons on group right frame */ - float cor1= 6; - float cor2= cor1 + arrowbutw + 6; - float cor3= cor2 + arrowbutw + 6; + float cor1 = 6; + float cor2 = cor1 + arrowbutw + 6; + float cor3 = cor2 + arrowbutw + 6; /* node and group socket circles */ if (sock) - node_socket_circle_draw(ntree, sock, socket_size); + node_socket_circle_draw(ntree, sock, socket_size, sock->flag & SELECT); if (gsock) - node_socket_circle_draw(ngroup, gsock, socket_size); + node_socket_circle_draw(ngroup, gsock, socket_size, gsock->flag & SELECT); /* socket name */ - offset = (in_out==SOCK_IN ? col1 : cor3); + offset = (in_out == SOCK_IN ? col1 : cor3); if (!gsock) - offset += (in_out==SOCK_IN ? node_group_frame : -node_group_frame); + offset += (in_out == SOCK_IN ? node_group_frame : -node_group_frame); /* draw both name and value button if: * 1) input: not internal @@ -727,25 +699,25 @@ static void draw_group_socket(const bContext *C, SpaceNode *snode, bNodeTree *nt */ draw_value = 0; switch (in_out) { - case SOCK_IN: - draw_value = !(gsock && (gsock->flag & SOCK_INTERNAL)); - break; - case SOCK_OUT: - if (gnode->typeinfo->flag & NODE_CONST_OUTPUT) - draw_value = !(gsock && gsock->link); - break; + case SOCK_IN: + draw_value = !(gsock && (gsock->flag & SOCK_INTERNAL)); + break; + case SOCK_OUT: + if (gnode->typeinfo->flag & NODE_CONST_OUTPUT) + draw_value = !(gsock && gsock->link); + break; } if (draw_value) { /* both name and value buttons */ if (gsock) { draw_group_socket_name(snode, gnode, gsock, in_out, offset, 0); if (stype->buttonfunc) - stype->buttonfunc(C, gnode->block, ngroup, NULL, gsock, "", gsock->locx+offset, gsock->locy-NODE_DY, colw); + stype->buttonfunc(C, gnode->block, ngroup, NULL, gsock, "", gsock->locx + offset, gsock->locy - NODE_DY, colw); } else { draw_group_socket_name(snode, gnode, sock, in_out, offset, 0); if (stype->buttonfunc) - stype->buttonfunc(C, gnode->block, ngroup, NULL, sock, "", sock->locx+offset, sock->locy-NODE_DY, colw); + stype->buttonfunc(C, gnode->block, ngroup, NULL, sock, "", sock->locx + offset, sock->locy - NODE_DY, colw); } } else { @@ -758,17 +730,17 @@ static void draw_group_socket(const bContext *C, SpaceNode *snode, bNodeTree *nt if (gsock && (gsock->flag & SOCK_DYNAMIC)) { /* up/down buttons */ - offset = (in_out==SOCK_IN ? col2 : cor2); + offset = (in_out == SOCK_IN ? col2 : cor2); uiBlockSetDirection(gnode->block, UI_TOP); uiBlockBeginAlign(gnode->block); bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_move_up", 0, ICON_TRIA_UP, - gsock->locx+offset, gsock->locy, arrowbutw, arrowbutw, ""); + gsock->locx + offset, gsock->locy, arrowbutw, arrowbutw, ""); if (!gsock->prev || !(gsock->prev->flag & SOCK_DYNAMIC)) uiButSetFlag(bt, UI_BUT_DISABLED); RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index); RNA_enum_set(uiButGetOperatorPtrRNA(bt), "in_out", in_out); bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_move_down", 0, ICON_TRIA_DOWN, - gsock->locx+offset, gsock->locy-arrowbutw, arrowbutw, arrowbutw, ""); + gsock->locx + offset, gsock->locy - arrowbutw, arrowbutw, arrowbutw, ""); if (!gsock->next || !(gsock->next->flag & SOCK_DYNAMIC)) uiButSetFlag(bt, UI_BUT_DISABLED); RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index); @@ -777,10 +749,10 @@ static void draw_group_socket(const bContext *C, SpaceNode *snode, bNodeTree *nt uiBlockSetDirection(gnode->block, 0); /* remove button */ - offset = (in_out==SOCK_IN ? col3 : cor1); + offset = (in_out == SOCK_IN ? col3 : cor1); uiBlockSetEmboss(gnode->block, UI_EMBOSSN); bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_remove", 0, ICON_X, - gsock->locx+offset, gsock->locy-0.5f*arrowbutw, arrowbutw, arrowbutw, ""); + gsock->locx + offset, gsock->locy - 0.5f * arrowbutw, arrowbutw, arrowbutw, ""); RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index); RNA_enum_set(uiButGetOperatorPtrRNA(bt), "in_out", in_out); uiBlockSetEmboss(gnode->block, UI_EMBOSS); @@ -794,13 +766,13 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN node_draw_default(C, ar, snode, ntree, gnode); } else { - bNodeTree *ngroup= (bNodeTree *)gnode->id; + bNodeTree *ngroup = (bNodeTree *)gnode->id; bNodeSocket *sock, *gsock; uiLayout *layout; PointerRNA ptr; - rctf rect= gnode->totr; - float node_group_frame= U.dpi*NODE_GROUP_FRAME/72; - float group_header= 26*U.dpi/72; + rctf rect = gnode->totr; + float node_group_frame = U.dpi * NODE_GROUP_FRAME / 72; + float group_header = 26 * U.dpi / 72; int index; @@ -808,7 +780,7 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN glEnable(GL_BLEND); uiSetRoundBox(UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT); UI_ThemeColorShadeAlpha(TH_NODE_GROUP, 0, -70); - uiDrawBox(GL_POLYGON, rect.xmin-node_group_frame, rect.ymax, rect.xmax+node_group_frame, rect.ymax+group_header, BASIS_RAD); + uiDrawBox(GL_POLYGON, rect.xmin - node_group_frame, rect.ymax, rect.xmax + node_group_frame, rect.ymax + group_header, BASIS_RAD); /* backdrop body */ UI_ThemeColorShadeAlpha(TH_BACK, -8, -70); @@ -818,12 +790,12 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN /* input column */ UI_ThemeColorShadeAlpha(TH_BACK, 10, -50); uiSetRoundBox(UI_CNR_BOTTOM_LEFT); - uiDrawBox(GL_POLYGON, rect.xmin-node_group_frame, rect.ymin, rect.xmin, rect.ymax, BASIS_RAD); + uiDrawBox(GL_POLYGON, rect.xmin - node_group_frame, rect.ymin, rect.xmin, rect.ymax, BASIS_RAD); /* output column */ UI_ThemeColorShadeAlpha(TH_BACK, 10, -50); uiSetRoundBox(UI_CNR_BOTTOM_RIGHT); - uiDrawBox(GL_POLYGON, rect.xmax, rect.ymin, rect.xmax+node_group_frame, rect.ymax, BASIS_RAD); + uiDrawBox(GL_POLYGON, rect.xmax, rect.ymin, rect.xmax + node_group_frame, rect.ymax, BASIS_RAD); /* input column separator */ glColor4ub(200, 200, 200, 140); @@ -843,57 +815,57 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN uiSetRoundBox(UI_CNR_ALL); glColor4ub(200, 200, 200, 140); glEnable(GL_LINE_SMOOTH); - uiDrawBox(GL_LINE_LOOP, rect.xmin-node_group_frame, rect.ymin, rect.xmax+node_group_frame, rect.ymax+group_header, BASIS_RAD); + uiDrawBox(GL_LINE_LOOP, rect.xmin - node_group_frame, rect.ymin, rect.xmax + node_group_frame, rect.ymax + group_header, BASIS_RAD); glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); /* backdrop title */ UI_ThemeColor(TH_TEXT_HI); - layout = uiBlockLayout(gnode->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, (short)(rect.xmin+15), (short)(rect.ymax+group_header), - MIN2((int)(rect.xmax - rect.xmin-18.0f), node_group_frame+20), group_header, UI_GetStyle()); + layout = uiBlockLayout(gnode->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, (short)(rect.xmin + 15), (short)(rect.ymax + group_header), + MIN2((int)(rect.xmax - rect.xmin - 18.0f), node_group_frame + 20), group_header, UI_GetStyle()); RNA_pointer_create(&ntree->id, &RNA_Node, gnode, &ptr); - uiTemplateIDBrowse(layout, (bContext*)C, &ptr, "node_tree", NULL, NULL, NULL); + uiTemplateIDBrowse(layout, (bContext *)C, &ptr, "node_tree", NULL, NULL, NULL); uiBlockLayoutResolve(gnode->block, NULL, NULL); /* draw the internal tree nodes and links */ node_draw_nodetree(C, ar, snode, ngroup); /* group sockets */ - gsock=ngroup->inputs.first; - sock=gnode->inputs.first; + gsock = ngroup->inputs.first; + sock = gnode->inputs.first; index = 0; while (gsock || sock) { while (sock && !sock->groupsock) { draw_group_socket(C, snode, ntree, gnode, sock, NULL, index, SOCK_IN); sock = sock->next; } - while (gsock && (!sock || sock->groupsock!=gsock)) { + while (gsock && (!sock || sock->groupsock != gsock)) { draw_group_socket(C, snode, ntree, gnode, NULL, gsock, index, SOCK_IN); gsock = gsock->next; ++index; } - while (sock && gsock && sock->groupsock==gsock) { + while (sock && gsock && sock->groupsock == gsock) { draw_group_socket(C, snode, ntree, gnode, sock, gsock, index, SOCK_IN); sock = sock->next; gsock = gsock->next; ++index; } } - gsock=ngroup->outputs.first; - sock=gnode->outputs.first; + gsock = ngroup->outputs.first; + sock = gnode->outputs.first; index = 0; while (gsock || sock) { while (sock && !sock->groupsock) { draw_group_socket(C, snode, ntree, gnode, sock, NULL, index, SOCK_OUT); sock = sock->next; } - while (gsock && (!sock || sock->groupsock!=gsock)) { + while (gsock && (!sock || sock->groupsock != gsock)) { draw_group_socket(C, snode, ntree, gnode, NULL, gsock, index, SOCK_OUT); gsock = gsock->next; ++index; } - while (sock && gsock && sock->groupsock==gsock) { + while (sock && gsock && sock->groupsock == gsock) { draw_group_socket(C, snode, ntree, gnode, sock, gsock, index, SOCK_OUT); sock = sock->next; gsock = gsock->next; @@ -903,7 +875,7 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN uiEndBlock(C, gnode->block); uiDrawBlock(C, gnode->block); - gnode->block= NULL; + gnode->block = NULL; } } @@ -932,15 +904,15 @@ static void node_update_frame(const bContext *UNUSED(C), bNodeTree *ntree, bNode /* init rect from current frame size */ nodeToView(node, node->offsetx, node->offsety, &rect.xmin, &rect.ymax); - nodeToView(node, node->offsetx+node->width, node->offsety-node->height, &rect.xmax, &rect.ymin); + nodeToView(node, node->offsetx + node->width, node->offsety - node->height, &rect.xmax, &rect.ymin); /* frame can be resized manually only if shrinking is disabled or no children are attached */ data->flag |= NODE_FRAME_RESIZEABLE; /* for shrinking bbox, initialize the rect from first child node */ bbinit = (data->flag & NODE_FRAME_SHRINK); /* fit bounding box to all children */ - for (tnode=ntree->nodes.first; tnode; tnode=tnode->next) { - if (tnode->parent!=node) + for (tnode = ntree->nodes.first; tnode; tnode = tnode->next) { + if (tnode->parent != node) continue; /* add margin to node rect */ @@ -974,8 +946,8 @@ static void node_draw_frame_label(bNode *node) /* XXX font id is crap design */ const int fontid = blf_mono_font; NodeFrame *data = (NodeFrame *)node->storage; - rctf *rct= &node->totr; - int color_id= node_get_colorid(node); + rctf *rct = &node->totr; + int color_id = node_get_colorid(node); char label[128]; /* XXX a bit hacky, should use separate align values for x and y */ float width, ascender; @@ -990,7 +962,7 @@ static void node_draw_frame_label(bNode *node) width = BLF_width(fontid, label); ascender = BLF_ascender(fontid); - x = 0.5f*(rct->xmin + rct->xmax) - 0.5f*width; + x = 0.5f * (rct->xmin + rct->xmax) - 0.5f * width; y = rct->ymax - NODE_DYS - ascender; BLF_position(fontid, x, y, 0); @@ -999,35 +971,40 @@ static void node_draw_frame_label(bNode *node) static void node_draw_frame(const bContext *C, ARegion *ar, SpaceNode *snode, bNodeTree *UNUSED(ntree), bNode *node) { - rctf *rct= &node->totr; - int color_id= node_get_colorid(node); + rctf *rct = &node->totr; + int color_id = node_get_colorid(node); + unsigned char color[4]; + float alpha; + + UI_GetThemeColor4ubv(TH_NODE_FRAME, color); + alpha = (float)(color[3])/255.0f; /* skip if out of view */ if (node->totr.xmax < ar->v2d.cur.xmin || node->totr.xmin > ar->v2d.cur.xmax || - node->totr.ymax < ar->v2d.cur.ymin || node->totr.ymin > ar->v2d.cur.ymax) { + node->totr.ymax < ar->v2d.cur.ymin || node->totr.ymin > ar->v2d.cur.ymax) { uiEndBlock(C, node->block); - node->block= NULL; + node->block = NULL; return; } /* shadow */ - node_draw_shadow(snode, node, BASIS_RAD); + node_draw_shadow(snode, node, BASIS_RAD, alpha); /* body */ if (node->flag & NODE_CUSTOM_COLOR) - glColor3fv(node->color); + glColor4f(node->color[0], node->color[1], node->color[2], alpha); else - UI_ThemeColor4(TH_NODE); + UI_ThemeColor4(TH_NODE_FRAME); glEnable(GL_BLEND); uiSetRoundBox(UI_CNR_ALL); uiRoundBox(rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD); glDisable(GL_BLEND); /* outline active and selected emphasis */ - if ( node->flag & (NODE_ACTIVE|SELECT) ) { + if (node->flag & (NODE_ACTIVE | SELECT) ) { glEnable(GL_BLEND); - glEnable( GL_LINE_SMOOTH ); + glEnable(GL_LINE_SMOOTH); if (node->flag & NODE_ACTIVE) UI_ThemeColorShadeAlpha(TH_ACTIVE, 0, -40); @@ -1036,7 +1013,7 @@ static void node_draw_frame(const bContext *C, ARegion *ar, SpaceNode *snode, bN uiSetRoundBox(UI_CNR_ALL); uiDrawBox(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD); - glDisable( GL_LINE_SMOOTH ); + glDisable(GL_LINE_SMOOTH); glDisable(GL_BLEND); } @@ -1047,27 +1024,27 @@ static void node_draw_frame(const bContext *C, ARegion *ar, SpaceNode *snode, bN uiEndBlock(C, node->block); uiDrawBlock(C, node->block); - node->block= NULL; + node->block = NULL; } static int node_resize_area_frame(bNode *node, int x, int y) { const float size = 10.0f; NodeFrame *data = (NodeFrame *)node->storage; - rctf totr= node->totr; + rctf totr = node->totr; int dir = 0; /* shrinking frame size is determined by child nodes */ if (!(data->flag & NODE_FRAME_RESIZEABLE)) return 0; - if (x >= totr.xmax-size && x < totr.xmax && y >= totr.ymin && y < totr.ymax) + if (x >= totr.xmax - size && x < totr.xmax && y >= totr.ymin && y < totr.ymax) dir |= NODE_RESIZE_RIGHT; - if (x >= totr.xmin && x < totr.xmin+size && y >= totr.ymin && y < totr.ymax) + if (x >= totr.xmin && x < totr.xmin + size && y >= totr.ymin && y < totr.ymax) dir |= NODE_RESIZE_LEFT; - if (x >= totr.xmin && x < totr.xmax && y >= totr.ymax-size && y < totr.ymax) + if (x >= totr.xmin && x < totr.xmax && y >= totr.ymax - size && y < totr.ymax) dir |= NODE_RESIZE_TOP; - if (x >= totr.xmin && x < totr.xmax && y >= totr.ymin && y < totr.ymin+size) + if (x >= totr.xmin && x < totr.xmax && y >= totr.ymin && y < totr.ymin + size) dir |= NODE_RESIZE_BOTTOM; return dir; @@ -1075,76 +1052,193 @@ static int node_resize_area_frame(bNode *node, int x, int y) static void node_buts_frame_details(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { - uiItemR(layout, ptr, "label_size", 0, "Label Size", ICON_NONE); - uiItemR(layout, ptr, "shrink", 0, "Shrink", ICON_NONE); + uiItemR(layout, ptr, "label_size", 0, IFACE_("Label Size"), ICON_NONE); + uiItemR(layout, ptr, "shrink", 0, IFACE_("Shrink"), ICON_NONE); +} + + +#define NODE_REROUTE_SIZE 8.0f + +static void node_update_reroute(const bContext *UNUSED(C), bNodeTree *UNUSED(ntree), bNode *node) +{ + bNodeSocket *nsock; + float locx, locy; + float size = NODE_REROUTE_SIZE; + + /* get "global" coords */ + nodeToView(node, 0.0f, 0.0f, &locx, &locy); + + /* reroute node has exactly one input and one output, both in the same place */ + nsock= node->outputs.first; + nsock->locx= locx; + nsock->locy= locy; + + nsock= node->inputs.first; + nsock->locx= locx; + nsock->locy= locy; + + node->width = size*2; + node->totr.xmin= locx - size; + node->totr.xmax= locx + size; + node->totr.ymax= locy + size; + node->totr.ymin= locy - size; +} + +static void node_draw_reroute(const bContext *C, ARegion *ar, SpaceNode *UNUSED(snode), bNodeTree *ntree, bNode *node) +{ + bNodeSocket *sock; + #if 0 /* UNUSED */ + rctf *rct= &node->totr; + float size = NODE_REROUTE_SIZE; + #endif + float socket_size= NODE_SOCKSIZE; + + /* skip if out of view */ + if (node->totr.xmax < ar->v2d.cur.xmin || node->totr.xmin > ar->v2d.cur.xmax || + node->totr.ymax < ar->v2d.cur.ymin || node->totr.ymin > ar->v2d.cur.ymax) { + + uiEndBlock(C, node->block); + node->block= NULL; + return; + } + + /* XXX only kept for debugging + * selection state is indicated by socket outline below! + */ + #if 0 + /* body */ + uiSetRoundBox(15); + UI_ThemeColor4(TH_NODE); + glEnable(GL_BLEND); + uiRoundBox(rct->xmin, rct->ymin, rct->xmax, rct->ymax, size); + glDisable(GL_BLEND); + + /* outline active and selected emphasis */ + if (node->flag & (NODE_ACTIVE | SELECT)) { + glEnable(GL_BLEND); + glEnable( GL_LINE_SMOOTH ); + /* using different shades of TH_TEXT_HI for the empasis, like triangle */ + if( node->flag & NODE_ACTIVE ) + UI_ThemeColorShadeAlpha(TH_TEXT_HI, 0, -40); + else + UI_ThemeColorShadeAlpha(TH_TEXT_HI, -20, -120); + uiDrawBox(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, size); + + glDisable( GL_LINE_SMOOTH ); + glDisable(GL_BLEND); + } + #endif + + /* only draw input socket. as they all are placed on the same position. + * highlight also if node itself is selected, since we don't display the node body separately! + */ + for (sock= node->inputs.first; sock; sock= sock->next) { + node_socket_circle_draw(ntree, sock, socket_size, (sock->flag & SELECT) || (node->flag & SELECT)); + } + + uiEndBlock(C, node->block); + uiDrawBlock(C, node->block); + node->block= NULL; +} + +/* Special tweak area for reroute node. + * Since this node is quite small, we use a larger tweak area for grabbing than for selection. + */ +static int node_tweak_area_reroute(bNode *node, int x, int y) +{ + /* square of tweak radius */ + static const float tweak_radius_sq = 576; /* 24*24 */ + + bNodeSocket *sock = node->inputs.first; + float dx = sock->locx - x; + float dy = sock->locy - y; + return (dx*dx + dy*dy <= tweak_radius_sq); } static void node_common_set_butfunc(bNodeType *ntype) { switch (ntype->type) { case NODE_GROUP: - ntype->uifunc= node_uifunc_group; - ntype->drawfunc= node_draw_group; - ntype->drawupdatefunc= node_update_group; + ntype->uifunc = node_uifunc_group; + ntype->drawfunc = node_draw_group; + ntype->drawupdatefunc = node_update_group; break; case NODE_FORLOOP: // ntype->uifunc= node_common_buts_group; - ntype->drawfunc= node_draw_group; - ntype->drawupdatefunc= node_update_group; + ntype->drawfunc = node_draw_group; + ntype->drawupdatefunc = node_update_group; break; case NODE_WHILELOOP: - ntype->uifunc= node_common_buts_whileloop; - ntype->drawfunc= node_draw_group; - ntype->drawupdatefunc= node_update_group; + ntype->uifunc = node_common_buts_whileloop; + ntype->drawfunc = node_draw_group; + ntype->drawupdatefunc = node_update_group; break; case NODE_FRAME: - ntype->drawfunc= node_draw_frame; - ntype->drawupdatefunc= node_update_frame; - ntype->uifuncbut= node_buts_frame_details; - ntype->resize_area_func= node_resize_area_frame; + ntype->drawfunc = node_draw_frame; + ntype->drawupdatefunc = node_update_frame; + ntype->uifuncbut = node_buts_frame_details; + ntype->resize_area_func = node_resize_area_frame; + break; + case NODE_REROUTE: + ntype->drawfunc= node_draw_reroute; + ntype->drawupdatefunc= node_update_reroute; + ntype->tweak_area_func= node_tweak_area_reroute; break; } } /* ****************** BUTTON CALLBACKS FOR SHADER NODES ***************** */ -static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v) +static void node_buts_image_user(uiLayout *layout, bContext *C, PointerRNA *imaptr, PointerRNA *iuserptr) { - Main *bmain= CTX_data_main(C); - bNodeTree *ntree= ntree_v; - bNode *node= node_v; - /* ID *oldid; */ /* UNUSED */ + uiLayout *col; + int source; + + if(!imaptr->data) + return; + + col = uiLayoutColumn(layout, 0); - if (node->menunr<1) return; + uiItemR(col, imaptr, "source", 0, "", ICON_NONE); - if (node->id) { - node->id->us--; + source = RNA_enum_get(imaptr, "source"); + + if (source == IMA_SRC_SEQUENCE) { + /* don't use iuser->framenr directly because it may not be updated if auto-refresh is off */ + Scene *scene = CTX_data_scene(C); + ImageUser *iuser = iuserptr->data; + char numstr[32]; + const int framenr = BKE_image_user_frame_get(iuser, CFRA, 0); + BLI_snprintf(numstr, sizeof(numstr), IFACE_("Frame: %d"), framenr); + uiItemL(layout, numstr, ICON_NONE); } - /* oldid= node->id; */ /* UNUSED */ - node->id= BLI_findlink(&bmain->text, node->menunr-1); - id_us_plus(node->id); - BLI_strncpy(node->name, node->id->name+2, sizeof(node->name)); - node->custom1= BSET(node->custom1, NODE_DYNAMIC_NEW); - - nodeSetActive(ntree, node); + if (ELEM(source, IMA_SRC_SEQUENCE, IMA_SRC_MOVIE)) { + col = uiLayoutColumn(layout, 1); + uiItemR(col, iuserptr, "frame_duration", 0, NULL, ICON_NONE); + uiItemR(col, iuserptr, "frame_start", 0, NULL, ICON_NONE); + uiItemR(col, iuserptr, "frame_offset", 0, NULL, ICON_NONE); + uiItemR(col, iuserptr, "use_cyclic", 0, NULL, ICON_NONE); + uiItemR(col, iuserptr, "use_auto_refresh", UI_ITEM_R_ICON_ONLY, NULL, ICON_NONE); + } - // allqueue(REDRAWBUTSSHADING, 0); - // allqueue(REDRAWNODE, 0); + col = uiLayoutColumn(layout, 0); + + if (RNA_enum_get(imaptr, "type") == IMA_TYPE_MULTILAYER) + uiItemR(col, iuserptr, "layer", 0, NULL, ICON_NONE); - node->menunr= 0; } static void node_shader_buts_material(uiLayout *layout, bContext *C, PointerRNA *ptr) { - bNode *node= ptr->data; + bNode *node = ptr->data; uiLayout *col; uiTemplateID(layout, C, ptr, "material", "MATERIAL_OT_new", NULL, NULL); if (!node->id) return; - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); uiItemR(col, ptr, "use_diffuse", 0, NULL, ICON_NONE); uiItemR(col, ptr, "use_specular", 0, NULL, ICON_NONE); uiItemR(col, ptr, "invert_normal", 0, NULL, ICON_NONE); @@ -1154,23 +1248,23 @@ static void node_shader_buts_mapping(uiLayout *layout, bContext *UNUSED(C), Poin { uiLayout *row; - uiItemL(layout, "Location:", ICON_NONE); - row= uiLayoutRow(layout, 1); + uiItemL(layout, IFACE_("Location:"), ICON_NONE); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "translation", 0, "", ICON_NONE); - uiItemL(layout, "Rotation:", ICON_NONE); - row= uiLayoutRow(layout, 1); + uiItemL(layout, IFACE_("Rotation:"), ICON_NONE); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "rotation", 0, "", ICON_NONE); - uiItemL(layout, "Scale:", ICON_NONE); - row= uiLayoutRow(layout, 1); + uiItemL(layout, IFACE_("Scale:"), ICON_NONE); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "scale", 0, "", ICON_NONE); - row= uiLayoutRow(layout, 1); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "use_min", 0, "Min", ICON_NONE); uiItemR(row, ptr, "min", 0, "", ICON_NONE); - row= uiLayoutRow(layout, 1); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "use_max", 0, "Max", ICON_NONE); uiItemR(row, ptr, "max", 0, "", ICON_NONE); } @@ -1182,40 +1276,49 @@ static void node_shader_buts_vect_math(uiLayout *layout, bContext *UNUSED(C), Po static void node_shader_buts_geometry(uiLayout *layout, bContext *C, PointerRNA *ptr) { - PointerRNA obptr= CTX_data_pointer_get(C, "active_object"); + PointerRNA obptr = CTX_data_pointer_get(C, "active_object"); uiLayout *col; - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) { - PointerRNA dataptr= RNA_pointer_get(&obptr, "data"); + PointerRNA dataptr = RNA_pointer_get(&obptr, "data"); uiItemPointerR(col, ptr, "uv_layer", &dataptr, "uv_textures", "", ICON_NONE); uiItemPointerR(col, ptr, "color_layer", &dataptr, "vertex_colors", "", ICON_NONE); } else { - uiItemR(col, ptr, "uv_layer", 0, "UV", ICON_NONE); - uiItemR(col, ptr, "color_layer", 0, "VCol", ICON_NONE); + uiItemR(col, ptr, "uv_layer", 0, IFACE_("UV"), ICON_NONE); + uiItemR(col, ptr, "color_layer", 0, IFACE_("VCol"), ICON_NONE); } } static void node_shader_buts_attribute(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { - uiItemR(layout, ptr, "attribute_name", 0, "Name", ICON_NONE); + uiItemR(layout, ptr, "attribute_name", 0, IFACE_("Name"), ICON_NONE); } static void node_shader_buts_tex_image(uiLayout *layout, bContext *C, PointerRNA *ptr) { + PointerRNA imaptr = RNA_pointer_get(ptr, "image"); + PointerRNA iuserptr = RNA_pointer_get(ptr, "image_user"); + uiTemplateID(layout, C, ptr, "image", NULL, "IMAGE_OT_open", NULL); uiItemR(layout, ptr, "color_space", 0, "", ICON_NONE); -} + node_buts_image_user(layout, C, &imaptr, &iuserptr); +} static void node_shader_buts_tex_environment(uiLayout *layout, bContext *C, PointerRNA *ptr) { + PointerRNA imaptr = RNA_pointer_get(ptr, "image"); + PointerRNA iuserptr = RNA_pointer_get(ptr, "image_user"); + uiTemplateID(layout, C, ptr, "image", NULL, "IMAGE_OT_open", NULL); uiItemR(layout, ptr, "color_space", 0, "", ICON_NONE); uiItemR(layout, ptr, "projection", 0, "", ICON_NONE); + + node_buts_image_user(layout, C, &imaptr, &iuserptr); } static void node_shader_buts_tex_sky(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) @@ -1254,45 +1357,6 @@ static void node_shader_buts_glossy(uiLayout *layout, bContext *UNUSED(C), Point uiItemR(layout, ptr, "distribution", 0, "", ICON_NONE); } -static void node_shader_buts_dynamic(uiLayout *layout, bContext *C, PointerRNA *ptr) -{ - Main *bmain= CTX_data_main(C); - uiBlock *block= uiLayoutAbsoluteBlock(layout); - bNode *node= ptr->data; - bNodeTree *ntree= ptr->id.data; - rctf *butr= &node->butr; - uiBut *bt; - // XXX SpaceNode *snode= curarea->spacedata.first; - short dy= (short)butr->ymin; - int xoff=0; - - /* B_NODE_EXEC is handled in butspace.c do_node_buts */ - if (!node->id) { - const char *strp; - IDnames_to_pupstring(&strp, NULL, "", &(bmain->text), NULL, NULL); - node->menunr= 0; - bt= uiDefButS(block, MENU, B_NODE_EXEC/*+node->nr*/, strp, - butr->xmin, dy, 19, 19, - &node->menunr, 0, 0, 0, 0, "Browses existing choices"); - uiButSetFunc(bt, node_browse_text_cb, ntree, node); - xoff=19; - if (strp) MEM_freeN((void *)strp); - } - else { - bt = uiDefBut(block, BUT, B_NOP, "Update", - butr->xmin+xoff, butr->ymin+20, 50, 19, - &node->menunr, 0.0, 19.0, 0, 0, "Refresh this node (and all others that use the same script)"); - uiButSetFunc(bt, node_dynamic_update_cb, ntree, node); - - if (BTST(node->custom1, NODE_DYNAMIC_ERROR)) { - // UI_ThemeColor(TH_REDALERT); - // XXX ui_rasterpos_safe(butr->xmin + xoff, butr->ymin + 5, snode->aspect); - // XXX snode_drawstring(snode, "Error! Check console...", butr->xmax - butr->xmin); - ; - } - } -} - /* only once called */ static void node_shader_set_butfunc(bNodeType *ntype) { @@ -1301,77 +1365,74 @@ static void node_shader_set_butfunc(bNodeType *ntype) case SH_NODE_MATERIAL: case SH_NODE_MATERIAL_EXT: - ntype->uifunc= node_shader_buts_material; + ntype->uifunc = node_shader_buts_material; break; case SH_NODE_TEXTURE: - ntype->uifunc= node_buts_texture; + ntype->uifunc = node_buts_texture; break; case SH_NODE_NORMAL: - ntype->uifunc= node_buts_normal; + ntype->uifunc = node_buts_normal; break; case SH_NODE_CURVE_VEC: - ntype->uifunc= node_buts_curvevec; + ntype->uifunc = node_buts_curvevec; break; case SH_NODE_CURVE_RGB: - ntype->uifunc= node_buts_curvecol; + ntype->uifunc = node_buts_curvecol; break; case SH_NODE_MAPPING: - ntype->uifunc= node_shader_buts_mapping; + ntype->uifunc = node_shader_buts_mapping; break; case SH_NODE_VALUE: - ntype->uifunc= node_buts_value; + ntype->uifunc = node_buts_value; break; case SH_NODE_RGB: - ntype->uifunc= node_buts_rgb; + ntype->uifunc = node_buts_rgb; break; case SH_NODE_MIX_RGB: - ntype->uifunc= node_buts_mix_rgb; + ntype->uifunc = node_buts_mix_rgb; break; case SH_NODE_VALTORGB: - ntype->uifunc= node_buts_colorramp; + ntype->uifunc = node_buts_colorramp; break; case SH_NODE_MATH: - ntype->uifunc= node_buts_math; + ntype->uifunc = node_buts_math; break; case SH_NODE_VECT_MATH: - ntype->uifunc= node_shader_buts_vect_math; + ntype->uifunc = node_shader_buts_vect_math; break; case SH_NODE_GEOMETRY: - ntype->uifunc= node_shader_buts_geometry; + ntype->uifunc = node_shader_buts_geometry; break; case SH_NODE_ATTRIBUTE: - ntype->uifunc= node_shader_buts_attribute; + ntype->uifunc = node_shader_buts_attribute; break; case SH_NODE_TEX_SKY: - ntype->uifunc= node_shader_buts_tex_sky; + ntype->uifunc = node_shader_buts_tex_sky; break; case SH_NODE_TEX_IMAGE: - ntype->uifunc= node_shader_buts_tex_image; + ntype->uifunc = node_shader_buts_tex_image; break; case SH_NODE_TEX_ENVIRONMENT: - ntype->uifunc= node_shader_buts_tex_environment; + ntype->uifunc = node_shader_buts_tex_environment; break; case SH_NODE_TEX_GRADIENT: - ntype->uifunc= node_shader_buts_tex_gradient; + ntype->uifunc = node_shader_buts_tex_gradient; break; case SH_NODE_TEX_MAGIC: - ntype->uifunc= node_shader_buts_tex_magic; + ntype->uifunc = node_shader_buts_tex_magic; break; case SH_NODE_TEX_WAVE: - ntype->uifunc= node_shader_buts_tex_wave; + ntype->uifunc = node_shader_buts_tex_wave; break; case SH_NODE_TEX_MUSGRAVE: - ntype->uifunc= node_shader_buts_tex_musgrave; + ntype->uifunc = node_shader_buts_tex_musgrave; break; case SH_NODE_TEX_VORONOI: - ntype->uifunc= node_shader_buts_tex_voronoi; + ntype->uifunc = node_shader_buts_tex_voronoi; break; case SH_NODE_BSDF_GLOSSY: case SH_NODE_BSDF_GLASS: - ntype->uifunc= node_shader_buts_glossy; - break; - case NODE_DYNAMIC: - ntype->uifunc= node_shader_buts_dynamic; + ntype->uifunc = node_shader_buts_glossy; break; } } @@ -1380,60 +1441,28 @@ static void node_shader_set_butfunc(bNodeType *ntype) static void node_composit_buts_image(uiLayout *layout, bContext *C, PointerRNA *ptr) { - uiLayout *col; - bNode *node= ptr->data; - PointerRNA imaptr; - PropertyRNA *prop; - int source; + bNode *node = ptr->data; + PointerRNA imaptr, iuserptr; uiTemplateID(layout, C, ptr, "image", NULL, "IMAGE_OT_open", NULL); if (!node->id) return; - prop = RNA_struct_find_property(ptr, "image"); - if (!prop || RNA_property_type(prop) != PROP_POINTER) return; - imaptr= RNA_property_pointer_get(ptr, prop); - - col= uiLayoutColumn(layout, 0); + imaptr = RNA_pointer_get(ptr, "image"); + RNA_pointer_create((ID *)ptr->id.data, &RNA_ImageUser, node->storage, &iuserptr); - uiItemR(col, &imaptr, "source", 0, NULL, ICON_NONE); - - source= RNA_enum_get(&imaptr, "source"); - - if (source == IMA_SRC_SEQUENCE) { - /* don't use iuser->framenr directly because it may not be updated if auto-refresh is off */ - Scene *scene= CTX_data_scene(C); - ImageUser *iuser= node->storage; - char numstr[32]; - const int framenr= BKE_image_user_frame_get(iuser, CFRA, 0); - BLI_snprintf(numstr, sizeof(numstr), "Frame: %d", framenr); - uiItemL(layout, numstr, ICON_NONE); - } - - if (ELEM(source, IMA_SRC_SEQUENCE, IMA_SRC_MOVIE)) { - col= uiLayoutColumn(layout, 1); - uiItemR(col, ptr, "frame_duration", 0, NULL, ICON_NONE); - uiItemR(col, ptr, "frame_start", 0, NULL, ICON_NONE); - uiItemR(col, ptr, "frame_offset", 0, NULL, ICON_NONE); - uiItemR(col, ptr, "use_cyclic", 0, NULL, ICON_NONE); - uiItemR(col, ptr, "use_auto_refresh", UI_ITEM_R_ICON_ONLY, NULL, ICON_NONE); - } - - col= uiLayoutColumn(layout, 0); - - if (RNA_enum_get(&imaptr, "type")== IMA_TYPE_MULTILAYER) - uiItemR(col, ptr, "layer", 0, NULL, ICON_NONE); + node_buts_image_user(layout, C, &imaptr, &iuserptr); } static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, PointerRNA *ptr) { - bNode *node= ptr->data; + bNode *node = ptr->data; uiLayout *col, *row; PointerRNA op_ptr; PointerRNA scn_ptr; PropertyRNA *prop; const char *layer_name; - char scene_name[MAX_ID_NAME-2]; + char scene_name[MAX_ID_NAME - 2]; wmOperatorType *ot = WM_operatortype_find("RENDER_OT_render", 1); BLI_assert(ot != 0); @@ -1442,7 +1471,7 @@ static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, Point if (!node->id) return; - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "layer", 0, "", ICON_NONE); @@ -1465,10 +1494,10 @@ static void node_composit_buts_blur(uiLayout *layout, bContext *UNUSED(C), Point { uiLayout *col, *row; - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); uiItemR(col, ptr, "filter_type", 0, "", ICON_NONE); - if (RNA_enum_get(ptr, "filter_type")!= R_FILTER_FAST_GAUSS) { + if (RNA_enum_get(ptr, "filter_type") != R_FILTER_FAST_GAUSS) { uiItemR(col, ptr, "use_bokeh", 0, NULL, ICON_NONE); uiItemR(col, ptr, "use_gamma_correction", 0, NULL, ICON_NONE); } @@ -1476,18 +1505,18 @@ static void node_composit_buts_blur(uiLayout *layout, bContext *UNUSED(C), Point uiItemR(col, ptr, "use_relative", 0, NULL, ICON_NONE); if (RNA_boolean_get(ptr, "use_relative")) { - uiItemL(col, "Aspect Correction", 0); - row= uiLayoutRow(layout, 1); + uiItemL(col, IFACE_("Aspect Correction"), 0); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "aspect_correction", UI_ITEM_R_EXPAND, NULL, 0); - col= uiLayoutColumn(layout, 1); - uiItemR(col, ptr, "factor_x", 0, "X", ICON_NONE); - uiItemR(col, ptr, "factor_y", 0, "Y", ICON_NONE); + col = uiLayoutColumn(layout, 1); + uiItemR(col, ptr, "factor_x", 0, IFACE_("X"), ICON_NONE); + uiItemR(col, ptr, "factor_y", 0, IFACE_("Y"), ICON_NONE); } else { - col= uiLayoutColumn(layout, 1); - uiItemR(col, ptr, "size_x", 0, "X", ICON_NONE); - uiItemR(col, ptr, "size_y", 0, "Y", ICON_NONE); + col = uiLayoutColumn(layout, 1); + uiItemR(col, ptr, "size_x", 0, IFACE_("X"), ICON_NONE); + uiItemR(col, ptr, "size_y", 0, IFACE_("Y"), ICON_NONE); } } @@ -1498,14 +1527,14 @@ static void node_composit_buts_dblur(uiLayout *layout, bContext *UNUSED(C), Poin uiItemR(layout, ptr, "iterations", 0, NULL, ICON_NONE); uiItemR(layout, ptr, "use_wrap", 0, NULL, ICON_NONE); - col= uiLayoutColumn(layout, 1); - uiItemL(col, "Center:", ICON_NONE); - uiItemR(col, ptr, "center_x", 0, "X", ICON_NONE); - uiItemR(col, ptr, "center_y", 0, "Y", ICON_NONE); + col = uiLayoutColumn(layout, 1); + uiItemL(col, IFACE_("Center:"), ICON_NONE); + uiItemR(col, ptr, "center_x", 0, IFACE_("X"), ICON_NONE); + uiItemR(col, ptr, "center_y", 0, IFACE_("Y"), ICON_NONE); uiItemS(layout); - col= uiLayoutColumn(layout, 1); + col = uiLayoutColumn(layout, 1); uiItemR(col, ptr, "distance", 0, NULL, ICON_NONE); uiItemR(col, ptr, "angle", 0, NULL, ICON_NONE); @@ -1519,7 +1548,7 @@ static void node_composit_buts_bilateralblur(uiLayout *layout, bContext *UNUSED( { uiLayout *col; - col= uiLayoutColumn(layout, 1); + col = uiLayoutColumn(layout, 1); uiItemR(col, ptr, "iterations", 0, NULL, ICON_NONE); uiItemR(col, ptr, "sigma_color", 0, NULL, ICON_NONE); uiItemR(col, ptr, "sigma_space", 0, NULL, ICON_NONE); @@ -1529,8 +1558,8 @@ static void node_composit_buts_defocus(uiLayout *layout, bContext *UNUSED(C), Po { uiLayout *sub, *col; - col= uiLayoutColumn(layout, 0); - uiItemL(col, "Bokeh Type:", ICON_NONE); + col = uiLayoutColumn(layout, 0); + uiItemL(col, IFACE_("Bokeh Type:"), ICON_NONE); uiItemR(col, ptr, "bokeh", 0, "", ICON_NONE); uiItemR(col, ptr, "angle", 0, NULL, ICON_NONE); @@ -1562,27 +1591,27 @@ static void node_composit_buts_glare(uiLayout *layout, bContext *UNUSED(C), Poin uiItemR(layout, ptr, "glare_type", 0, "", ICON_NONE); uiItemR(layout, ptr, "quality", 0, "", ICON_NONE); - if (RNA_enum_get(ptr, "glare_type")!= 1) { + if (RNA_enum_get(ptr, "glare_type") != 1) { uiItemR(layout, ptr, "iterations", 0, NULL, ICON_NONE); - if (RNA_enum_get(ptr, "glare_type")!= 0) + if (RNA_enum_get(ptr, "glare_type") != 0) uiItemR(layout, ptr, "color_modulation", UI_ITEM_R_SLIDER, NULL, ICON_NONE); } uiItemR(layout, ptr, "mix", 0, NULL, ICON_NONE); uiItemR(layout, ptr, "threshold", 0, NULL, ICON_NONE); - if (RNA_enum_get(ptr, "glare_type")== 2) { + if (RNA_enum_get(ptr, "glare_type") == 2) { uiItemR(layout, ptr, "streaks", 0, NULL, ICON_NONE); uiItemR(layout, ptr, "angle_offset", 0, NULL, ICON_NONE); } - if (RNA_enum_get(ptr, "glare_type")== 0 || RNA_enum_get(ptr, "glare_type")== 2) { + if (RNA_enum_get(ptr, "glare_type") == 0 || RNA_enum_get(ptr, "glare_type") == 2) { uiItemR(layout, ptr, "fade", UI_ITEM_R_SLIDER, NULL, ICON_NONE); - if (RNA_enum_get(ptr, "glare_type")== 0) + if (RNA_enum_get(ptr, "glare_type") == 0) uiItemR(layout, ptr, "use_rotate_45", 0, NULL, ICON_NONE); } - if (RNA_enum_get(ptr, "glare_type")== 1) { + if (RNA_enum_get(ptr, "glare_type") == 1) { uiItemR(layout, ptr, "size", 0, NULL, ICON_NONE); } } @@ -1593,7 +1622,7 @@ static void node_composit_buts_tonemap(uiLayout *layout, bContext *UNUSED(C), Po col = uiLayoutColumn(layout, 0); uiItemR(col, ptr, "tonemap_type", 0, "", ICON_NONE); - if (RNA_enum_get(ptr, "tonemap_type")== 0) { + if (RNA_enum_get(ptr, "tonemap_type") == 0) { uiItemR(col, ptr, "key", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(col, ptr, "offset", 0, NULL, ICON_NONE); uiItemR(col, ptr, "gamma", 0, NULL, ICON_NONE); @@ -1610,7 +1639,7 @@ static void node_composit_buts_lensdist(uiLayout *layout, bContext *UNUSED(C), P { uiLayout *col; - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); uiItemR(col, ptr, "use_projector", 0, NULL, ICON_NONE); col = uiLayoutColumn(col, 0); @@ -1623,14 +1652,14 @@ static void node_composit_buts_vecblur(uiLayout *layout, bContext *UNUSED(C), Po { uiLayout *col; - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); uiItemR(col, ptr, "samples", 0, NULL, ICON_NONE); - uiItemR(col, ptr, "factor", 0, "Blur", ICON_NONE); + uiItemR(col, ptr, "factor", 0, IFACE_("Blur"), ICON_NONE); - col= uiLayoutColumn(layout, 1); - uiItemL(col, "Speed:", ICON_NONE); - uiItemR(col, ptr, "speed_min", 0, "Min", ICON_NONE); - uiItemR(col, ptr, "speed_max", 0, "Max", ICON_NONE); + col = uiLayoutColumn(layout, 1); + uiItemL(col, IFACE_("Speed:"), ICON_NONE); + uiItemR(col, ptr, "speed_min", 0, IFACE_("Min"), ICON_NONE); + uiItemR(col, ptr, "speed_max", 0, IFACE_("Max"), ICON_NONE); uiItemR(layout, ptr, "use_curved", 0, NULL, ICON_NONE); } @@ -1652,18 +1681,18 @@ static void node_composit_buts_crop(uiLayout *layout, bContext *UNUSED(C), Point uiItemR(layout, ptr, "use_crop_size", 0, NULL, ICON_NONE); uiItemR(layout, ptr, "relative", 0, NULL, ICON_NONE); - col= uiLayoutColumn(layout, 1); + col = uiLayoutColumn(layout, 1); if (RNA_boolean_get(ptr, "relative")) { - uiItemR(col, ptr, "rel_min_x", 0, "Left", ICON_NONE); - uiItemR(col, ptr, "rel_max_x", 0, "Right", ICON_NONE); - uiItemR(col, ptr, "rel_min_y", 0, "Up", ICON_NONE); - uiItemR(col, ptr, "rel_max_y", 0, "Down", ICON_NONE); + uiItemR(col, ptr, "rel_min_x", 0, IFACE_("Left"), ICON_NONE); + uiItemR(col, ptr, "rel_max_x", 0, IFACE_("Right"), ICON_NONE); + uiItemR(col, ptr, "rel_min_y", 0, IFACE_("Up"), ICON_NONE); + uiItemR(col, ptr, "rel_max_y", 0, IFACE_("Down"), ICON_NONE); } else { - uiItemR(col, ptr, "min_x", 0, "Left", ICON_NONE); - uiItemR(col, ptr, "max_x", 0, "Right", ICON_NONE); - uiItemR(col, ptr, "min_y", 0, "Up", ICON_NONE); - uiItemR(col, ptr, "max_y", 0, "Down", ICON_NONE); + uiItemR(col, ptr, "min_x", 0, IFACE_("Left"), ICON_NONE); + uiItemR(col, ptr, "max_x", 0, IFACE_("Right"), ICON_NONE); + uiItemR(col, ptr, "min_y", 0, IFACE_("Up"), ICON_NONE); + uiItemR(col, ptr, "max_y", 0, IFACE_("Down"), ICON_NONE); } } @@ -1671,8 +1700,8 @@ static void node_composit_buts_splitviewer(uiLayout *layout, bContext *UNUSED(C) { uiLayout *row, *col; - col= uiLayoutColumn(layout, 0); - row= uiLayoutRow(col, 0); + col = uiLayoutColumn(layout, 0); + row = uiLayoutRow(col, 0); uiItemR(row, ptr, "axis", UI_ITEM_R_EXPAND, NULL, ICON_NONE); uiItemR(col, ptr, "factor", 0, NULL, ICON_NONE); } @@ -1681,11 +1710,11 @@ static void node_composit_buts_double_edge_mask(uiLayout *layout, bContext *UNUS { uiLayout *col; - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); - uiItemL(col, "Inner Edge:", ICON_NONE); + uiItemL(col, IFACE_("Inner Edge:"), ICON_NONE); uiItemR(col, ptr, "inner_mode", 0, "", ICON_NONE); - uiItemL(col, "Buffer Edge:", ICON_NONE); + uiItemL(col, IFACE_("Buffer Edge:"), ICON_NONE); uiItemR(col, ptr, "edge_mode", 0, "", ICON_NONE); } @@ -1742,7 +1771,7 @@ static void node_composit_buts_dilateerode(uiLayout *layout, bContext *UNUSED(C) { uiItemR(layout, ptr, "type", 0, NULL, ICON_NONE); uiItemR(layout, ptr, "distance", 0, NULL, ICON_NONE); - if (RNA_enum_get(ptr, "type") == CMP_NODE_DILATEERODE_DISTANCE) { + if (RNA_enum_get(ptr, "type") == CMP_NODE_DILATEERODE_DISTANCE_THRESH) { uiItemR(layout, ptr, "edge", 0, NULL, ICON_NONE); } } @@ -1762,8 +1791,8 @@ static void node_composit_buts_distance_matte(uiLayout *layout, bContext *UNUSED col = uiLayoutColumn(layout, 1); - uiItemL(layout, "Color Space:", ICON_NONE); - row= uiLayoutRow(layout, 0); + uiItemL(layout, IFACE_("Color Space:"), ICON_NONE); + row = uiLayoutRow(layout, 0); uiItemR(row, ptr, "channel", UI_ITEM_R_EXPAND, NULL, ICON_NONE); uiItemR(col, ptr, "tolerance", UI_ITEM_R_SLIDER, NULL, ICON_NONE); @@ -1774,16 +1803,16 @@ static void node_composit_buts_color_spill(uiLayout *layout, bContext *UNUSED(C) { uiLayout *row, *col; - uiItemL(layout, "Despill Channel:", ICON_NONE); + uiItemL(layout, IFACE_("Despill Channel:"), ICON_NONE); row = uiLayoutRow(layout, 0); uiItemR(row, ptr, "channel", UI_ITEM_R_EXPAND, NULL, ICON_NONE); - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); uiItemR(col, ptr, "limit_method", 0, NULL, ICON_NONE); - if (RNA_enum_get(ptr, "limit_method")==0) { - uiItemL(col, "Limiting Channel:", ICON_NONE); - row=uiLayoutRow(col, 0); + if (RNA_enum_get(ptr, "limit_method") == 0) { + uiItemL(col, IFACE_("Limiting Channel:"), ICON_NONE); + row = uiLayoutRow(col, 0); uiItemR(row, ptr, "limit_channel", UI_ITEM_R_EXPAND, NULL, ICON_NONE); } @@ -1800,11 +1829,11 @@ static void node_composit_buts_chroma_matte(uiLayout *layout, bContext *UNUSED(C { uiLayout *col; - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); uiItemR(col, ptr, "tolerance", 0, NULL, ICON_NONE); uiItemR(col, ptr, "threshold", 0, NULL, ICON_NONE); - col= uiLayoutColumn(layout, 1); + col = uiLayoutColumn(layout, 1); /*uiItemR(col, ptr, "lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE); Removed for now */ uiItemR(col, ptr, "gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE); /*uiItemR(col, ptr, "shadow_adjust", UI_ITEM_R_SLIDER, NULL, ICON_NONE); Removed for now*/ @@ -1814,7 +1843,7 @@ static void node_composit_buts_color_matte(uiLayout *layout, bContext *UNUSED(C) { uiLayout *col; - col= uiLayoutColumn(layout, 1); + col = uiLayoutColumn(layout, 1); uiItemR(col, ptr, "color_hue", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(col, ptr, "color_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(col, ptr, "color_value", UI_ITEM_R_SLIDER, NULL, ICON_NONE); @@ -1824,21 +1853,21 @@ static void node_composit_buts_channel_matte(uiLayout *layout, bContext *UNUSED( { uiLayout *col, *row; - uiItemL(layout, "Color Space:", ICON_NONE); - row= uiLayoutRow(layout, 0); + uiItemL(layout, IFACE_("Color Space:"), ICON_NONE); + row = uiLayoutRow(layout, 0); uiItemR(row, ptr, "color_space", UI_ITEM_R_EXPAND, NULL, ICON_NONE); - col=uiLayoutColumn(layout, 0); - uiItemL(col, "Key Channel:", ICON_NONE); - row= uiLayoutRow(col, 0); + col = uiLayoutColumn(layout, 0); + uiItemL(col, IFACE_("Key Channel:"), ICON_NONE); + row = uiLayoutRow(col, 0); uiItemR(row, ptr, "matte_channel", UI_ITEM_R_EXPAND, NULL, ICON_NONE); col = uiLayoutColumn(layout, 0); uiItemR(col, ptr, "limit_method", 0, NULL, ICON_NONE); - if (RNA_enum_get(ptr, "limit_method")==0) { - uiItemL(col, "Limiting Channel:", ICON_NONE); - row=uiLayoutRow(col, 0); + if (RNA_enum_get(ptr, "limit_method") == 0) { + uiItemL(col, IFACE_("Limiting Channel:"), ICON_NONE); + row = uiLayoutRow(col, 0); uiItemR(row, ptr, "limit_channel", UI_ITEM_R_EXPAND, NULL, ICON_NONE); } @@ -1850,7 +1879,7 @@ static void node_composit_buts_luma_matte(uiLayout *layout, bContext *UNUSED(C), { uiLayout *col; - col= uiLayoutColumn(layout, 1); + col = uiLayoutColumn(layout, 1); uiItemR(col, ptr, "limit_max", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(col, ptr, "limit_min", UI_ITEM_R_SLIDER, NULL, ICON_NONE); } @@ -1868,8 +1897,8 @@ static void node_composit_buts_id_mask(uiLayout *layout, bContext *UNUSED(C), Po /* draw function for file output node sockets, displays only sub-path and format, no value button */ static void node_draw_input_file_output(const bContext *C, uiBlock *block, - bNodeTree *ntree, bNode *node, bNodeSocket *sock, - const char *UNUSED(name), int x, int y, int width) + bNodeTree *ntree, bNode *node, bNodeSocket *sock, + const char *UNUSED(name), int x, int y, int width) { uiLayout *layout, *row; PointerRNA nodeptr, inputptr, imfptr; @@ -1877,7 +1906,7 @@ static void node_draw_input_file_output(const bContext *C, uiBlock *block, int rx, ry; RNA_pointer_create(&ntree->id, &RNA_Node, node, &nodeptr); - layout = uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, x, y+NODE_DY, width, 20, UI_GetStyle()); + layout = uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, x, y + NODE_DY, width, 20, UI_GetStyle()); row = uiLayoutRow(layout, 0); imfptr = RNA_pointer_get(&nodeptr, "format"); @@ -1900,7 +1929,7 @@ static void node_draw_input_file_output(const bContext *C, uiBlock *block, imfptr = RNA_pointer_get(&inputptr, "format"); imtype_prop = RNA_struct_find_property(&imfptr, "file_format"); - RNA_property_enum_name((bContext*)C, &imfptr, imtype_prop, RNA_property_enum_get(&imfptr, imtype_prop), &imtype_name); + RNA_property_enum_name((bContext *)C, &imfptr, imtype_prop, RNA_property_enum_get(&imfptr, imtype_prop), &imtype_name); uiBlockSetEmboss(block, UI_EMBOSSP); uiItemL(row, imtype_name, 0); uiBlockSetEmboss(block, UI_EMBOSSN); @@ -1914,9 +1943,9 @@ static void node_composit_buts_file_output(uiLayout *layout, bContext *UNUSED(C) int multilayer = (RNA_enum_get(&imfptr, "file_format") == R_IMF_IMTYPE_MULTILAYER); if (multilayer) - uiItemL(layout, "Path:", 0); + uiItemL(layout, IFACE_("Path:"), 0); else - uiItemL(layout, "Base Path:", 0); + uiItemL(layout, IFACE_("Base Path:"), 0); uiItemR(layout, ptr, "base_path", 0, "", ICON_NONE); } static void node_composit_buts_file_output_details(uiLayout *layout, bContext *C, PointerRNA *ptr) @@ -1932,7 +1961,7 @@ static void node_composit_buts_file_output_details(uiLayout *layout, bContext *C uiItemS(layout); - uiItemO(layout, "Add Input", ICON_ZOOMIN, "NODE_OT_output_file_add_socket"); + uiItemO(layout, IFACE_("Add Input"), ICON_ZOOMIN, "NODE_OT_output_file_add_socket"); active_index = RNA_int_get(ptr, "active_input_index"); /* using different collection properties if multilayer format is enabled */ @@ -1958,7 +1987,7 @@ static void node_composit_buts_file_output_details(uiLayout *layout, bContext *C uiLayout *row, *col; col = uiLayoutColumn(layout, 1); - uiItemL(col, "Layer:", 0); + uiItemL(col, IFACE_("Layer:"), 0); row = uiLayoutRow(col, 0); uiItemR(row, &active_input_ptr, "name", 0, "", 0); uiItemFullO(row, "NODE_OT_output_file_remove_active_socket", "", ICON_X, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_R_ICON_ONLY); @@ -1967,7 +1996,7 @@ static void node_composit_buts_file_output_details(uiLayout *layout, bContext *C uiLayout *row, *col; col = uiLayoutColumn(layout, 1); - uiItemL(col, "File Path:", 0); + uiItemL(col, IFACE_("File Path:"), 0); row = uiLayoutRow(col, 0); uiItemR(row, &active_input_ptr, "path", 0, "", 0); uiItemFullO(row, "NODE_OT_output_file_remove_active_socket", "", ICON_X, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_R_ICON_ONLY); @@ -1976,10 +2005,10 @@ static void node_composit_buts_file_output_details(uiLayout *layout, bContext *C imfptr = RNA_pointer_get(&active_input_ptr, "format"); col = uiLayoutColumn(layout, 1); - uiItemL(col, "Format:", 0); + uiItemL(col, IFACE_("Format:"), 0); uiItemR(col, &active_input_ptr, "use_node_format", 0, NULL, 0); - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); uiLayoutSetActive(col, RNA_boolean_get(&active_input_ptr, "use_node_format") == FALSE); uiTemplateImageSettings(col, &imfptr); } @@ -1989,6 +2018,14 @@ static void node_composit_buts_file_output_details(uiLayout *layout, bContext *C static void node_composit_buts_scale(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { uiItemR(layout, ptr, "space", 0, "", ICON_NONE); + + if (RNA_enum_get(ptr, "space") == CMP_SCALE_RENDERPERCENT) { + uiLayout *row; + uiItemR(layout, ptr, "frame_method", UI_ITEM_R_EXPAND, NULL, ICON_NONE); + row = uiLayoutRow(layout, TRUE); + uiItemR(row, ptr, "offset_x", 0, "X", ICON_NONE); + uiItemR(row, ptr, "offset_y", 0, "Y", ICON_NONE); + } } static void node_composit_buts_rotate(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) @@ -2000,7 +2037,7 @@ static void node_composit_buts_invert(uiLayout *layout, bContext *UNUSED(C), Poi { uiLayout *col; - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); uiItemR(col, ptr, "invert_rgb", 0, NULL, ICON_NONE); uiItemR(col, ptr, "invert_alpha", 0, NULL, ICON_NONE); } @@ -2021,7 +2058,7 @@ static void node_composit_buts_colorbalance(uiLayout *layout, bContext *UNUSED(C uiItemR(layout, ptr, "correction_method", 0, NULL, ICON_NONE); - if (RNA_enum_get(ptr, "correction_method")== 0) { + if (RNA_enum_get(ptr, "correction_method") == 0) { split = uiLayoutSplit(layout, 0, 0); col = uiLayoutColumn(split, 0); @@ -2064,9 +2101,9 @@ static void node_composit_buts_colorbalance_but(uiLayout *layout, bContext *UNUS { uiItemR(layout, ptr, "correction_method", 0, NULL, ICON_NONE); - if (RNA_enum_get(ptr, "correction_method")== 0) { + if (RNA_enum_get(ptr, "correction_method") == 0) { - uiTemplateColorWheel(layout, ptr, "lift", 1, 1, 0, 1); + uiTemplateColorWheel(layout, ptr, "lift", 1, 1, 0, 1); uiItemR(layout, ptr, "lift", 0, NULL, ICON_NONE); uiTemplateColorWheel(layout, ptr, "gamma", 1, 1, 1, 1); @@ -2105,7 +2142,7 @@ static void node_composit_buts_movieclip(uiLayout *layout, bContext *C, PointerR static void node_composit_buts_stabilize2d(uiLayout *layout, bContext *C, PointerRNA *ptr) { - bNode *node= ptr->data; + bNode *node = ptr->data; uiTemplateID(layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL); @@ -2122,7 +2159,7 @@ static void node_composit_buts_transform(uiLayout *layout, bContext *UNUSED(C), static void node_composit_buts_moviedistortion(uiLayout *layout, bContext *C, PointerRNA *ptr) { - bNode *node= ptr->data; + bNode *node = ptr->data; uiTemplateID(layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL); @@ -2143,14 +2180,14 @@ static void node_composit_buts_colorcorrection(uiLayout *layout, bContext *UNUSE row = uiLayoutRow(layout, 0); uiItemL(row, "", 0); - uiItemL(row, "Saturation", 0); - uiItemL(row, "Contrast", 0); - uiItemL(row, "Gamma", 0); - uiItemL(row, "Gain", 0); - uiItemL(row, "Lift", 0); + uiItemL(row, IFACE_("Saturation"), 0); + uiItemL(row, IFACE_("Contrast"), 0); + uiItemL(row, IFACE_("Gamma"), 0); + uiItemL(row, IFACE_("Gain"), 0); + uiItemL(row, IFACE_("Lift"), 0); row = uiLayoutRow(layout, 0); - uiItemL(row, "Master", 0); + uiItemL(row, IFACE_("Master"), 0); uiItemR(row, ptr, "master_saturation", UI_ITEM_R_SLIDER, "", ICON_NONE); uiItemR(row, ptr, "master_contrast", UI_ITEM_R_SLIDER, "", ICON_NONE); uiItemR(row, ptr, "master_gamma", UI_ITEM_R_SLIDER, "", ICON_NONE); @@ -2158,7 +2195,7 @@ static void node_composit_buts_colorcorrection(uiLayout *layout, bContext *UNUSE uiItemR(row, ptr, "master_lift", UI_ITEM_R_SLIDER, "", ICON_NONE); row = uiLayoutRow(layout, 0); - uiItemL(row, "Highlights", 0); + uiItemL(row, IFACE_("Highlights"), 0); uiItemR(row, ptr, "highlights_saturation", UI_ITEM_R_SLIDER, "", ICON_NONE); uiItemR(row, ptr, "highlights_contrast", UI_ITEM_R_SLIDER, "", ICON_NONE); uiItemR(row, ptr, "highlights_gamma", UI_ITEM_R_SLIDER, "", ICON_NONE); @@ -2166,7 +2203,7 @@ static void node_composit_buts_colorcorrection(uiLayout *layout, bContext *UNUSE uiItemR(row, ptr, "highlights_lift", UI_ITEM_R_SLIDER, "", ICON_NONE); row = uiLayoutRow(layout, 0); - uiItemL(row, "Midtones", 0); + uiItemL(row, IFACE_("Midtones"), 0); uiItemR(row, ptr, "midtones_saturation", UI_ITEM_R_SLIDER, "", ICON_NONE); uiItemR(row, ptr, "midtones_contrast", UI_ITEM_R_SLIDER, "", ICON_NONE); uiItemR(row, ptr, "midtones_gamma", UI_ITEM_R_SLIDER, "", ICON_NONE); @@ -2174,7 +2211,7 @@ static void node_composit_buts_colorcorrection(uiLayout *layout, bContext *UNUSE uiItemR(row, ptr, "midtones_lift", UI_ITEM_R_SLIDER, "", ICON_NONE); row = uiLayoutRow(layout, 0); - uiItemL(row, "Shadows", 0); + uiItemL(row, IFACE_("Shadows"), 0); uiItemR(row, ptr, "shadows_saturation", UI_ITEM_R_SLIDER, "", ICON_NONE); uiItemR(row, ptr, "shadows_contrast", UI_ITEM_R_SLIDER, "", ICON_NONE); uiItemR(row, ptr, "shadows_gamma", UI_ITEM_R_SLIDER, "", ICON_NONE); @@ -2186,7 +2223,8 @@ static void node_composit_buts_colorcorrection(uiLayout *layout, bContext *UNUSE uiItemR(row, ptr, "midtones_end", UI_ITEM_R_SLIDER, NULL, ICON_NONE); } -static void node_composit_buts_colorcorrection_but(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { +static void node_composit_buts_colorcorrection_but(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) +{ uiLayout *row; row = uiLayoutRow(layout, 0); @@ -2194,31 +2232,31 @@ static void node_composit_buts_colorcorrection_but(uiLayout *layout, bContext *U uiItemR(row, ptr, "green", 0, NULL, ICON_NONE); uiItemR(row, ptr, "blue", 0, NULL, ICON_NONE); row = layout; - uiItemL(row, "Saturation", 0); + uiItemL(row, IFACE_("Saturation"), 0); uiItemR(row, ptr, "master_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "highlights_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "midtones_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "shadows_saturation", UI_ITEM_R_SLIDER, NULL, ICON_NONE); - uiItemL(row, "Contrast", 0); + uiItemL(row, IFACE_("Contrast"), 0); uiItemR(row, ptr, "master_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "highlights_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "midtones_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "shadows_contrast", UI_ITEM_R_SLIDER, NULL, ICON_NONE); - uiItemL(row, "Gamma", 0); + uiItemL(row, IFACE_("Gamma"), 0); uiItemR(row, ptr, "master_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "highlights_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "midtones_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "shadows_gamma", UI_ITEM_R_SLIDER, NULL, ICON_NONE); - uiItemL(row, "Gain", 0); + uiItemL(row, IFACE_("Gain"), 0); uiItemR(row, ptr, "master_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "highlights_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "midtones_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "shadows_gain", UI_ITEM_R_SLIDER, NULL, ICON_NONE); - uiItemL(row, "Lift", 0); + uiItemL(row, IFACE_("Lift"), 0); uiItemR(row, ptr, "master_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "highlights_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "midtones_lift", UI_ITEM_R_SLIDER, NULL, ICON_NONE); @@ -2238,11 +2276,11 @@ static void node_composit_buts_boxmask(uiLayout *layout, bContext *UNUSED(C), Po { uiLayout *row; - row= uiLayoutRow(layout, 1); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "x", 0, NULL, ICON_NONE); uiItemR(row, ptr, "y", 0, NULL, ICON_NONE); - row= uiLayoutRow(layout, 1); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "width", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "height", UI_ITEM_R_SLIDER, NULL, ICON_NONE); @@ -2259,32 +2297,32 @@ static void node_composit_buts_bokehimage(uiLayout *layout, bContext *UNUSED(C), uiItemR(layout, ptr, "shift", UI_ITEM_R_SLIDER, NULL, ICON_NONE); } -void node_composit_backdrop_viewer(SpaceNode* snode, ImBuf* backdrop, bNode* node, int x, int y) +void node_composit_backdrop_viewer(SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y) { // node_composit_backdrop_canvas(snode, backdrop, node, x, y); - if (node->custom1 == 0) { /// @todo: why did we need this one? + if (node->custom1 == 0) { const float backdropWidth = backdrop->x; const float backdropHeight = backdrop->y; - const float cx = x+snode->zoom*backdropWidth*node->custom3; - const float cy = y+snode->zoom*backdropHeight*node->custom4; + const float cx = x + snode->zoom * backdropWidth * node->custom3; + const float cy = y + snode->zoom * backdropHeight * node->custom4; glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINES); - glVertex2f(cx-25, cy-25); - glVertex2f(cx+25, cy+25); - glVertex2f(cx+25, cy-25); - glVertex2f(cx-25, cy+25); + glVertex2f(cx - 25, cy - 25); + glVertex2f(cx + 25, cy + 25); + glVertex2f(cx + 25, cy - 25); + glVertex2f(cx - 25, cy + 25); glEnd(); } } -void node_composit_backdrop_boxmask(SpaceNode* snode, ImBuf* backdrop, bNode* node, int x, int y) +void node_composit_backdrop_boxmask(SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y) { NodeBoxMask *boxmask = node->storage; const float backdropWidth = backdrop->x; const float backdropHeight = backdrop->y; - const float aspect = backdropWidth/backdropHeight; + const float aspect = backdropWidth / backdropHeight; const float rad = DEG2RADF(-boxmask->rotation); const float cosine = cosf(rad); const float sine = sinf(rad); @@ -2300,17 +2338,17 @@ void node_composit_backdrop_boxmask(SpaceNode* snode, ImBuf* backdrop, bNode* no glColor3f(1.0, 1.0, 1.0); - cx = x+snode->zoom*backdropWidth*boxmask->x; - cy = y+snode->zoom*backdropHeight*boxmask->y; + cx = x + snode->zoom * backdropWidth * boxmask->x; + cy = y + snode->zoom * backdropHeight * boxmask->y; - x1 = cx - (cosine*halveBoxWidth+sine*halveBoxHeight)*snode->zoom; - x2 = cx - (cosine*-halveBoxWidth+sine*halveBoxHeight)*snode->zoom; - x3 = cx - (cosine*-halveBoxWidth+sine*-halveBoxHeight)*snode->zoom; - x4 = cx - (cosine*halveBoxWidth+sine*-halveBoxHeight)*snode->zoom; - y1 = cy - (-sine*halveBoxWidth + cosine*halveBoxHeight)*snode->zoom; - y2 = cy - (-sine*-halveBoxWidth + cosine*halveBoxHeight)*snode->zoom; - y3 = cy - (-sine*-halveBoxWidth + cosine*-halveBoxHeight)*snode->zoom; - y4 = cy - (-sine*halveBoxWidth + cosine*-halveBoxHeight)*snode->zoom; + x1 = cx - (cosine * halveBoxWidth + sine * halveBoxHeight) * snode->zoom; + x2 = cx - (cosine * -halveBoxWidth + sine * halveBoxHeight) * snode->zoom; + x3 = cx - (cosine * -halveBoxWidth + sine * -halveBoxHeight) * snode->zoom; + x4 = cx - (cosine * halveBoxWidth + sine * -halveBoxHeight) * snode->zoom; + y1 = cy - (-sine * halveBoxWidth + cosine * halveBoxHeight) * snode->zoom; + y2 = cy - (-sine * -halveBoxWidth + cosine * halveBoxHeight) * snode->zoom; + y3 = cy - (-sine * -halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom; + y4 = cy - (-sine * halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom; glBegin(GL_LINE_LOOP); glVertex2f(x1, y1); @@ -2320,9 +2358,9 @@ void node_composit_backdrop_boxmask(SpaceNode* snode, ImBuf* backdrop, bNode* no glEnd(); } -void node_composit_backdrop_ellipsemask(SpaceNode* snode, ImBuf* backdrop, bNode* node, int x, int y) +void node_composit_backdrop_ellipsemask(SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y) { - NodeEllipseMask * ellipsemask = node->storage; + NodeEllipseMask *ellipsemask = node->storage; const float backdropWidth = backdrop->x; const float backdropHeight = backdrop->y; const float aspect = backdropWidth / backdropHeight; @@ -2341,17 +2379,17 @@ void node_composit_backdrop_ellipsemask(SpaceNode* snode, ImBuf* backdrop, bNode glColor3f(1.0, 1.0, 1.0); - cx = x+snode->zoom*backdropWidth*ellipsemask->x; - cy = y+snode->zoom*backdropHeight*ellipsemask->y; + cx = x + snode->zoom * backdropWidth * ellipsemask->x; + cy = y + snode->zoom * backdropHeight * ellipsemask->y; - x1 = cx - (cosine*halveBoxWidth+sine*halveBoxHeight)*snode->zoom; - x2 = cx - (cosine*-halveBoxWidth+sine*halveBoxHeight)*snode->zoom; - x3 = cx - (cosine*-halveBoxWidth+sine*-halveBoxHeight)*snode->zoom; - x4 = cx - (cosine*halveBoxWidth+sine*-halveBoxHeight)*snode->zoom; - y1 = cy - (-sine*halveBoxWidth + cosine*halveBoxHeight)*snode->zoom; - y2 = cy - (-sine*-halveBoxWidth + cosine*halveBoxHeight)*snode->zoom; - y3 = cy - (-sine*-halveBoxWidth + cosine*-halveBoxHeight)*snode->zoom; - y4 = cy - (-sine*halveBoxWidth + cosine*-halveBoxHeight)*snode->zoom; + x1 = cx - (cosine * halveBoxWidth + sine * halveBoxHeight) * snode->zoom; + x2 = cx - (cosine * -halveBoxWidth + sine * halveBoxHeight) * snode->zoom; + x3 = cx - (cosine * -halveBoxWidth + sine * -halveBoxHeight) * snode->zoom; + x4 = cx - (cosine * halveBoxWidth + sine * -halveBoxHeight) * snode->zoom; + y1 = cy - (-sine * halveBoxWidth + cosine * halveBoxHeight) * snode->zoom; + y2 = cy - (-sine * -halveBoxWidth + cosine * halveBoxHeight) * snode->zoom; + y3 = cy - (-sine * -halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom; + y4 = cy - (-sine * halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom; glBegin(GL_LINE_LOOP); @@ -2365,10 +2403,10 @@ void node_composit_backdrop_ellipsemask(SpaceNode* snode, ImBuf* backdrop, bNode static void node_composit_buts_ellipsemask(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { uiLayout *row; - row= uiLayoutRow(layout, 1); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "x", 0, NULL, ICON_NONE); uiItemR(row, ptr, "y", 0, NULL, ICON_NONE); - row= uiLayoutRow(layout, 1); + row = uiLayoutRow(layout, 1); uiItemR(row, ptr, "width", UI_ITEM_R_SLIDER, NULL, ICON_NONE); uiItemR(row, ptr, "height", UI_ITEM_R_SLIDER, NULL, ICON_NONE); @@ -2381,13 +2419,53 @@ static void node_composit_buts_viewer_but(uiLayout *layout, bContext *UNUSED(C), uiLayout *col; uiItemR(layout, ptr, "tile_order", 0, NULL, ICON_NONE); - if (RNA_enum_get(ptr, "tile_order")==0) { - col= uiLayoutColumn(layout, 1); + if (RNA_enum_get(ptr, "tile_order") == 0) { + col = uiLayoutColumn(layout, 1); uiItemR(col, ptr, "center_x", 0, NULL, ICON_NONE); uiItemR(col, ptr, "center_y", 0, NULL, ICON_NONE); } } +static void node_composit_buts_mask(uiLayout *layout, bContext *C, PointerRNA *ptr) +{ + uiTemplateID(layout, C, ptr, "mask", NULL, NULL, NULL); + uiItemR(layout, ptr, "smooth_mask", 0, NULL, ICON_NONE); + +} + +static void node_composit_buts_keyingscreen(uiLayout *layout, bContext *C, PointerRNA *ptr) +{ + bNode *node= ptr->data; + + uiTemplateID(layout, C, ptr, "clip", NULL, NULL, NULL); + + if (node->id) { + MovieClip *clip = (MovieClip *) node->id; + uiLayout *col; + PointerRNA tracking_ptr; + + RNA_pointer_create(&clip->id, &RNA_MovieTracking, &clip->tracking, &tracking_ptr); + + col = uiLayoutColumn(layout, 1); + uiItemPointerR(col, ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA); + } +} + +static void node_composit_buts_keying(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) +{ + /* bNode *node= ptr->data; */ /* UNUSED */ + + uiItemR(layout, ptr, "blur_pre", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "screen_balance", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "despill_factor", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "edge_kernel_radius", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "edge_kernel_tolerance", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "clip_black", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "clip_white", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "dilate_distance", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "blur_post", 0, NULL, ICON_NONE); +} + /* only once called */ static void node_composit_set_butfunc(bNodeType *ntype) { @@ -2395,49 +2473,49 @@ static void node_composit_set_butfunc(bNodeType *ntype) /* case NODE_GROUP: note, typeinfo for group is generated... see "XXX ugly hack" */ case CMP_NODE_IMAGE: - ntype->uifunc= node_composit_buts_image; + ntype->uifunc = node_composit_buts_image; break; case CMP_NODE_R_LAYERS: - ntype->uifunc= node_composit_buts_renderlayers; + ntype->uifunc = node_composit_buts_renderlayers; break; case CMP_NODE_NORMAL: - ntype->uifunc= node_buts_normal; + ntype->uifunc = node_buts_normal; break; case CMP_NODE_CURVE_VEC: - ntype->uifunc= node_buts_curvevec; + ntype->uifunc = node_buts_curvevec; break; case CMP_NODE_CURVE_RGB: - ntype->uifunc= node_buts_curvecol; + ntype->uifunc = node_buts_curvecol; break; case CMP_NODE_VALUE: - ntype->uifunc= node_buts_value; + ntype->uifunc = node_buts_value; break; case CMP_NODE_RGB: - ntype->uifunc= node_buts_rgb; + ntype->uifunc = node_buts_rgb; break; case CMP_NODE_FLIP: - ntype->uifunc= node_composit_buts_flip; + ntype->uifunc = node_composit_buts_flip; break; case CMP_NODE_SPLITVIEWER: - ntype->uifunc= node_composit_buts_splitviewer; + ntype->uifunc = node_composit_buts_splitviewer; break; case CMP_NODE_MIX_RGB: - ntype->uifunc= node_buts_mix_rgb; + ntype->uifunc = node_buts_mix_rgb; break; case CMP_NODE_VALTORGB: - ntype->uifunc= node_buts_colorramp; + ntype->uifunc = node_buts_colorramp; break; case CMP_NODE_CROP: - ntype->uifunc= node_composit_buts_crop; + ntype->uifunc = node_composit_buts_crop; break; case CMP_NODE_BLUR: - ntype->uifunc= node_composit_buts_blur; + ntype->uifunc = node_composit_buts_blur; break; case CMP_NODE_DBLUR: - ntype->uifunc= node_composit_buts_dblur; + ntype->uifunc = node_composit_buts_dblur; break; case CMP_NODE_BILATERALBLUR: - ntype->uifunc= node_composit_buts_bilateralblur; + ntype->uifunc = node_composit_buts_bilateralblur; break; case CMP_NODE_DEFOCUS: ntype->uifunc = node_composit_buts_defocus; @@ -2452,134 +2530,142 @@ static void node_composit_set_butfunc(bNodeType *ntype) ntype->uifunc = node_composit_buts_lensdist; break; case CMP_NODE_VECBLUR: - ntype->uifunc= node_composit_buts_vecblur; + ntype->uifunc = node_composit_buts_vecblur; break; case CMP_NODE_FILTER: - ntype->uifunc= node_composit_buts_filter; + ntype->uifunc = node_composit_buts_filter; break; case CMP_NODE_MAP_VALUE: - ntype->uifunc= node_composit_buts_map_value; + ntype->uifunc = node_composit_buts_map_value; break; case CMP_NODE_TIME: - ntype->uifunc= node_buts_time; + ntype->uifunc = node_buts_time; break; case CMP_NODE_ALPHAOVER: - ntype->uifunc= node_composit_buts_alphaover; + ntype->uifunc = node_composit_buts_alphaover; break; case CMP_NODE_HUE_SAT: - ntype->uifunc= node_composit_buts_hue_sat; + ntype->uifunc = node_composit_buts_hue_sat; break; case CMP_NODE_TEXTURE: - ntype->uifunc= node_buts_texture; + ntype->uifunc = node_buts_texture; break; case CMP_NODE_DILATEERODE: - ntype->uifunc= node_composit_buts_dilateerode; + ntype->uifunc = node_composit_buts_dilateerode; break; case CMP_NODE_OUTPUT_FILE: - ntype->uifunc= node_composit_buts_file_output; - ntype->uifuncbut= node_composit_buts_file_output_details; + ntype->uifunc = node_composit_buts_file_output; + ntype->uifuncbut = node_composit_buts_file_output_details; ntype->drawinputfunc = node_draw_input_file_output; break; case CMP_NODE_DIFF_MATTE: - ntype->uifunc=node_composit_buts_diff_matte; + ntype->uifunc = node_composit_buts_diff_matte; break; case CMP_NODE_DIST_MATTE: - ntype->uifunc=node_composit_buts_distance_matte; + ntype->uifunc = node_composit_buts_distance_matte; break; case CMP_NODE_COLOR_SPILL: - ntype->uifunc=node_composit_buts_color_spill; + ntype->uifunc = node_composit_buts_color_spill; break; case CMP_NODE_CHROMA_MATTE: - ntype->uifunc=node_composit_buts_chroma_matte; + ntype->uifunc = node_composit_buts_chroma_matte; break; case CMP_NODE_COLOR_MATTE: - ntype->uifunc=node_composit_buts_color_matte; + ntype->uifunc = node_composit_buts_color_matte; break; case CMP_NODE_SCALE: - ntype->uifunc= node_composit_buts_scale; + ntype->uifunc = node_composit_buts_scale; break; case CMP_NODE_ROTATE: - ntype->uifunc=node_composit_buts_rotate; + ntype->uifunc = node_composit_buts_rotate; break; case CMP_NODE_CHANNEL_MATTE: - ntype->uifunc= node_composit_buts_channel_matte; + ntype->uifunc = node_composit_buts_channel_matte; break; case CMP_NODE_LUMA_MATTE: - ntype->uifunc= node_composit_buts_luma_matte; + ntype->uifunc = node_composit_buts_luma_matte; break; case CMP_NODE_MAP_UV: - ntype->uifunc= node_composit_buts_map_uv; + ntype->uifunc = node_composit_buts_map_uv; break; case CMP_NODE_ID_MASK: - ntype->uifunc= node_composit_buts_id_mask; + ntype->uifunc = node_composit_buts_id_mask; break; case CMP_NODE_DOUBLEEDGEMASK: - ntype->uifunc= node_composit_buts_double_edge_mask; + ntype->uifunc = node_composit_buts_double_edge_mask; break; case CMP_NODE_MATH: - ntype->uifunc= node_buts_math; + ntype->uifunc = node_buts_math; break; case CMP_NODE_INVERT: - ntype->uifunc= node_composit_buts_invert; + ntype->uifunc = node_composit_buts_invert; break; case CMP_NODE_PREMULKEY: - ntype->uifunc= node_composit_buts_premulkey; + ntype->uifunc = node_composit_buts_premulkey; break; case CMP_NODE_VIEW_LEVELS: - ntype->uifunc=node_composit_buts_view_levels; + ntype->uifunc = node_composit_buts_view_levels; break; case CMP_NODE_COLORBALANCE: - ntype->uifunc=node_composit_buts_colorbalance; - ntype->uifuncbut=node_composit_buts_colorbalance_but; + ntype->uifunc = node_composit_buts_colorbalance; + ntype->uifuncbut = node_composit_buts_colorbalance_but; break; case CMP_NODE_HUECORRECT: - ntype->uifunc=node_composit_buts_huecorrect; + ntype->uifunc = node_composit_buts_huecorrect; break; case CMP_NODE_ZCOMBINE: - ntype->uifunc=node_composit_buts_zcombine; + ntype->uifunc = node_composit_buts_zcombine; break; case CMP_NODE_COMBYCCA: case CMP_NODE_SEPYCCA: - ntype->uifunc=node_composit_buts_ycc; + ntype->uifunc = node_composit_buts_ycc; break; case CMP_NODE_MOVIECLIP: - ntype->uifunc= node_composit_buts_movieclip; + ntype->uifunc = node_composit_buts_movieclip; break; case CMP_NODE_STABILIZE2D: - ntype->uifunc= node_composit_buts_stabilize2d; + ntype->uifunc = node_composit_buts_stabilize2d; break; case CMP_NODE_TRANSFORM: - ntype->uifunc= node_composit_buts_transform; + ntype->uifunc = node_composit_buts_transform; break; case CMP_NODE_MOVIEDISTORTION: - ntype->uifunc= node_composit_buts_moviedistortion; + ntype->uifunc = node_composit_buts_moviedistortion; break; case CMP_NODE_COLORCORRECTION: - ntype->uifunc=node_composit_buts_colorcorrection; - ntype->uifuncbut=node_composit_buts_colorcorrection_but; + ntype->uifunc = node_composit_buts_colorcorrection; + ntype->uifuncbut = node_composit_buts_colorcorrection_but; break; case CMP_NODE_SWITCH: - ntype->uifunc= node_composit_buts_switch; + ntype->uifunc = node_composit_buts_switch; break; case CMP_NODE_MASK_BOX: - ntype->uifunc= node_composit_buts_boxmask; + ntype->uifunc = node_composit_buts_boxmask; ntype->uibackdropfunc = node_composit_backdrop_boxmask; break; case CMP_NODE_MASK_ELLIPSE: - ntype->uifunc= node_composit_buts_ellipsemask; + ntype->uifunc = node_composit_buts_ellipsemask; ntype->uibackdropfunc = node_composit_backdrop_ellipsemask; break; case CMP_NODE_BOKEHIMAGE: - ntype->uifunc= node_composit_buts_bokehimage; + ntype->uifunc = node_composit_buts_bokehimage; break; case CMP_NODE_VIEWER: ntype->uifunc = NULL; - ntype->uifuncbut= node_composit_buts_viewer_but; + ntype->uifuncbut = node_composit_buts_viewer_but; ntype->uibackdropfunc = node_composit_backdrop_viewer; break; - + case CMP_NODE_MASK: + ntype->uifunc= node_composit_buts_mask; + break; + case CMP_NODE_KEYINGSCREEN: + ntype->uifunc = node_composit_buts_keyingscreen; + break; + case CMP_NODE_KEYING: + ntype->uifunc = node_composit_buts_keying; + break; default: - ntype->uifunc= NULL; + ntype->uifunc = NULL; } } @@ -2589,42 +2675,42 @@ static void node_texture_buts_bricks(uiLayout *layout, bContext *UNUSED(C), Poin { uiLayout *col; - col= uiLayoutColumn(layout, 1); - uiItemR(col, ptr, "offset", 0, "Offset", ICON_NONE); - uiItemR(col, ptr, "offset_frequency", 0, "Frequency", ICON_NONE); + col = uiLayoutColumn(layout, 1); + uiItemR(col, ptr, "offset", 0, IFACE_("Offset"), ICON_NONE); + uiItemR(col, ptr, "offset_frequency", 0, IFACE_("Frequency"), ICON_NONE); - col= uiLayoutColumn(layout, 1); - uiItemR(col, ptr, "squash", 0, "Squash", ICON_NONE); - uiItemR(col, ptr, "squash_frequency", 0, "Frequency", ICON_NONE); + col = uiLayoutColumn(layout, 1); + uiItemR(col, ptr, "squash", 0, IFACE_("Squash"), ICON_NONE); + uiItemR(col, ptr, "squash_frequency", 0, IFACE_("Frequency"), ICON_NONE); } static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { PointerRNA tex_ptr; - bNode *node= ptr->data; - ID *id= ptr->id.data; + bNode *node = ptr->data; + ID *id = ptr->id.data; Tex *tex = (Tex *)node->storage; uiLayout *col, *row; RNA_pointer_create(id, &RNA_Texture, tex, &tex_ptr); - col= uiLayoutColumn(layout, 0); + col = uiLayoutColumn(layout, 0); - switch ( tex->type ) { + switch (tex->type) { case TEX_BLEND: uiItemR(col, &tex_ptr, "progression", 0, "", ICON_NONE); - row= uiLayoutRow(col, 0); + row = uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "use_flip_axis", UI_ITEM_R_EXPAND, NULL, ICON_NONE); break; case TEX_MARBLE: - row= uiLayoutRow(col, 0); + row = uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "marble_type", UI_ITEM_R_EXPAND, NULL, ICON_NONE); - row= uiLayoutRow(col, 0); + row = uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, ICON_NONE); - row= uiLayoutRow(col, 0); + row = uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noise_basis", 0, "", ICON_NONE); - row= uiLayoutRow(col, 0); + row = uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noise_basis_2", UI_ITEM_R_EXPAND, NULL, ICON_NONE); break; @@ -2633,9 +2719,9 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), Pointe break; case TEX_STUCCI: - row= uiLayoutRow(col, 0); + row = uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "stucci_type", UI_ITEM_R_EXPAND, NULL, ICON_NONE); - row= uiLayoutRow(col, 0); + row = uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, ICON_NONE); uiItemR(col, &tex_ptr, "noise_basis", 0, "", ICON_NONE); break; @@ -2643,20 +2729,20 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), Pointe case TEX_WOOD: uiItemR(col, &tex_ptr, "noise_basis", 0, "", ICON_NONE); uiItemR(col, &tex_ptr, "wood_type", 0, "", ICON_NONE); - row= uiLayoutRow(col, 0); + row = uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noise_basis_2", UI_ITEM_R_EXPAND, NULL, ICON_NONE); - row= uiLayoutRow(col, 0); - uiLayoutSetActive(row, !(RNA_enum_get(&tex_ptr, "wood_type")==TEX_BAND || RNA_enum_get(&tex_ptr, "wood_type")==TEX_RING)); + row = uiLayoutRow(col, 0); + uiLayoutSetActive(row, !(RNA_enum_get(&tex_ptr, "wood_type") == TEX_BAND || RNA_enum_get(&tex_ptr, "wood_type") == TEX_RING)); uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, ICON_NONE); break; case TEX_CLOUDS: uiItemR(col, &tex_ptr, "noise_basis", 0, "", ICON_NONE); - row= uiLayoutRow(col, 0); + row = uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "cloud_type", UI_ITEM_R_EXPAND, NULL, ICON_NONE); - row= uiLayoutRow(col, 0); + row = uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, ICON_NONE); - uiItemR(col, &tex_ptr, "noise_depth", UI_ITEM_R_EXPAND, "Depth", ICON_NONE); + uiItemR(col, &tex_ptr, "noise_depth", UI_ITEM_R_EXPAND, IFACE_("Depth"), ICON_NONE); break; case TEX_DISTNOISE: @@ -2691,47 +2777,47 @@ static void node_texture_buts_output(uiLayout *layout, bContext *UNUSED(C), Poin /* only once called */ static void node_texture_set_butfunc(bNodeType *ntype) { - if ( ntype->type >= TEX_NODE_PROC && ntype->type < TEX_NODE_PROC_MAX ) { + if (ntype->type >= TEX_NODE_PROC && ntype->type < TEX_NODE_PROC_MAX) { ntype->uifunc = node_texture_buts_proc; } else { switch (ntype->type) { - case TEX_NODE_MATH: - ntype->uifunc = node_buts_math; - break; + case TEX_NODE_MATH: + ntype->uifunc = node_buts_math; + break; - case TEX_NODE_MIX_RGB: - ntype->uifunc = node_buts_mix_rgb; - break; + case TEX_NODE_MIX_RGB: + ntype->uifunc = node_buts_mix_rgb; + break; - case TEX_NODE_VALTORGB: - ntype->uifunc = node_buts_colorramp; - break; + case TEX_NODE_VALTORGB: + ntype->uifunc = node_buts_colorramp; + break; - case TEX_NODE_CURVE_RGB: - ntype->uifunc= node_buts_curvecol; - break; + case TEX_NODE_CURVE_RGB: + ntype->uifunc = node_buts_curvecol; + break; - case TEX_NODE_CURVE_TIME: - ntype->uifunc = node_buts_time; - break; + case TEX_NODE_CURVE_TIME: + ntype->uifunc = node_buts_time; + break; - case TEX_NODE_TEXTURE: - ntype->uifunc = node_buts_texture; - break; + case TEX_NODE_TEXTURE: + ntype->uifunc = node_buts_texture; + break; - case TEX_NODE_BRICKS: - ntype->uifunc = node_texture_buts_bricks; - break; + case TEX_NODE_BRICKS: + ntype->uifunc = node_texture_buts_bricks; + break; - case TEX_NODE_IMAGE: - ntype->uifunc = node_texture_buts_image; - break; + case TEX_NODE_IMAGE: + ntype->uifunc = node_texture_buts_image; + break; - case TEX_NODE_OUTPUT: - ntype->uifunc = node_texture_buts_output; - break; + case TEX_NODE_OUTPUT: + ntype->uifunc = node_texture_buts_output; + break; } } } @@ -2746,13 +2832,15 @@ void ED_init_node_butfuncs(void) int i; /* node type ui functions */ - for (i=0; i < NUM_NTREE_TYPES; ++i) { + for (i = 0; i < NUM_NTREE_TYPES; ++i) { treetype = ntreeGetType(i); if (treetype) { - for (ntype= treetype->node_types.first; ntype; ntype= ntype->next) { + for (ntype = treetype->node_types.first; ntype; ntype = ntype->next) { /* default ui functions */ ntype->drawfunc = node_draw_default; ntype->drawupdatefunc = node_update_default; + ntype->select_area_func = node_select_area_default; + ntype->tweak_area_func = node_tweak_area_default; ntype->uifunc = NULL; ntype->uifuncbut = NULL; ntype->drawinputfunc = node_draw_input_default; @@ -2762,41 +2850,41 @@ void ED_init_node_butfuncs(void) node_common_set_butfunc(ntype); switch (i) { - case NTREE_COMPOSIT: - node_composit_set_butfunc(ntype); - break; - case NTREE_SHADER: - node_shader_set_butfunc(ntype); - break; - case NTREE_TEXTURE: - node_texture_set_butfunc(ntype); - break; + case NTREE_COMPOSIT: + node_composit_set_butfunc(ntype); + break; + case NTREE_SHADER: + node_shader_set_butfunc(ntype); + break; + case NTREE_TEXTURE: + node_texture_set_butfunc(ntype); + break; } } } } /* socket type ui functions */ - for (i=0; i < NUM_SOCKET_TYPES; ++i) { + for (i = 0; i < NUM_SOCKET_TYPES; ++i) { stype = ntreeGetSocketType(i); if (stype) { switch (stype->type) { - case SOCK_FLOAT: - case SOCK_INT: - case SOCK_BOOLEAN: - stype->buttonfunc = node_socket_button_default; - break; - case SOCK_VECTOR: - stype->buttonfunc = node_socket_button_components; - break; - case SOCK_RGBA: - stype->buttonfunc = node_socket_button_color; - break; - case SOCK_SHADER: - stype->buttonfunc = node_socket_button_label; - break; - default: - stype->buttonfunc = NULL; + case SOCK_FLOAT: + case SOCK_INT: + case SOCK_BOOLEAN: + stype->buttonfunc = node_socket_button_default; + break; + case SOCK_VECTOR: + stype->buttonfunc = node_socket_button_components; + break; + case SOCK_RGBA: + stype->buttonfunc = node_socket_button_color; + break; + case SOCK_SHADER: + stype->buttonfunc = node_socket_button_label; + break; + default: + stype->buttonfunc = NULL; } } } @@ -2807,10 +2895,10 @@ void ED_init_node_butfuncs(void) void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode, int color_manage) { - if ((snode->flag & SNODE_BACKDRAW) && snode->treetype==NTREE_COMPOSIT) { - Image *ima= BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node"); + if ((snode->flag & SNODE_BACKDRAW) && snode->treetype == NTREE_COMPOSIT) { + Image *ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node"); void *lock; - ImBuf *ibuf= BKE_image_acquire_ibuf(ima, NULL, &lock); + ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock); if (ibuf) { float x, y; @@ -2820,16 +2908,16 @@ void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode, int color_manage) glPushMatrix(); /* keep this, saves us from a version patch */ - if (snode->zoom==0.0f) snode->zoom= 1.0f; + if (snode->zoom == 0.0f) snode->zoom = 1.0f; /* somehow the offset has to be calculated inverse */ glaDefine2DArea(&ar->winrct); /* ortho at pixel level curarea */ - wmOrtho2(-0.375, ar->winx-0.375, -0.375, ar->winy-0.375); + wmOrtho2(-0.375, ar->winx - 0.375, -0.375, ar->winy - 0.375); - x = (ar->winx-snode->zoom*ibuf->x)/2 + snode->xof; - y = (ar->winy-snode->zoom*ibuf->y)/2 + snode->yof; + x = (ar->winx - snode->zoom * ibuf->x) / 2 + snode->xof; + y = (ar->winy - snode->zoom * ibuf->y) / 2 + snode->yof; if (!ibuf->rect) { if (color_manage) @@ -2901,8 +2989,8 @@ static void draw_nodespace_back_tex(ScrArea *sa, SpaceNode *snode) draw_nodespace_grid(snode); if (snode->flag & SNODE_BACKDRAW) { - Image *ima= BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node"); - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); + Image *ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node"); + ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL); if (ibuf) { int x, y; float zoom = 1.0; @@ -2916,20 +3004,20 @@ static void draw_nodespace_back_tex(ScrArea *sa, SpaceNode *snode) if (ibuf->x > sa->winx || ibuf->y > sa->winy) { float zoomx, zoomy; - zoomx= (float)sa->winx/ibuf->x; - zoomy= (float)sa->winy/ibuf->y; + zoomx = (float)sa->winx / ibuf->x; + zoomy = (float)sa->winy / ibuf->y; zoom = MIN2(zoomx, zoomy); } - x = (sa->winx-zoom*ibuf->x)/2 + snode->xof; - y = (sa->winy-zoom*ibuf->y)/2 + snode->yof; + x = (sa->winx - zoom * ibuf->x) / 2 + snode->xof; + y = (sa->winy - zoom * ibuf->y) / 2 + snode->yof; glPixelZoom(zoom, zoom); glColor4f(1.0, 1.0, 1.0, 1.0); if (ibuf->rect) glaDrawPixelsTex(x, y, ibuf->x, ibuf->y, GL_UNSIGNED_BYTE, ibuf->rect); - else if (ibuf->channels==4) + else if (ibuf->channels == 4) glaDrawPixelsTex(x, y, ibuf->x, ibuf->y, GL_FLOAT, ibuf->rect_float); glPixelZoom(1.0, 1.0); @@ -2947,76 +3035,128 @@ static void draw_nodespace_back_tex(ScrArea *sa, SpaceNode *snode) int node_link_bezier_points(View2D *v2d, SpaceNode *snode, bNodeLink *link, float coord_array[][2], int resol) { float dist, vec[4][2]; - + float deltax, deltay; + int toreroute, fromreroute; /* in v0 and v3 we put begin/end points */ if (link->fromsock) { - vec[0][0]= link->fromsock->locx; - vec[0][1]= link->fromsock->locy; + vec[0][0] = link->fromsock->locx; + vec[0][1] = link->fromsock->locy; + fromreroute = (link->fromnode && link->fromnode->type == NODE_REROUTE); } else { - if (snode==NULL) return 0; - vec[0][0]= snode->mx; - vec[0][1]= snode->my; + if (snode == NULL) return 0; + vec[0][0] = snode->mx; + vec[0][1] = snode->my; + fromreroute = 0; } if (link->tosock) { - vec[3][0]= link->tosock->locx; - vec[3][1]= link->tosock->locy; + vec[3][0] = link->tosock->locx; + vec[3][1] = link->tosock->locy; + toreroute = (link->tonode && link->tonode->type == NODE_REROUTE); } else { - if (snode==NULL) return 0; - vec[3][0]= snode->mx; - vec[3][1]= snode->my; + if (snode == NULL) return 0; + vec[3][0] = snode->mx; + vec[3][1] = snode->my; + toreroute = 0; } - dist= UI_GetThemeValue(TH_NODE_CURVING)*0.10f*ABS(vec[0][0] - vec[3][0]); - + dist = UI_GetThemeValue(TH_NODE_CURVING) * 0.10f * ABS(vec[0][0] - vec[3][0]); + deltax = vec[3][0] - vec[0][0]; + deltay = vec[3][1] - vec[0][1]; /* check direction later, for top sockets */ - vec[1][0]= vec[0][0]+dist; - vec[1][1]= vec[0][1]; - - vec[2][0]= vec[3][0]-dist; - vec[2][1]= vec[3][1]; - - if (v2d && MIN4(vec[0][0], vec[1][0], vec[2][0], vec[3][0]) > v2d->cur.xmax); /* clipped */ - else if (v2d && MAX4(vec[0][0], vec[1][0], vec[2][0], vec[3][0]) < v2d->cur.xmin); /* clipped */ + if (fromreroute) { + if (ABS(deltax)>ABS(deltay)) { + vec[1][1]= vec[0][1]; + vec[1][0]= vec[0][0]+(deltax>0?dist:-dist); + } else { + vec[1][0]= vec[0][0]; + vec[1][1]= vec[0][1]+(deltay>0?dist:-dist); + } + } else { + vec[1][0] = vec[0][0] + dist; + vec[1][1] = vec[0][1]; + } + if (toreroute) { + if (ABS(deltax)>ABS(deltay)) { + vec[2][1]= vec[3][1]; + vec[2][0]= vec[3][0]+ (deltax>0?-dist:dist); + } else { + vec[2][0]= vec[3][0]; + vec[2][1]= vec[3][1]+(deltay>0?-dist:dist); + } + + } else { + vec[2][0] = vec[3][0] - dist; + vec[2][1] = vec[3][1]; + } + if (v2d && MIN4(vec[0][0], vec[1][0], vec[2][0], vec[3][0]) > v2d->cur.xmax) ; /* clipped */ + else if (v2d && MAX4(vec[0][0], vec[1][0], vec[2][0], vec[3][0]) < v2d->cur.xmin) ; /* clipped */ else { /* always do all three, to prevent data hanging around */ - BKE_curve_forward_diff_bezier(vec[0][0], vec[1][0], vec[2][0], vec[3][0], coord_array[0], resol, sizeof(float)*2); - BKE_curve_forward_diff_bezier(vec[0][1], vec[1][1], vec[2][1], vec[3][1], coord_array[0]+1, resol, sizeof(float)*2); + BKE_curve_forward_diff_bezier(vec[0][0], vec[1][0], vec[2][0], vec[3][0], coord_array[0], resol, sizeof(float) * 2); + BKE_curve_forward_diff_bezier(vec[0][1], vec[1][1], vec[2][1], vec[3][1], coord_array[0] + 1, resol, sizeof(float) * 2); return 1; } return 0; } -#define LINK_RESOL 24 -void node_draw_link_bezier(View2D *v2d, SpaceNode *snode, bNodeLink *link, int th_col1, int do_shaded, int th_col2, int do_triple, int th_col3 ) +#define LINK_RESOL 24 +#define LINK_ARROW 12 /* position of arrow on the link, LINK_RESOL/2 */ +#define ARROW_SIZE 7 +void node_draw_link_bezier(View2D *v2d, SpaceNode *snode, bNodeLink *link, int th_col1, int do_shaded, int th_col2, int do_triple, int th_col3) { - float coord_array[LINK_RESOL+1][2]; + float coord_array[LINK_RESOL + 1][2]; if (node_link_bezier_points(v2d, snode, link, coord_array, LINK_RESOL)) { float dist, spline_step = 0.0f; int i; - + int drawarrow; /* store current linewidth */ float linew; + float arrow[2], arrow1[2], arrow2[2]; glGetFloatv(GL_LINE_WIDTH, &linew); /* we can reuse the dist variable here to increment the GL curve eval amount*/ - dist = 1.0f/(float)LINK_RESOL; + dist = 1.0f / (float)LINK_RESOL; glEnable(GL_LINE_SMOOTH); + drawarrow = (link->tonode && (link->tonode->type == NODE_REROUTE)) && (link->fromnode && (link->fromnode->type == NODE_REROUTE)); + if (drawarrow) { + // draw arrow in line segment LINK_ARROW + float dx, dy, len; + dx = coord_array[LINK_ARROW][0]-coord_array[LINK_ARROW-1][0]; + dy = coord_array[LINK_ARROW][1]-coord_array[LINK_ARROW-1][1]; + len = sqrtf(dx*dx+dy*dy); + dx = dx /len*ARROW_SIZE; + dy = dy /len*ARROW_SIZE; + arrow1[0] = coord_array[LINK_ARROW][0]-dx+dy; + arrow1[1] = coord_array[LINK_ARROW][1]-dy-dx; + arrow2[0] = coord_array[LINK_ARROW][0]-dx-dy; + arrow2[1] = coord_array[LINK_ARROW][1]-dy+dx; + arrow[0] = coord_array[LINK_ARROW][0]; + arrow[1] = coord_array[LINK_ARROW][1]; + } if (do_triple) { UI_ThemeColorShadeAlpha(th_col3, -80, -120); glLineWidth(4.0f); glBegin(GL_LINE_STRIP); - for (i=0; i<=LINK_RESOL; i++) { + for (i = 0; i <= LINK_RESOL; i++) { glVertex2fv(coord_array[i]); } glEnd(); + if (drawarrow) { + glBegin(GL_LINE_STRIP); + glVertex2fv(arrow1); + glVertex2fv(arrow); + glVertex2fv(arrow); + glVertex2fv(arrow2); + glEnd(); + } } /* XXX using GL_LINES for shaded node lines is a workaround @@ -3026,12 +3166,12 @@ void node_draw_link_bezier(View2D *v2d, SpaceNode *snode, bNodeLink *link, int t glLineWidth(1.5f); if (do_shaded) { glBegin(GL_LINES); - for (i=0; i<LINK_RESOL; i++) { + for (i = 0; i < LINK_RESOL; i++) { UI_ThemeColorBlend(th_col1, th_col2, spline_step); glVertex2fv(coord_array[i]); - UI_ThemeColorBlend(th_col1, th_col2, spline_step+dist); - glVertex2fv(coord_array[i+1]); + UI_ThemeColorBlend(th_col1, th_col2, spline_step + dist); + glVertex2fv(coord_array[i + 1]); spline_step += dist; } @@ -3040,12 +3180,21 @@ void node_draw_link_bezier(View2D *v2d, SpaceNode *snode, bNodeLink *link, int t else { UI_ThemeColor(th_col1); glBegin(GL_LINE_STRIP); - for (i=0; i<=LINK_RESOL; i++) { + for (i = 0; i <= LINK_RESOL; i++) { glVertex2fv(coord_array[i]); } glEnd(); } + if (drawarrow) { + glBegin(GL_LINE_STRIP); + glVertex2fv(arrow1); + glVertex2fv(arrow); + glVertex2fv(arrow); + glVertex2fv(arrow2); + glEnd(); + } + glDisable(GL_LINE_SMOOTH); /* restore previuos linewidth */ @@ -3056,26 +3205,26 @@ void node_draw_link_bezier(View2D *v2d, SpaceNode *snode, bNodeLink *link, int t static void node_link_straight_points(View2D *UNUSED(v2d), SpaceNode *snode, bNodeLink *link, float coord_array[][2]) { if (link->fromsock) { - coord_array[0][0]= link->fromsock->locx; - coord_array[0][1]= link->fromsock->locy; + coord_array[0][0] = link->fromsock->locx; + coord_array[0][1] = link->fromsock->locy; } else { - if (snode==NULL) return; - coord_array[0][0]= snode->mx; - coord_array[0][1]= snode->my; + if (snode == NULL) return; + coord_array[0][0] = snode->mx; + coord_array[0][1] = snode->my; } if (link->tosock) { - coord_array[1][0]= link->tosock->locx; - coord_array[1][1]= link->tosock->locy; + coord_array[1][0] = link->tosock->locx; + coord_array[1][1] = link->tosock->locy; } else { - if (snode==NULL) return; - coord_array[1][0]= snode->mx; - coord_array[1][1]= snode->my; + if (snode == NULL) return; + coord_array[1][0] = snode->mx; + coord_array[1][1] = snode->my; } } -void node_draw_link_straight(View2D *v2d, SpaceNode *snode, bNodeLink *link, int th_col1, int do_shaded, int th_col2, int do_triple, int th_col3 ) +void node_draw_link_straight(View2D *v2d, SpaceNode *snode, bNodeLink *link, int th_col1, int do_shaded, int th_col2, int do_triple, int th_col3) { float coord_array[2][2]; float linew; @@ -3107,22 +3256,22 @@ void node_draw_link_straight(View2D *v2d, SpaceNode *snode, bNodeLink *link, int */ if (do_shaded) { glBegin(GL_LINES); - for (i=0; i < LINK_RESOL-1; ++i) { - float t= (float)i/(float)(LINK_RESOL-1); + for (i = 0; i < LINK_RESOL - 1; ++i) { + float t = (float)i / (float)(LINK_RESOL - 1); UI_ThemeColorBlend(th_col1, th_col2, t); - glVertex2f((1.0f-t)*coord_array[0][0]+t*coord_array[1][0], (1.0f-t)*coord_array[0][1]+t*coord_array[1][1]); + glVertex2f((1.0f - t) * coord_array[0][0] + t * coord_array[1][0], (1.0f - t) * coord_array[0][1] + t * coord_array[1][1]); - t= (float)(i+1)/(float)(LINK_RESOL-1); + t = (float)(i + 1) / (float)(LINK_RESOL - 1); UI_ThemeColorBlend(th_col1, th_col2, t); - glVertex2f((1.0f-t)*coord_array[0][0]+t*coord_array[1][0], (1.0f-t)*coord_array[0][1]+t*coord_array[1][1]); + glVertex2f((1.0f - t) * coord_array[0][0] + t * coord_array[1][0], (1.0f - t) * coord_array[0][1] + t * coord_array[1][1]); } glEnd(); } else { glBegin(GL_LINE_STRIP); - for (i=0; i < LINK_RESOL; ++i) { - float t= (float)i/(float)(LINK_RESOL-1); - glVertex2f((1.0f-t)*coord_array[0][0]+t*coord_array[1][0], (1.0f-t)*coord_array[0][1]+t*coord_array[1][1]); + for (i = 0; i < LINK_RESOL; ++i) { + float t = (float)i / (float)(LINK_RESOL - 1); + glVertex2f((1.0f - t) * coord_array[0][0] + t * coord_array[1][0], (1.0f - t) * coord_array[0][1] + t * coord_array[1][1]); } glEnd(); } @@ -3136,10 +3285,10 @@ void node_draw_link_straight(View2D *v2d, SpaceNode *snode, bNodeLink *link, int /* note; this is used for fake links in groups too */ void node_draw_link(View2D *v2d, SpaceNode *snode, bNodeLink *link) { - int do_shaded= FALSE, th_col1= TH_HEADER, th_col2= TH_HEADER; - int do_triple= FALSE, th_col3= TH_WIRE; + int do_shaded = FALSE, th_col1 = TH_HEADER, th_col2 = TH_HEADER; + int do_triple = FALSE, th_col3 = TH_WIRE; - if (link->fromsock==NULL && link->tosock==NULL) + if (link->fromsock == NULL && link->tosock == NULL) return; /* new connection */ @@ -3161,17 +3310,17 @@ void node_draw_link(View2D *v2d, SpaceNode *snode, bNodeLink *link) } else { /* check cyclic */ - if ((link->fromnode->level >= link->tonode->level && link->tonode->level!=0xFFF) && (link->flag & NODE_LINK_VALID)) { + if ((link->fromnode->level >= link->tonode->level && link->tonode->level != 0xFFF) && (link->flag & NODE_LINK_VALID)) { /* special indicated link, on drop-node */ if (link->flag & NODE_LINKFLAG_HILITE) { - th_col1= th_col2= TH_ACTIVE; + th_col1 = th_col2 = TH_ACTIVE; } else { /* regular link */ if (link->fromnode->flag & SELECT) - th_col1= TH_EDGE_SELECT; + th_col1 = TH_EDGE_SELECT; if (link->tonode->flag & SELECT) - th_col2= TH_EDGE_SELECT; + th_col2 = TH_EDGE_SELECT; } do_shaded = TRUE; do_triple = TRUE; diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index 7011d605a7e..c65bbd6e15f 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -46,6 +46,7 @@ #include "BLI_math.h" #include "BLI_blenlib.h" +#include "BLI_rect.h" #include "BLI_threads.h" #include "BLI_utildefines.h" @@ -81,9 +82,8 @@ /* width of socket columns in group display */ #define NODE_GROUP_FRAME 120 - // XXX interface.h -extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select); +extern void ui_dropshadow(rctf *rct, float radius, float aspect, float alpha, int select); /* XXX update functions for node editor are a mess, needs a clear concept */ void ED_node_tree_update(SpaceNode *snode, Scene *scene) @@ -496,6 +496,16 @@ void node_update_default(const bContext *C, bNodeTree *ntree, bNode *node) node_update_basis(C, ntree, node); } +int node_select_area_default(bNode *node, int x, int y) +{ + return BLI_in_rctf(&node->totr, x, y); +} + +int node_tweak_area_default(bNode *node, int x, int y) +{ + return BLI_in_rctf(&node->totr, x, y); +} + int node_get_colorid(bNode *node) { if (node->typeinfo->nclass==NODE_CLASS_INPUT) @@ -585,10 +595,10 @@ static void node_circle_draw(float x, float y, float size, char *col, int highli glLineWidth(1.0f); } -void node_socket_circle_draw(bNodeTree *UNUSED(ntree), bNodeSocket *sock, float size) +void node_socket_circle_draw(bNodeTree *UNUSED(ntree), bNodeSocket *sock, float size, int highlight) { bNodeSocketType *stype = ntreeGetSocketType(sock->type); - node_circle_draw(sock->locx, sock->locy, size, stype->ui_color, (sock->flag & SELECT)); + node_circle_draw(sock->locx, sock->locy, size, stype->ui_color, highlight); } /* ************** Socket callbacks *********** */ @@ -659,13 +669,13 @@ static void node_toggle_button_cb(struct bContext *C, void *node_argv, void *op_ WM_operator_name_call(C, opname, WM_OP_INVOKE_DEFAULT, NULL); } -void node_draw_shadow(SpaceNode *snode, bNode *node, float radius) +void node_draw_shadow(SpaceNode *snode, bNode *node, float radius, float alpha) { rctf *rct = &node->totr; uiSetRoundBox(UI_CNR_ALL); if (node->parent==NULL) - ui_dropshadow(rct, radius, snode->aspect, node->flag & SELECT); + ui_dropshadow(rct, radius, snode->aspect, alpha, node->flag & SELECT); else { const float margin = 3.0f; @@ -702,7 +712,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN } /* shadow */ - node_draw_shadow(snode, node, BASIS_RAD); + node_draw_shadow(snode, node, BASIS_RAD, 1.0f); /* header */ if (color_id==TH_NODE) @@ -819,7 +829,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN if (nodeSocketIsHidden(sock)) continue; - node_socket_circle_draw(ntree, sock, NODE_SOCKSIZE); + node_socket_circle_draw(ntree, sock, NODE_SOCKSIZE, sock->flag & SELECT); node->typeinfo->drawinputfunc(C, node->block, ntree, node, sock, IFACE_(sock->name), sock->locx+NODE_DYS, sock->locy-NODE_DYS, node->width-NODE_DY); @@ -830,7 +840,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN if (nodeSocketIsHidden(sock)) continue; - node_socket_circle_draw(ntree, sock, NODE_SOCKSIZE); + node_socket_circle_draw(ntree, sock, NODE_SOCKSIZE, sock->flag & SELECT); node->typeinfo->drawoutputfunc(C, node->block, ntree, node, sock, IFACE_(sock->name), sock->locx-node->width+NODE_DYS, sock->locy-NODE_DYS, node->width-NODE_DY); @@ -862,7 +872,7 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b char showname[128]; /* 128 is used below */ /* shadow */ - node_draw_shadow(snode, node, hiddenrad); + node_draw_shadow(snode, node, hiddenrad, 1.0f); /* body */ UI_ThemeColor(color_id); @@ -935,16 +945,16 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b dx-= snode->aspect; fdrawline(rct->xmax-dx, centy-4.0f, rct->xmax-dx, centy+4.0f); fdrawline(rct->xmax-dx-3.0f*snode->aspect, centy-4.0f, rct->xmax-dx-3.0f*snode->aspect, centy+4.0f); - + /* sockets */ for (sock= node->inputs.first; sock; sock= sock->next) { if (!nodeSocketIsHidden(sock)) - node_socket_circle_draw(snode->nodetree, sock, socket_size); + node_socket_circle_draw(snode->nodetree, sock, socket_size, sock->flag & SELECT); } for (sock= node->outputs.first; sock; sock= sock->next) { if (!nodeSocketIsHidden(sock)) - node_socket_circle_draw(snode->nodetree, sock, socket_size); + node_socket_circle_draw(snode->nodetree, sock, socket_size, sock->flag & SELECT); } uiEndBlock(C, node->block); @@ -1128,15 +1138,15 @@ void drawnodespace(const bContext *C, ARegion *ar, View2D *v2d) glDisable(GL_BLEND); /* draw grease-pencil ('canvas' strokes) */ - if (/*(snode->flag & SNODE_DISPGP) &&*/ (snode->nodetree)) - draw_gpencil_view2d((bContext*)C, 1); + if (snode->nodetree) + draw_gpencil_view2d(C, 1); /* reset view matrix */ UI_view2d_view_restore(C); /* draw grease-pencil (screen strokes, and also paintbuffer) */ - if (/*(snode->flag & SNODE_DISPGP) && */(snode->nodetree)) - draw_gpencil_view2d((bContext*)C, 0); + if (snode->nodetree) + draw_gpencil_view2d(C, 0); /* scrollers */ scrollers= UI_view2d_scrollers_calc(C, v2d, 10, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY); diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index c4ea8c4025f..81e375f26bc 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -46,11 +46,15 @@ #include "DNA_particle_types.h" #include "DNA_scene_types.h" #include "DNA_world_types.h" +#include "DNA_action_types.h" +#include "DNA_anim_types.h" #include "BLI_math.h" #include "BLI_blenlib.h" #include "BLI_utildefines.h" +#include "BKE_action.h" +#include "BKE_animsys.h" #include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_global.h" @@ -94,6 +98,7 @@ #include "GPU_material.h" #include "node_intern.h" +#include "NOD_socket.h" static EnumPropertyItem socket_in_out_items[] = { { SOCK_IN, "SOCK_IN", 0, "Input", "" }, @@ -1109,6 +1114,155 @@ void NODE_OT_group_socket_move_down(wmOperatorType *ot) /* ******************** Ungroup operator ********************** */ +/* returns 1 if its OK */ +static int node_group_ungroup(bNodeTree *ntree, bNode *gnode) +{ + bNodeLink *link, *linkn; + bNode *node, *nextn; + bNodeTree *ngroup, *wgroup; + ListBase anim_basepaths = {NULL, NULL}; + + ngroup= (bNodeTree *)gnode->id; + if (ngroup==NULL) return 0; + + /* clear new pointers, set in copytree */ + for (node= ntree->nodes.first; node; node= node->next) + node->new_node= NULL; + + /* wgroup is a temporary copy of the NodeTree we're merging in + * - all of wgroup's nodes are transferred across to their new home + * - ngroup (i.e. the source NodeTree) is left unscathed + */ + wgroup= ntreeCopyTree(ngroup); + + /* add the nodes into the ntree */ + for (node= wgroup->nodes.first; node; node= nextn) { + nextn= node->next; + + /* keep track of this node's RNA "base" path (the part of the path identifying the node) + * if the old nodetree has animation data which potentially covers this node + */ + if (wgroup->adt) { + PointerRNA ptr; + char *path; + + RNA_pointer_create(&wgroup->id, &RNA_Node, node, &ptr); + path = RNA_path_from_ID_to_struct(&ptr); + + if (path) + BLI_addtail(&anim_basepaths, BLI_genericNodeN(path)); + } + + /* migrate node */ + BLI_remlink(&wgroup->nodes, node); + BLI_addtail(&ntree->nodes, node); + + node->locx += gnode->locx; + node->locy += gnode->locy; + + node->flag |= NODE_SELECT; + } + + /* restore external links to and from the gnode */ + for (link= ntree->links.first; link; link= link->next) { + if (link->fromnode==gnode) { + if (link->fromsock->groupsock) { + bNodeSocket *gsock= link->fromsock->groupsock; + if (gsock->link) { + if (gsock->link->fromnode) { + /* NB: using the new internal copies here! the groupsock pointer still maps to the old tree */ + link->fromnode = (gsock->link->fromnode ? gsock->link->fromnode->new_node : NULL); + link->fromsock = gsock->link->fromsock->new_sock; + } + else { + /* group output directly maps to group input */ + bNodeSocket *insock= node_group_find_input(gnode, gsock->link->fromsock); + if (insock->link) { + link->fromnode = insock->link->fromnode; + link->fromsock = insock->link->fromsock; + } + } + } + else { + /* copy the default input value from the group socket default to the external socket */ + node_socket_convert_default_value(link->tosock->type, link->tosock->default_value, gsock->type, gsock->default_value); + } + } + } + } + /* remove internal output links, these are not used anymore */ + for (link=wgroup->links.first; link; link= linkn) { + linkn = link->next; + if (!link->tonode) + nodeRemLink(wgroup, link); + } + /* restore links from internal nodes */ + for (link= wgroup->links.first; link; link= link->next) { + /* indicates link to group input */ + if (!link->fromnode) { + /* NB: can't use find_group_node_input here, + * because gnode sockets still point to the old tree! + */ + bNodeSocket *insock; + for (insock= gnode->inputs.first; insock; insock= insock->next) + if (insock->groupsock->new_sock == link->fromsock) + break; + if (insock->link) { + link->fromnode = insock->link->fromnode; + link->fromsock = insock->link->fromsock; + } + else { + /* copy the default input value from the group node socket default to the internal socket */ + node_socket_convert_default_value(link->tosock->type, link->tosock->default_value, insock->type, insock->default_value); + nodeRemLink(wgroup, link); + } + } + } + + /* add internal links to the ntree */ + for (link= wgroup->links.first; link; link= linkn) { + linkn= link->next; + BLI_remlink(&wgroup->links, link); + BLI_addtail(&ntree->links, link); + } + + /* and copy across the animation, + * note that the animation data's action can be NULL here */ + if (wgroup->adt) { + LinkData *ld, *ldn=NULL; + bAction *waction; + + /* firstly, wgroup needs to temporary dummy action that can be destroyed, as it shares copies */ + waction = wgroup->adt->action = BKE_action_copy(wgroup->adt->action); + + /* now perform the moving */ + BKE_animdata_separate_by_basepath(&wgroup->id, &ntree->id, &anim_basepaths); + + /* paths + their wrappers need to be freed */ + for (ld = anim_basepaths.first; ld; ld = ldn) { + ldn = ld->next; + + MEM_freeN(ld->data); + BLI_freelinkN(&anim_basepaths, ld); + } + + /* free temp action too */ + if (waction) { + BKE_libblock_free(&G.main->action, waction); + } + } + + /* delete the group instance. this also removes old input links! */ + nodeFreeNode(ntree, gnode); + + /* free the group tree (takes care of user count) */ + BKE_libblock_free(&G.main->nodetree, wgroup); + + ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS; + + return 1; +} + static int node_group_ungroup_exec(bContext *C, wmOperator *op) { SpaceNode *snode = CTX_wm_space_node(C); @@ -1129,7 +1283,10 @@ static int node_group_ungroup_exec(bContext *C, wmOperator *op) BKE_report(op->reports, RPT_WARNING, "Not a group"); return OPERATOR_CANCELLED; } - else if (!node_group_ungroup(snode->edittree, gnode)) { + else if (node_group_ungroup(snode->nodetree, gnode)) { + ntreeUpdateTree(snode->nodetree); + } + else { BKE_report(op->reports, RPT_WARNING, "Can't ungroup"); return OPERATOR_CANCELLED; } @@ -1155,6 +1312,200 @@ void NODE_OT_group_ungroup(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; } +/* ******************** Separate operator ********************** */ + +/* returns 1 if its OK */ +static int node_group_separate_selected(bNodeTree *ntree, bNode *gnode, int make_copy) +{ + bNodeLink *link, *link_next; + bNode *node, *node_next, *newnode; + bNodeTree *ngroup; + ListBase anim_basepaths = {NULL, NULL}; + + ngroup= (bNodeTree *)gnode->id; + if (ngroup==NULL) return 0; + + /* deselect all nodes in the target tree */ + for (node=ntree->nodes.first; node; node=node->next) + node_deselect(node); + + /* clear new pointers, set in nodeCopyNode */ + for (node= ngroup->nodes.first; node; node= node->next) + node->new_node= NULL; + + /* add selected nodes into the ntree */ + for (node= ngroup->nodes.first; node; node= node_next) { + node_next = node->next; + if (!(node->flag & NODE_SELECT)) + continue; + + if (make_copy) { + /* make a copy */ + newnode = nodeCopyNode(ngroup, node); + } + else { + /* use the existing node */ + newnode = node; + } + + /* keep track of this node's RNA "base" path (the part of the path identifying the node) + * if the old nodetree has animation data which potentially covers this node + */ + if (ngroup->adt) { + PointerRNA ptr; + char *path; + + RNA_pointer_create(&ngroup->id, &RNA_Node, newnode, &ptr); + path = RNA_path_from_ID_to_struct(&ptr); + + if (path) + BLI_addtail(&anim_basepaths, BLI_genericNodeN(path)); + } + + /* ensure valid parent pointers, detach if parent stays inside the group */ + if (newnode->parent && !(newnode->parent->flag & NODE_SELECT)) + nodeDetachNode(newnode); + + /* migrate node */ + BLI_remlink(&ngroup->nodes, newnode); + BLI_addtail(&ntree->nodes, newnode); + + newnode->locx += gnode->locx; + newnode->locy += gnode->locy; + } + + /* add internal links to the ntree */ + for (link= ngroup->links.first; link; link= link_next) { + int fromselect = (link->fromnode && (link->fromnode->flag & NODE_SELECT)); + int toselect = (link->tonode && (link->tonode->flag & NODE_SELECT)); + link_next = link->next; + + if (make_copy) { + /* make a copy of internal links */ + if (fromselect && toselect) + nodeAddLink(ntree, link->fromnode->new_node, link->fromsock->new_sock, link->tonode->new_node, link->tosock->new_sock); + } + else { + /* move valid links over, delete broken links */ + if (fromselect && toselect) { + BLI_remlink(&ngroup->links, link); + BLI_addtail(&ntree->links, link); + } + else if (fromselect || toselect) { + nodeRemLink(ngroup, link); + } + } + } + + /* and copy across the animation, + * note that the animation data's action can be NULL here */ + if (ngroup->adt) { + LinkData *ld, *ldn=NULL; + + /* now perform the moving */ + BKE_animdata_separate_by_basepath(&ngroup->id, &ntree->id, &anim_basepaths); + + /* paths + their wrappers need to be freed */ + for (ld = anim_basepaths.first; ld; ld = ldn) { + ldn = ld->next; + + MEM_freeN(ld->data); + BLI_freelinkN(&anim_basepaths, ld); + } + } + + ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS; + if (!make_copy) + ngroup->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS; + + return 1; +} + +typedef enum eNodeGroupSeparateType { + NODE_GS_COPY, + NODE_GS_MOVE +} eNodeGroupSeparateType; + +/* Operator Property */ +EnumPropertyItem node_group_separate_types[] = { + {NODE_GS_COPY, "COPY", 0, "Copy", "Copy to parent node tree, keep group intact"}, + {NODE_GS_MOVE, "MOVE", 0, "Move", "Move to parent node tree, remove from group"}, + {0, NULL, 0, NULL, NULL} +}; + +static int node_group_separate_exec(bContext *C, wmOperator *op) +{ + SpaceNode *snode = CTX_wm_space_node(C); + bNode *gnode; + int type = RNA_enum_get(op->ptr, "type"); + + ED_preview_kill_jobs(C); + + /* are we inside of a group? */ + gnode= node_tree_get_editgroup(snode->nodetree); + if (!gnode) { + BKE_report(op->reports, RPT_WARNING, "Not inside node group"); + return OPERATOR_CANCELLED; + } + + switch (type) { + case NODE_GS_COPY: + if (!node_group_separate_selected(snode->nodetree, gnode, 1)) { + BKE_report(op->reports, RPT_WARNING, "Can't separate nodes"); + return OPERATOR_CANCELLED; + } + break; + case NODE_GS_MOVE: + if (!node_group_separate_selected(snode->nodetree, gnode, 0)) { + BKE_report(op->reports, RPT_WARNING, "Can't separate nodes"); + return OPERATOR_CANCELLED; + } + break; + } + + /* switch to parent tree */ + snode_make_group_editable(snode, NULL); + + ntreeUpdateTree(snode->nodetree); + + snode_notify(C, snode); + snode_dag_update(C, snode); + + return OPERATOR_FINISHED; +} + +static int node_group_separate_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *UNUSED(event)) +{ + uiPopupMenu *pup = uiPupMenuBegin(C, "Separate", ICON_NONE); + uiLayout *layout = uiPupMenuLayout(pup); + + uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT); + uiItemEnumO(layout, "NODE_OT_group_separate", NULL, 0, "type", NODE_GS_COPY); + uiItemEnumO(layout, "NODE_OT_group_separate", NULL, 0, "type", NODE_GS_MOVE); + + uiPupMenuEnd(C, pup); + + return OPERATOR_CANCELLED; +} + +void NODE_OT_group_separate(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Separate"; + ot->description = "Separate selected nodes from the node group"; + ot->idname = "NODE_OT_group_separate"; + + /* api callbacks */ + ot->invoke = node_group_separate_invoke; + ot->exec = node_group_separate_exec; + ot->poll = ED_operator_node_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + + RNA_def_enum(ot->srna, "type", node_group_separate_types, NODE_GS_COPY, "Type", ""); +} + /* ************************** Node generic ************** */ /* is rct in visible part of node? */ @@ -1679,7 +2030,7 @@ int node_has_hidden_sockets(bNode *node) } void node_set_hidden_sockets(SpaceNode *snode, bNode *node, int set) -{ +{ bNodeSocket *sock; if (set==0) { @@ -1785,6 +2136,8 @@ static int node_link_viewer(const bContext *C, bNode *tonode) else { link->fromnode= tonode; link->fromsock= sock; + /* make sure the dependency sorting is updated */ + snode->edittree->update |= NTREE_UPDATE_LINKS; } ntreeUpdateTree(snode->edittree); snode_update(snode, node); @@ -2399,6 +2752,7 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) SpaceNode *snode= CTX_wm_space_node(C); ARegion *ar= CTX_wm_region(C); bNodeLinkDrag *nldrag= op->customdata; + bNodeTree *ntree = snode->edittree; bNode *tnode; bNodeSocket *tsock= NULL; bNodeLink *link; @@ -2429,12 +2783,12 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) link->tonode = tnode; link->tosock = tsock; /* add it to the node tree temporarily */ - if (link->prev==NULL && link->next==NULL) - BLI_addtail(&snode->edittree->links, link); + if (BLI_findindex(&ntree->links, link) < 0) + BLI_addtail(&ntree->links, link); - snode->edittree->update |= NTREE_UPDATE_LINKS; + ntree->update |= NTREE_UPDATE_LINKS; } - ntreeUpdateTree(snode->edittree); + ntreeUpdateTree(ntree); } else { int do_update = FALSE; @@ -2442,17 +2796,17 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) link = linkdata->data; if (link->tonode || link->tosock) { - BLI_remlink(&snode->edittree->links, link); + BLI_remlink(&ntree->links, link); link->prev = link->next = NULL; link->tonode= NULL; link->tosock= NULL; - snode->edittree->update |= NTREE_UPDATE_LINKS; + ntree->update |= NTREE_UPDATE_LINKS; do_update = TRUE; } } if (do_update) { - ntreeUpdateTree(snode->edittree); + ntreeUpdateTree(ntree); } } } @@ -2472,12 +2826,12 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) link->fromnode = tnode; link->fromsock = tsock; /* add it to the node tree temporarily */ - if (link->prev==NULL && link->next==NULL) - BLI_addtail(&snode->edittree->links, link); + if (BLI_findindex(&ntree->links, link) < 0) + BLI_addtail(&ntree->links, link); - snode->edittree->update |= NTREE_UPDATE_LINKS; + ntree->update |= NTREE_UPDATE_LINKS; } - ntreeUpdateTree(snode->edittree); + ntreeUpdateTree(ntree); } else { int do_update = FALSE; @@ -2485,17 +2839,17 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) link = linkdata->data; if (link->fromnode || link->fromsock) { - BLI_remlink(&snode->edittree->links, link); + BLI_remlink(&ntree->links, link); link->prev = link->next = NULL; link->fromnode= NULL; link->fromsock= NULL; - snode->edittree->update |= NTREE_UPDATE_LINKS; + ntree->update |= NTREE_UPDATE_LINKS; do_update = TRUE; } } if (do_update) { - ntreeUpdateTree(snode->edittree); + ntreeUpdateTree(ntree); } } } @@ -2528,27 +2882,27 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event) else if (outside_group_rect(snode) && (link->tonode || link->fromnode)) { /* automatically add new group socket */ if (link->tonode && link->tosock) { - link->fromsock = node_group_expose_socket(snode->edittree, link->tosock, SOCK_IN); + link->fromsock = node_group_expose_socket(ntree, link->tosock, SOCK_IN); link->fromnode = NULL; - if (link->prev==NULL && link->next==NULL) - BLI_addtail(&snode->edittree->links, link); + if (BLI_findindex(&ntree->links, link) < 0) + BLI_addtail(&ntree->links, link); - snode->edittree->update |= NTREE_UPDATE_GROUP_IN | NTREE_UPDATE_LINKS; + ntree->update |= NTREE_UPDATE_GROUP_IN | NTREE_UPDATE_LINKS; } else if (link->fromnode && link->fromsock) { - link->tosock = node_group_expose_socket(snode->edittree, link->fromsock, SOCK_OUT); + link->tosock = node_group_expose_socket(ntree, link->fromsock, SOCK_OUT); link->tonode = NULL; - if (link->prev==NULL && link->next==NULL) - BLI_addtail(&snode->edittree->links, link); + if (BLI_findindex(&ntree->links, link) < 0) + BLI_addtail(&ntree->links, link); - snode->edittree->update |= NTREE_UPDATE_GROUP_OUT | NTREE_UPDATE_LINKS; + ntree->update |= NTREE_UPDATE_GROUP_OUT | NTREE_UPDATE_LINKS; } } else - nodeRemLink(snode->edittree, link); + nodeRemLink(ntree, link); } - ntreeUpdateTree(snode->edittree); + ntreeUpdateTree(ntree); snode_notify(C, snode); snode_dag_update(C, snode); @@ -2589,6 +2943,7 @@ static bNodeLinkDrag *node_link_init(SpaceNode *snode, int detach) linkdata = MEM_callocN(sizeof(LinkData), "drag link op link data"); linkdata->data = oplink = MEM_callocN(sizeof(bNodeLink), "drag link op link"); *oplink = *link; + oplink->next = oplink->prev = NULL; BLI_addtail(&nldrag->links, linkdata); nodeRemLink(snode->edittree, link); } @@ -2620,6 +2975,7 @@ static bNodeLinkDrag *node_link_init(SpaceNode *snode, int detach) linkdata = MEM_callocN(sizeof(LinkData), "drag link op link data"); linkdata->data = oplink = MEM_callocN(sizeof(bNodeLink), "drag link op link"); *oplink = *link; + oplink->next = oplink->prev = NULL; BLI_addtail(&nldrag->links, linkdata); nodeRemLink(snode->edittree, link); @@ -2744,14 +3100,110 @@ void NODE_OT_link_make(wmOperatorType *ot) RNA_def_boolean(ot->srna, "replace", 0, "Replace", "Replace socket connections with the new links"); } -/* ********************** Cut Link operator ***************** */ - +/* ********************** Add reroute operator ***************** */ #define LINK_RESOL 12 +static int add_reroute_intersect_check(bNodeLink *link, float mcoords[][2], int tot, float result[2]) +{ + float coord_array[LINK_RESOL+1][2]; + int i, b; + + if (node_link_bezier_points(NULL, NULL, link, coord_array, LINK_RESOL)) { + + for (i=0; i<tot-1; i++) + for (b=0; b<LINK_RESOL; b++) + if (isect_line_line_v2(mcoords[i], mcoords[i+1], coord_array[b], coord_array[b+1]) > 0) { + result[0] = (mcoords[i][0]+mcoords[i+1][0])/2.0f; + result[1] = (mcoords[i][1]+mcoords[i+1][1])/2.0f; + return 1; + } + } + return 0; +} + +static int add_reroute_exec(bContext *C, wmOperator *op) +{ + SpaceNode *snode= CTX_wm_space_node(C); + ARegion *ar= CTX_wm_region(C); + float mcoords[256][2]; + int i= 0; + + RNA_BEGIN(op->ptr, itemptr, "path") { + float loc[2]; + + RNA_float_get_array(&itemptr, "loc", loc); + UI_view2d_region_to_view(&ar->v2d, (short)loc[0], (short)loc[1], + &mcoords[i][0], &mcoords[i][1]); + i++; + if (i>= 256) break; + } + RNA_END; + + if (i>1) { + bNodeLink *link; + float insertPoint[2]; + + ED_preview_kill_jobs(C); + + for (link= snode->edittree->links.first; link; link=link->next) { + if (add_reroute_intersect_check(link, mcoords, i, insertPoint)) { + bNodeTemplate ntemp; + bNode *rerouteNode; + + node_deselect_all(snode); + + ntemp.type = NODE_REROUTE; + rerouteNode = nodeAddNode(snode->edittree, &ntemp); + rerouteNode->locx = insertPoint[0]; + rerouteNode->locy = insertPoint[1]; + + nodeAddLink(snode->edittree, link->fromnode, link->fromsock, rerouteNode, rerouteNode->inputs.first); + link->fromnode = rerouteNode; + link->fromsock = rerouteNode->outputs.first; + + break; // add one reroute at the time. + } + } + + ntreeUpdateTree(snode->edittree); + snode_notify(C, snode); + snode_dag_update(C, snode); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED|OPERATOR_PASS_THROUGH; +} + +void NODE_OT_add_reroute(wmOperatorType *ot) +{ + PropertyRNA *prop; + + ot->name= "Add reroute"; + ot->idname= "NODE_OT_add_reroute"; + + ot->invoke= WM_gesture_lines_invoke; + ot->modal= WM_gesture_lines_modal; + ot->exec= add_reroute_exec; + ot->cancel= WM_gesture_lines_cancel; + + ot->poll= ED_operator_node_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + prop= RNA_def_property(ot->srna, "path", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_runtime(prop, &RNA_OperatorMousePath); + /* internal */ + RNA_def_int(ot->srna, "cursor", BC_CROSSCURSOR, 0, INT_MAX, "Cursor", "", 0, INT_MAX); +} + + +/* ********************** Cut Link operator ***************** */ static int cut_links_intersect(bNodeLink *link, float mcoords[][2], int tot) { float coord_array[LINK_RESOL+1][2]; int i, b; - + if (node_link_bezier_points(NULL, NULL, link, coord_array, LINK_RESOL)) { for (i=0; i<tot-1; i++) @@ -3148,10 +3600,219 @@ void NODE_OT_render_changed(wmOperatorType *ot) /* ****************** Make Group operator ******************* */ +static int node_group_make_test(bNodeTree *ntree, bNode *gnode) +{ + bNode *node; + bNodeLink *link; + int totnode = 0; + + /* is there something to group? also do some clearing */ + for (node= ntree->nodes.first; node; node= node->next) { + if (node == gnode) + continue; + + if (node->flag & NODE_SELECT) { + /* no groups in groups */ + if (node->type==NODE_GROUP) + return 0; + totnode++; + } + + node->done = 0; + } + if (totnode==0) return 0; + + /* check if all connections are OK, no unselected node has both + * inputs and outputs to a selection */ + for (link= ntree->links.first; link; link= link->next) { + if (link->fromnode && link->tonode && link->fromnode->flag & NODE_SELECT && link->fromnode != gnode) + link->tonode->done |= 1; + if (link->fromnode && link->tonode && link->tonode->flag & NODE_SELECT && link->tonode != gnode) + link->fromnode->done |= 2; + } + + for (node= ntree->nodes.first; node; node= node->next) { + if (node == gnode) + continue; + if ((node->flag & NODE_SELECT)==0) + if (node->done==3) + break; + } + if (node) + return 0; + + return 1; +} + +static void node_get_selected_minmax(bNodeTree *ntree, bNode *gnode, float *min, float *max) +{ + bNode *node; + INIT_MINMAX2(min, max); + for (node= ntree->nodes.first; node; node= node->next) { + if (node == gnode) + continue; + if (node->flag & NODE_SELECT) { + DO_MINMAX2((&node->locx), min, max); + } + } +} + +static int node_group_make_insert_selected(bNodeTree *ntree, bNode *gnode) +{ + bNodeTree *ngroup = (bNodeTree *)gnode->id; + bNodeLink *link, *linkn; + bNode *node, *nextn; + bNodeSocket *gsock; + ListBase anim_basepaths = {NULL, NULL}; + float min[2], max[2]; + + /* deselect all nodes in the target tree */ + for (node = ngroup->nodes.first; node; node=node->next) + node_deselect(node); + + node_get_selected_minmax(ntree, gnode, min, max); + + /* move nodes over */ + for (node= ntree->nodes.first; node; node= nextn) { + nextn= node->next; + if (node == gnode) + continue; + if (node->flag & NODE_SELECT) { + /* keep track of this node's RNA "base" path (the part of the pat identifying the node) + * if the old nodetree has animation data which potentially covers this node + */ + if (ntree->adt) { + PointerRNA ptr; + char *path; + + RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr); + path = RNA_path_from_ID_to_struct(&ptr); + + if (path) + BLI_addtail(&anim_basepaths, BLI_genericNodeN(path)); + } + + /* ensure valid parent pointers, detach if parent stays outside the group */ + if (node->parent && !(node->parent->flag & NODE_SELECT)) + nodeDetachNode(node); + + /* change node-collection membership */ + BLI_remlink(&ntree->nodes, node); + BLI_addtail(&ngroup->nodes, node); + + node->locx-= 0.5f*(min[0]+max[0]); + node->locy-= 0.5f*(min[1]+max[1]); + } + } + + /* move animation data over */ + if (ntree->adt) { + LinkData *ld, *ldn=NULL; + + BKE_animdata_separate_by_basepath(&ntree->id, &ngroup->id, &anim_basepaths); + + /* paths + their wrappers need to be freed */ + for (ld = anim_basepaths.first; ld; ld = ldn) { + ldn = ld->next; + + MEM_freeN(ld->data); + BLI_freelinkN(&anim_basepaths, ld); + } + } + + /* node groups don't use internal cached data */ + ntreeFreeCache(ngroup); + + /* relink external sockets */ + for (link= ntree->links.first; link; link= linkn) { + int fromselect = (link->fromnode && (link->fromnode->flag & NODE_SELECT) && link->fromnode != gnode); + int toselect = (link->tonode && (link->tonode->flag & NODE_SELECT) && link->tonode != gnode); + linkn= link->next; + + if (gnode && ((fromselect && link->tonode == gnode) || (toselect && link->fromnode == gnode))) { + /* remove all links to/from the gnode. + * this can remove link information, but there's no general way to preserve it. + */ + nodeRemLink(ntree, link); + } + else if (fromselect && toselect) { + BLI_remlink(&ntree->links, link); + BLI_addtail(&ngroup->links, link); + } + else if (toselect) { + gsock = node_group_expose_socket(ngroup, link->tosock, SOCK_IN); + link->tosock->link = nodeAddLink(ngroup, NULL, gsock, link->tonode, link->tosock); + link->tosock = node_group_add_extern_socket(ntree, &gnode->inputs, SOCK_IN, gsock); + link->tonode = gnode; + } + else if (fromselect) { + /* search for existing group node socket */ + for (gsock=ngroup->outputs.first; gsock; gsock=gsock->next) + if (gsock->link && gsock->link->fromsock==link->fromsock) + break; + if (!gsock) { + gsock = node_group_expose_socket(ngroup, link->fromsock, SOCK_OUT); + gsock->link = nodeAddLink(ngroup, link->fromnode, link->fromsock, NULL, gsock); + link->fromsock = node_group_add_extern_socket(ntree, &gnode->outputs, SOCK_OUT, gsock); + } + else + link->fromsock = node_group_find_output(gnode, gsock); + link->fromnode = gnode; + } + } + + /* update of the group tree */ + ngroup->update |= NTREE_UPDATE; + /* update of the tree containing the group instance node */ + ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS; + + return 1; +} + +static bNode *node_group_make_from_selected(bNodeTree *ntree) +{ + bNode *gnode; + bNodeTree *ngroup; + float min[2], max[2]; + bNodeTemplate ntemp; + + node_get_selected_minmax(ntree, NULL, min, max); + + /* new nodetree */ + ngroup= ntreeAddTree("NodeGroup", ntree->type, NODE_GROUP); + + /* make group node */ + ntemp.type = NODE_GROUP; + ntemp.ngroup = ngroup; + gnode= nodeAddNode(ntree, &ntemp); + gnode->locx= 0.5f*(min[0]+max[0]); + gnode->locy= 0.5f*(min[1]+max[1]); + + node_group_make_insert_selected(ntree, gnode); + + /* update of the tree containing the group instance node */ + ntree->update |= NTREE_UPDATE_NODES; + + return gnode; +} + +typedef enum eNodeGroupMakeType { + NODE_GM_NEW, + NODE_GM_INSERT +} eNodeGroupMakeType; + +/* Operator Property */ +EnumPropertyItem node_group_make_types[] = { + {NODE_GM_NEW, "NEW", 0, "New", "Create a new node group from selected nodes"}, + {NODE_GM_INSERT, "INSERT", 0, "Insert", "Insert into active node group"}, + {0, NULL, 0, NULL, NULL} +}; + static int node_group_make_exec(bContext *C, wmOperator *op) { SpaceNode *snode = CTX_wm_space_node(C); bNode *gnode; + int type = RNA_enum_get(op->ptr, "type"); if (snode->edittree!=snode->nodetree) { BKE_report(op->reports, RPT_WARNING, "Can not add a new Group in a Group"); @@ -3171,25 +3832,70 @@ static int node_group_make_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } } - - ED_preview_kill_jobs(C); - gnode= node_group_make_from_selected(snode->nodetree); - if (gnode==NULL) { - BKE_report(op->reports, RPT_WARNING, "Can not make Group"); - return OPERATOR_CANCELLED; + ED_preview_kill_jobs(C); + + switch (type) { + case NODE_GM_NEW: + if (node_group_make_test(snode->nodetree, NULL)) { + gnode = node_group_make_from_selected(snode->nodetree); + } + else { + BKE_report(op->reports, RPT_WARNING, "Can not make Group"); + return OPERATOR_CANCELLED; + } + break; + case NODE_GM_INSERT: + gnode = nodeGetActive(snode->nodetree); + if (!gnode || gnode->type != NODE_GROUP) { + BKE_report(op->reports, RPT_WARNING, "No active Group node"); + return OPERATOR_CANCELLED; + } + if (node_group_make_test(snode->nodetree, gnode)) { + node_group_make_insert_selected(snode->nodetree, gnode); + } + else { + BKE_report(op->reports, RPT_WARNING, "Can not insert into Group"); + return OPERATOR_CANCELLED; + } + break; } - else { + + if (gnode) { nodeSetActive(snode->nodetree, gnode); - ntreeUpdateTree(snode->nodetree); + snode_make_group_editable(snode, gnode); } + if (gnode) + ntreeUpdateTree((bNodeTree *)gnode->id); + ntreeUpdateTree(snode->nodetree); + snode_notify(C, snode); snode_dag_update(C, snode); return OPERATOR_FINISHED; } +static int node_group_make_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *UNUSED(event)) +{ + SpaceNode *snode = CTX_wm_space_node(C); + bNode *act = nodeGetActive(snode->edittree); + uiPopupMenu *pup = uiPupMenuBegin(C, "Make Group", ICON_NONE); + uiLayout *layout = uiPupMenuLayout(pup); + + uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT); + uiItemEnumO(layout, "NODE_OT_group_make", NULL, 0, "type", NODE_GM_NEW); + + /* if active node is a group, add insert option */ + if (act && act->type == NODE_GROUP) { + uiItemEnumO(layout, "NODE_OT_group_make", NULL, 0, "type", NODE_GM_INSERT); + } + + uiPupMenuEnd(C, pup); + + return OPERATOR_CANCELLED; +} + void NODE_OT_group_make(wmOperatorType *ot) { /* identifiers */ @@ -3198,11 +3904,14 @@ void NODE_OT_group_make(wmOperatorType *ot) ot->idname = "NODE_OT_group_make"; /* api callbacks */ + ot->invoke = node_group_make_invoke; ot->exec = node_group_make_exec; ot->poll = ED_operator_node_active; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + + RNA_def_enum(ot->srna, "type", node_group_make_types, NODE_GM_NEW, "Type", ""); } /* ****************** Hide operator *********************** */ @@ -4055,7 +4764,7 @@ void NODE_OT_join(wmOperatorType *ot) { /* identifiers */ ot->name = "Join Nodes"; - ot->description = "Attaches selected nodes to a new common frame"; + ot->description = "Attach selected nodes to a new common frame"; ot->idname = "NODE_OT_join"; /* api callbacks */ @@ -4125,7 +4834,7 @@ void NODE_OT_attach(wmOperatorType *ot) { /* identifiers */ ot->name = "Attach Nodes"; - ot->description = "Attaches active node to a frame"; + ot->description = "Attach active node to a frame"; ot->idname = "NODE_OT_attach"; /* api callbacks */ @@ -4194,7 +4903,7 @@ void NODE_OT_detach(wmOperatorType *ot) { /* identifiers */ ot->name = "Detach Nodes"; - ot->description = "Detaches selected nodes from parents"; + ot->description = "Detach selected nodes from parents"; ot->idname = "NODE_OT_detach"; /* api callbacks */ diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c index bb52c1570aa..0d03df2298f 100644 --- a/source/blender/editors/space_node/node_header.c +++ b/source/blender/editors/space_node/node_header.c @@ -157,22 +157,6 @@ static void do_node_add_group(bContext *C, void *UNUSED(arg), int event) do_node_add(C, &ntemp); } -#if 0 /* disabled */ -static void do_node_add_dynamic(bContext *C, void *UNUSED(arg), int event) -{ - Main *bmain = CTX_data_main(C); - Scene *scene = CTX_data_scene(C); - bNodeTemplate ntemp; - - ntemp.type = NODE_DYNAMIC; - - ntemp.main = bmain; - ntemp.scene = scene; - - do_node_add(C, &ntemp); -} -#endif - static int node_tree_has_type(int treetype, int nodetype) { bNodeTreeType *ttype= ntreeGetType(treetype); @@ -228,9 +212,6 @@ static void node_add_menu(bContext *C, uiLayout *layout, void *arg_nodeclass) } } } - else if (nodeclass==NODE_DYNAMIC) { - /* disabled */ - } else { bNodeType *ntype; diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h index 60177192e2a..d9dbd646fa5 100644 --- a/source/blender/editors/space_node/node_intern.h +++ b/source/blender/editors/space_node/node_intern.h @@ -50,8 +50,7 @@ struct bNodeLink; struct Main; /* temp data to pass on to modal */ -typedef struct bNodeLinkDrag -{ +typedef struct bNodeLinkDrag { struct bNodeLinkDrag *next, *prev; /* List of links dragged by the operator. @@ -70,11 +69,13 @@ void node_menus_register(void); /* node_draw.c */ int node_get_colorid(struct bNode *node); -void node_socket_circle_draw(struct bNodeTree *ntree, struct bNodeSocket *sock, float size); +void node_socket_circle_draw(struct bNodeTree *ntree, struct bNodeSocket *sock, float size, int highlight); int node_get_resize_cursor(int directions); -void node_draw_shadow(struct SpaceNode *snode, struct bNode *node, float radius); +void node_draw_shadow(struct SpaceNode *snode, struct bNode *node, float radius, float alpha); void node_draw_default(const struct bContext *C, struct ARegion *ar, struct SpaceNode *snode, struct bNodeTree *ntree, struct bNode *node); void node_update_default(const struct bContext *C, struct bNodeTree *ntree, struct bNode *node); +int node_select_area_default(struct bNode *node, int x, int y); +int node_tweak_area_default(struct bNode *node, int x, int y); void node_update_nodetree(const struct bContext *C, struct bNodeTree *ntree, float offsetx, float offsety); void node_draw_nodetree(const struct bContext *C, struct ARegion *ar, struct SpaceNode *snode, struct bNodeTree *ntree); void drawnodespace(const bContext *C, ARegion *ar, View2D *v2d); @@ -144,9 +145,11 @@ void NODE_OT_link(struct wmOperatorType *ot); void NODE_OT_link_make(struct wmOperatorType *ot); void NODE_OT_links_cut(struct wmOperatorType *ot); void NODE_OT_links_detach(struct wmOperatorType *ot); +void NODE_OT_add_reroute(struct wmOperatorType *ot); void NODE_OT_group_make(struct wmOperatorType *ot); void NODE_OT_group_ungroup(struct wmOperatorType *ot); +void NODE_OT_group_separate(struct wmOperatorType *ot); void NODE_OT_group_edit(struct wmOperatorType *ot); void NODE_OT_group_socket_add(struct wmOperatorType *ot); void NODE_OT_group_socket_remove(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c index 781a14fca59..ff1661f0327 100644 --- a/source/blender/editors/space_node/node_ops.c +++ b/source/blender/editors/space_node/node_ops.c @@ -79,9 +79,11 @@ void node_operatortypes(void) WM_operatortype_append(NODE_OT_link_make); WM_operatortype_append(NODE_OT_links_cut); WM_operatortype_append(NODE_OT_links_detach); + WM_operatortype_append(NODE_OT_add_reroute); WM_operatortype_append(NODE_OT_group_make); WM_operatortype_append(NODE_OT_group_ungroup); + WM_operatortype_append(NODE_OT_group_separate); WM_operatortype_append(NODE_OT_group_edit); WM_operatortype_append(NODE_OT_group_socket_add); WM_operatortype_append(NODE_OT_group_socket_remove); @@ -218,6 +220,7 @@ void node_keymap(struct wmKeyConfig *keyconf) RNA_boolean_set(kmi->ptr, "detach", TRUE); WM_keymap_add_item(keymap, "NODE_OT_resize", LEFTMOUSE, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "NODE_OT_add_reroute", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "NODE_OT_links_cut", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "NODE_OT_select_link_viewer", LEFTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0); @@ -267,6 +270,7 @@ void node_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "NODE_OT_group_make", GKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "NODE_OT_group_ungroup", GKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_add_item(keymap, "NODE_OT_group_separate", PKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NODE_OT_group_edit", TABKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NODE_OT_read_renderlayers", RKEY, KM_PRESS, KM_CTRL, 0); diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index 9098c8a4255..e7be750928d 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -38,6 +38,7 @@ #include "BKE_context.h" #include "BKE_main.h" +#include "BKE_node.h" #include "BLI_rect.h" #include "BLI_utildefines.h" @@ -58,14 +59,28 @@ /* ****** helpers ****** */ -static bNode *node_under_mouse(bNodeTree *ntree, int mx, int my) +static bNode *node_under_mouse_select(bNodeTree *ntree, int mx, int my) { bNode *node; for (node=ntree->nodes.last; node; node=node->prev) { - /* node body (header and scale are in other operators) */ - if (BLI_in_rctf(&node->totr, mx, my)) - return node; + if (node->typeinfo->select_area_func) { + if (node->typeinfo->select_area_func(node, mx, my)) + return node; + } + } + return NULL; +} + +static bNode *node_under_mouse_tweak(bNodeTree *ntree, int mx, int my) +{ + bNode *node; + + for (node=ntree->nodes.last; node; node=node->prev) { + if (node->typeinfo->tweak_area_func) { + if (node->typeinfo->tweak_area_func(node, mx, my)) + return node; + } } return NULL; } @@ -350,7 +365,7 @@ static int node_mouse_select(Main *bmain, SpaceNode *snode, ARegion *ar, const i } else { /* find the closest visible node */ - node = node_under_mouse(snode->edittree, mx, my); + node = node_under_mouse_select(snode->edittree, mx, my); if (node) { node_toggle(node); @@ -363,7 +378,7 @@ static int node_mouse_select(Main *bmain, SpaceNode *snode, ARegion *ar, const i else { /* extend==0 */ /* find the closest visible node */ - node = node_under_mouse(snode->edittree, mx, my); + node = node_under_mouse_select(snode->edittree, mx, my); if (node) { for (tnode=snode->edittree->nodes.first; tnode; tnode=tnode->next) @@ -490,7 +505,7 @@ static int node_border_select_invoke(bContext *C, wmOperator *op, wmEvent *event UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &mx, &my); - if (node_under_mouse(snode->edittree, mx, my)) + if (node_under_mouse_tweak(snode->edittree, mx, my)) return OPERATOR_CANCELLED|OPERATOR_PASS_THROUGH; } diff --git a/source/blender/editors/space_node/node_templates.c b/source/blender/editors/space_node/node_templates.c index ee3827428bc..97e64c4acdf 100644 --- a/source/blender/editors/space_node/node_templates.c +++ b/source/blender/editors/space_node/node_templates.c @@ -483,7 +483,7 @@ static void ui_template_node_link_menu(bContext *C, uiLayout *layout, void *but_ uiBlockSetCurLayout(block, column); if (sock->link) { - uiItemL(column, "Link", ICON_NONE); + uiItemL(column, IFACE_("Link"), ICON_NONE); but= block->buttons.last; but->flag= UI_TEXT_LEFT; diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 4d5964c72e5..e069ba2a5fc 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -226,11 +226,6 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn) ED_area_tag_refresh(sa); } break; - case NC_TEXT: - /* pynodes */ - if (wmn->data==ND_SHADING) - ED_area_tag_refresh(sa); - break; case NC_SPACE: if (wmn->data==ND_SPACE_NODE) ED_area_tag_refresh(sa); @@ -250,6 +245,13 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn) break; } break; + case NC_MASK: + if (wmn->action == NA_EDITED) { + if (type==NTREE_COMPOSIT) { + ED_area_tag_refresh(sa); + } + } + break; case NC_IMAGE: if (wmn->action == NA_EDITED) { @@ -466,7 +468,7 @@ static void node_region_listener(ARegion *ar, wmNotifier *wmn) } } -const char *node_context_dir[] = {"selected_nodes", NULL}; +const char *node_context_dir[] = {"selected_nodes", "active_node", NULL}; static int node_context(const bContext *C, const char *member, bContextDataResult *result) { @@ -490,16 +492,11 @@ static int node_context(const bContext *C, const char *member, bContextDataResul return 1; } else if (CTX_data_equals(member, "active_node")) { - bNode *node; - if (snode->edittree) { - for (node=snode->edittree->nodes.last; node; node=node->prev) { - if (node->flag & NODE_ACTIVE) { - CTX_data_pointer_set(result, &snode->edittree->id, &RNA_Node, node); - break; - } - } + bNode *node = nodeGetActive(snode->edittree); + CTX_data_pointer_set(result, &snode->edittree->id, &RNA_Node, node); } + CTX_data_type_set(result, CTX_DATA_TYPE_POINTER); return 1; } diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c index fddd7af93f1..f0ecaf3ab2c 100644 --- a/source/blender/editors/space_outliner/outliner_draw.c +++ b/source/blender/editors/space_outliner/outliner_draw.c @@ -69,6 +69,9 @@ #include "outliner_intern.h" +/* disable - this is far too slow - campbell */ +// #define USE_GROUP_SELECT + /* ****************************************************** */ /* Tree Size Functions */ @@ -207,6 +210,7 @@ static int group_restrict_flag(Group *gr, int flag) return 1; } +#ifdef USE_GROUP_SELECT static int group_select_flag(Group *gr) { GroupObject *gob; @@ -217,6 +221,7 @@ static int group_select_flag(Group *gr) return 0; } +#endif void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag) { @@ -300,7 +305,8 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) BLI_strncpy(expanded, lib->name, sizeof(expanded)); BLI_path_abs(expanded, G.main->name); if (!BLI_exists(expanded)) { - BKE_reportf(CTX_wm_reports(C), RPT_ERROR, "Library path '%s' does not exist, correct this before saving", expanded); + BKE_reportf(CTX_wm_reports(C), RPT_ERROR, + "Library path '%s' does not exist, correct this before saving", expanded); } } } @@ -421,16 +427,26 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar gr = (Group *)tselem->id; uiBlockSetEmboss(block, UI_EMBOSSN); - + +#ifndef USE_GROUP_SELECT + restrict_bool = FALSE; +#endif + +#ifdef USE_GROUP_SELECT restrict_bool = group_restrict_flag(gr, OB_RESTRICT_VIEW); +#endif bt = uiDefIconBut(block, ICONTOG, 0, restrict_bool ? ICON_RESTRICT_VIEW_ON : ICON_RESTRICT_VIEW_OFF, (int)ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX, (int)te->ys, UI_UNIT_X - 1, UI_UNIT_Y - 1, NULL, 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View"); uiButSetFunc(bt, restrictbutton_gr_restrict_view, scene, gr); +#ifdef USE_GROUP_SELECT restrict_bool = group_restrict_flag(gr, OB_RESTRICT_SELECT); +#endif bt = uiDefIconBut(block, ICONTOG, 0, restrict_bool ? ICON_RESTRICT_SELECT_ON : ICON_RESTRICT_SELECT_OFF, (int)ar->v2d.cur.xmax - OL_TOG_RESTRICT_SELECTX, (int)te->ys, UI_UNIT_X - 1, UI_UNIT_Y - 1, NULL, 0, 0, 0, 0, "Restrict/Allow selection in the 3D View"); uiButSetFunc(bt, restrictbutton_gr_restrict_select, scene, gr); - + +#ifdef USE_GROUP_SELECT restrict_bool = group_restrict_flag(gr, OB_RESTRICT_RENDER); +#endif bt = uiDefIconBut(block, ICONTOG, 0, restrict_bool ? ICON_RESTRICT_RENDER_ON : ICON_RESTRICT_RENDER_OFF, (int)ar->v2d.cur.xmax - OL_TOG_RESTRICT_RENDERX, (int)te->ys, UI_UNIT_X - 1, UI_UNIT_Y - 1, NULL, 0, 0, 0, 0, "Restrict/Allow renderability"); uiButSetFunc(bt, restrictbutton_gr_restrict_render, scene, gr); @@ -570,7 +586,8 @@ static void operator_call_cb(struct bContext *UNUSED(C), void *arg_kmi, void *ar BLI_strncpy(kmi->idname, ot->idname, OP_MAX_TYPENAME); } -static void operator_search_cb(const struct bContext *UNUSED(C), void *UNUSED(arg_kmi), const char *str, uiSearchItems *items) +static void operator_search_cb(const struct bContext *UNUSED(C), void *UNUSED(arg_kmi), + const char *str, uiSearchItems *items) { GHashIterator *iter = WM_operatortype_iter(); @@ -1038,17 +1055,17 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto case TSE_LINKED_MAT: UI_icon_draw(x, y, ICON_MATERIAL_DATA); break; case TSE_POSEGRP_BASE: - UI_icon_draw(x, y, ICON_VERTEXSEL); break; + UI_icon_draw(x, y, ICON_GROUP_BONE); break; case TSE_SEQUENCE: - if (te->idcode == SEQ_MOVIE) + if (te->idcode == SEQ_TYPE_MOVIE) UI_icon_draw(x, y, ICON_SEQUENCE); - else if (te->idcode == SEQ_META) + else if (te->idcode == SEQ_TYPE_META) UI_icon_draw(x, y, ICON_DOT); - else if (te->idcode == SEQ_SCENE) + else if (te->idcode == SEQ_TYPE_SCENE) UI_icon_draw(x, y, ICON_SCENE); - else if (te->idcode == SEQ_SOUND) + else if (te->idcode == SEQ_TYPE_SOUND_RAM) UI_icon_draw(x, y, ICON_SOUND); - else if (te->idcode == SEQ_IMAGE) + else if (te->idcode == SEQ_TYPE_IMAGE) UI_icon_draw(x, y, ICON_IMAGE_COL); else UI_icon_draw(x, y, ICON_PARTICLES); @@ -1192,7 +1209,11 @@ static void outliner_draw_iconrow(bContext *C, uiBlock *block, Scene *scene, Spa uiSetRoundBox(UI_CNR_ALL); glColor4ub(255, 255, 255, 100); - uiRoundBox((float) *offsx - 0.5f * ufac, (float)ys - 1.0f * ufac, (float)*offsx + UI_UNIT_Y - 3.0f * ufac, (float)ys + UI_UNIT_Y - 3.0f * ufac, UI_UNIT_Y / 2.0f - 2.0f * ufac); + uiRoundBox((float) *offsx - 0.5f * ufac, + (float)ys - 1.0f * ufac, + (float)*offsx + UI_UNIT_Y - 3.0f * ufac, + (float)ys + UI_UNIT_Y - 3.0f * ufac, + (float)UI_UNIT_Y / 2.0f - 2.0f * ufac); glEnable(GL_BLEND); /* roundbox disables */ } @@ -1268,8 +1289,8 @@ static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene *scene } } else if (te->idcode == ID_GR) { +#ifdef USE_GROUP_SELECT Group *gr = (Group *)tselem->id; - if (group_select_flag(gr)) { char col[4]; UI_GetThemeColorType4ubv(TH_SELECT, SPACE_VIEW3D, col); @@ -1278,6 +1299,7 @@ static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene *scene active = 2; } +#endif } else if (te->idcode == ID_OB) { Object *ob = (Object *)tselem->id; @@ -1324,7 +1346,11 @@ static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene *scene /* active circle */ if (active) { uiSetRoundBox(UI_CNR_ALL); - uiRoundBox((float)startx + UI_UNIT_Y - 1.5f * ufac, (float)*starty + 2.0f * ufac, (float)startx + 2.0f * UI_UNIT_Y - 4.0f * ufac, (float)*starty + UI_UNIT_Y - 1.0f * ufac, UI_UNIT_Y / 2.0f - 2.0f * ufac); + uiRoundBox((float)startx + UI_UNIT_Y - 1.5f * ufac, + (float)*starty + 2.0f * ufac, + (float)startx + 2.0f * UI_UNIT_Y - 4.0f * ufac, + (float)*starty + UI_UNIT_Y - 1.0f * ufac, + UI_UNIT_Y / 2.0f - 2.0f * ufac); glEnable(GL_BLEND); /* roundbox disables it */ te->flag |= TE_ACTIVE; // for lookup in display hierarchies @@ -1549,7 +1575,10 @@ static void outliner_draw_restrictcols(ARegion *ar) /* background underneath */ UI_ThemeColor(TH_BACK); - glRecti((int)ar->v2d.cur.xmax - OL_TOGW, (int)ar->v2d.cur.ymin - V2D_SCROLL_HEIGHT - 1, (int)ar->v2d.cur.xmax + V2D_SCROLL_WIDTH, (int)ar->v2d.cur.ymax); + glRecti((int)ar->v2d.cur.xmax - OL_TOGW, + (int)ar->v2d.cur.ymin - V2D_SCROLL_HEIGHT - 1, + (int)ar->v2d.cur.xmax + V2D_SCROLL_WIDTH, + (int)ar->v2d.cur.ymax); UI_ThemeColorShade(TH_BACK, 6); ystart = (int)ar->v2d.tot.ymax; diff --git a/source/blender/editors/space_outliner/outliner_edit.c b/source/blender/editors/space_outliner/outliner_edit.c index 04e9cbf24c2..eb740e441b7 100644 --- a/source/blender/editors/space_outliner/outliner_edit.c +++ b/source/blender/editors/space_outliner/outliner_edit.c @@ -35,6 +35,7 @@ #include "DNA_group_types.h" #include "DNA_scene_types.h" #include "DNA_object_types.h" +#include "DNA_material_types.h" #include "BLI_blenlib.h" #include "BLI_utildefines.h" @@ -48,6 +49,7 @@ #include "BKE_main.h" #include "BKE_report.h" #include "BKE_scene.h" +#include "BKE_material.h" #include "ED_object.h" #include "ED_screen.h" @@ -205,7 +207,8 @@ static void do_item_rename(ARegion *ar, TreeElement *te, TreeStoreElem *tselem, } } -void item_rename_cb(bContext *C, Scene *UNUSED(scene), TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +void item_rename_cb(bContext *C, Scene *UNUSED(scene), TreeElement *te, + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { ARegion *ar = CTX_wm_region(C); ReportList *reports = CTX_wm_reports(C); // XXX @@ -340,7 +343,8 @@ int common_restrict_check(bContext *C, Object *ob) /* Toggle Visibility ---------------------------------------- */ -void object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +void object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { Base *base = (Base *)te->directdata; Object *ob = (Object *)tselem->id; @@ -355,7 +359,8 @@ void object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, Tre } } -void group_toggle_visibility_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +void group_toggle_visibility_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { Group *group = (Group *)tselem->id; restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_VIEW); @@ -391,7 +396,8 @@ void OUTLINER_OT_visibility_toggle(wmOperatorType *ot) /* Toggle Selectability ---------------------------------------- */ -void object_toggle_selectability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +void object_toggle_selectability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { Base *base = (Base *)te->directdata; @@ -401,7 +407,8 @@ void object_toggle_selectability_cb(bContext *UNUSED(C), Scene *scene, TreeEleme } } -void group_toggle_selectability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +void group_toggle_selectability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { Group *group = (Group *)tselem->id; restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_SELECT); @@ -437,7 +444,8 @@ void OUTLINER_OT_selectability_toggle(wmOperatorType *ot) /* Toggle Renderability ---------------------------------------- */ -void object_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +void object_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { Base *base = (Base *)te->directdata; @@ -447,7 +455,8 @@ void object_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, TreeEleme } } -void group_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +void group_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { Group *group = (Group *)tselem->id; restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_RENDER); @@ -674,7 +683,8 @@ static void outliner_set_coordinates(ARegion *ar, SpaceOops *soops) } /* find next element that has this name */ -static TreeElement *outliner_find_name(SpaceOops *soops, ListBase *lb, char *name, int flags, TreeElement *prev, int *prevFound) +static TreeElement *outliner_find_name(SpaceOops *soops, ListBase *lb, char *name, int flags, + TreeElement *prev, int *prevFound) { TreeElement *te, *tes; @@ -961,7 +971,8 @@ static void tree_element_to_path(SpaceOops *soops, TreeElement *te, TreeStoreEle BLI_addhead(&hierarchy, ld); } - /* step 2: step down hierarchy building the path (NOTE: addhead in previous loop was needed so that we can loop like this) */ + /* step 2: step down hierarchy building the path + * (NOTE: addhead in previous loop was needed so that we can loop like this) */ for (ld = hierarchy.first; ld; ld = ld->next) { /* get data */ tem = (TreeElement *)ld->data; @@ -972,7 +983,7 @@ static void tree_element_to_path(SpaceOops *soops, TreeElement *te, TreeStoreEle /* check if we're looking for first ID, or appending to path */ if (*id) { /* just 'append' property to path - * - to prevent memory leaks, we must write to newpath not path, then free old path + swap them + * - to prevent memory leaks, we must write to newpath not path, then free old path + swap them */ if (tse->type == TSE_RNA_PROPERTY) { if (RNA_property_type(prop) == PROP_POINTER) { @@ -1019,7 +1030,8 @@ static void tree_element_to_path(SpaceOops *soops, TreeElement *te, TreeStoreEle else { /* no ID, so check if entry is RNA-struct, and if that RNA-struct is an ID datablock to extract info from */ if (tse->type == TSE_RNA_STRUCT) { - /* ptr->data not ptr->id.data seems to be the one we want, since ptr->data is sometimes the owner of this ID? */ + /* ptr->data not ptr->id.data seems to be the one we want, + * since ptr->data is sometimes the owner of this ID? */ if (RNA_struct_is_ID(ptr->type)) { *id = (ID *)ptr->data; @@ -1090,7 +1102,9 @@ static void do_outliner_drivers_editop(SpaceOops *soops, ListBase *tree, ReportL short groupmode = KSP_GROUP_KSNAME; /* check if RNA-property described by this selected element is an animatable prop */ - if (ELEM(tselem->type, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM) && RNA_property_animateable(&te->rnaptr, te->directdata)) { + if (ELEM(tselem->type, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM) && + RNA_property_animateable(&te->rnaptr, te->directdata)) + { /* get id + path + index info from the selected element */ tree_element_to_path(soops, te, tselem, &id, &path, &array_index, &flag, &groupmode); @@ -1269,7 +1283,9 @@ static void do_outliner_keyingset_editop(SpaceOops *soops, KeyingSet *ks, ListBa short groupmode = KSP_GROUP_KSNAME; /* check if RNA-property described by this selected element is an animatable prop */ - if (ELEM(tselem->type, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM) && RNA_property_animateable(&te->rnaptr, te->directdata)) { + if (ELEM(tselem->type, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM) && + RNA_property_animateable(&te->rnaptr, te->directdata)) + { /* get id + path + index info from the selected element */ tree_element_to_path(soops, te, tselem, &id, &path, &array_index, &flag, &groupmode); @@ -1282,7 +1298,8 @@ static void do_outliner_keyingset_editop(SpaceOops *soops, KeyingSet *ks, ListBa case KEYINGSET_EDITMODE_ADD: { /* add a new path with the information obtained (only if valid) */ - // TODO: what do we do with group name? for now, we don't supply one, and just let this use the KeyingSet name + /* TODO: what do we do with group name? + * for now, we don't supply one, and just let this use the KeyingSet name */ BKE_keyingset_add_path(ks, id, NULL, path, array_index, flag, groupmode); ks->active_path = BLI_countlist(&ks->paths); } @@ -1426,7 +1443,7 @@ TreeElement *outliner_dropzone_parent(bContext *C, wmEvent *event, TreeElement * /* name and first icon */ if ((fmval[0] > te->xs + UI_UNIT_X) && (fmval[0] < te->xend)) { /* always makes active object */ - if (te->idcode == ID_OB) { + if (te->idcode == ID_OB && tselem->type == 0) { return te; } else { @@ -1453,7 +1470,7 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, wmEvent *event) SpaceOops *soops = CTX_wm_space_outliner(C); ARegion *ar = CTX_wm_region(C); Main *bmain = CTX_data_main(C); - Scene *scene = CTX_data_scene(C); + Scene *scene = NULL; TreeElement *te = NULL; TreeElement *te_found = NULL; char childname[MAX_ID_NAME]; @@ -1485,10 +1502,17 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, wmEvent *event) return OPERATOR_CANCELLED; } - /* check dragged object (child) is active */ - if (ob != CTX_data_active_object(C)) - ED_base_object_select(BKE_scene_base_find(scene, ob), BA_SELECT); - + scene = (Scene *)outliner_search_back(soops, te_found, ID_SCE); + + if (scene == NULL) { + /* currently outlier organized in a way, that if there's no parent scene + * element for object it means that all displayed objects belong to + * active scene and parenting them is allowed (sergey) + */ + + scene = CTX_data_scene(C); + } + if ((par->type != OB_ARMATURE) && (par->type != OB_CURVE) && (par->type != OB_LATTICE)) { if (ED_object_parent_set(op->reports, bmain, scene, ob, par, partype)) { DAG_scene_sort(bmain, scene); @@ -1635,7 +1659,7 @@ int outliner_dropzone_parent_clear(bContext *C, wmEvent *event, TreeElement *te, if ((fmval[0] < (te->xs + UI_UNIT_X)) || (fmval[0] > te->xend)) { return 1; } - else if (te->idcode != ID_OB) { + else if (te->idcode != ID_OB || ELEM(tselem->type, TSE_MODIFIER_BASE, TSE_CONSTRAINT_BASE)) { return 1; } @@ -1654,19 +1678,31 @@ int outliner_dropzone_parent_clear(bContext *C, wmEvent *event, TreeElement *te, static int parent_clear_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { - Scene *scene = CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = NULL; Object *ob = NULL; + SpaceOops *soops = CTX_wm_space_outliner(C); + TreeElement *te; char obname[MAX_ID_NAME]; RNA_string_get(op->ptr, "dragged_obj", obname); ob = (Object *)BKE_libblock_find_name(ID_OB, obname); - /* check dragged object (child) is active */ - if (ob != CTX_data_active_object(C)) - ED_base_object_select(BKE_scene_base_find(scene, ob), BA_SELECT); + /* search forwards to find the object */ + te = outliner_find_id(soops, &soops->tree, (ID *)ob); + /* then search backwards to get the scene */ + scene = (Scene *)outliner_search_back(soops, te, ID_SCE); + + if (scene == NULL) { + return OPERATOR_CANCELLED; + } - ED_object_parent_clear(C, RNA_enum_get(op->ptr, "type")); + ED_object_parent_clear(ob, RNA_enum_get(op->ptr, "type")); + DAG_scene_sort(bmain, scene); + DAG_ids_flush_update(bmain, 0); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL); return OPERATOR_FINISHED; } @@ -1689,3 +1725,161 @@ void OUTLINER_OT_parent_clear(wmOperatorType *ot) RNA_def_string(ot->srna, "dragged_obj", "Object", MAX_ID_NAME, "Child", "Child Object"); RNA_def_enum(ot->srna, "type", prop_clear_parent_types, 0, "Type", ""); } + +TreeElement *outliner_dropzone_scene(bContext *C, wmEvent *UNUSED(event), TreeElement *te, float *fmval) +{ + SpaceOops *soops = CTX_wm_space_outliner(C); + TreeStoreElem *tselem = TREESTORE(te); + + if ((fmval[1] > te->ys) && (fmval[1] < (te->ys + UI_UNIT_Y))) { + /* name and first icon */ + if ((fmval[0] > te->xs + UI_UNIT_X) && (fmval[0] < te->xend)) { + if (te->idcode == ID_SCE && tselem->type == 0) { + return te; + } + } + } + return NULL; +} + +static int scene_drop_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + Scene *scene = NULL; + Object *ob = NULL; + SpaceOops *soops = CTX_wm_space_outliner(C); + ARegion *ar = CTX_wm_region(C); + Main *bmain = CTX_data_main(C); + TreeElement *te = NULL; + TreeElement *te_found = NULL; + char obname[MAX_ID_NAME]; + float fmval[2]; + + UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]); + + /* Find object hovered over */ + for (te = soops->tree.first; te; te = te->next) { + te_found = outliner_dropzone_scene(C, event, te, fmval); + if (te_found) + break; + } + + if (te_found) { + Base *base; + + RNA_string_set(op->ptr, "scene", te_found->name); + scene = (Scene *)BKE_libblock_find_name(ID_SCE, te_found->name); + + RNA_string_get(op->ptr, "object", obname); + ob = (Object *)BKE_libblock_find_name(ID_OB, obname); + + if (ELEM(NULL, ob, scene) || scene->id.lib != NULL) { + return OPERATOR_CANCELLED; + } + + base = ED_object_scene_link(scene, ob); + + if (base == NULL) { + return OPERATOR_CANCELLED; + } + + if (scene == CTX_data_scene(C)) { + /* when linking to an inactive scene don't touch the layer */ + ob->lay = base->lay; + ED_base_object_select(base, BA_SELECT); + } + + DAG_scene_sort(bmain, scene); + DAG_ids_flush_update(bmain, 0); + + WM_main_add_notifier(NC_SCENE | ND_OB_SELECT, scene); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void OUTLINER_OT_scene_drop(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Drop Object to Scene"; + ot->description = "Drag object to scene in Outliner"; + ot->idname = "OUTLINER_OT_scene_drop"; + + /* api callbacks */ + ot->invoke = scene_drop_invoke; + + ot->poll = ED_operator_outliner_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + RNA_def_string(ot->srna, "object", "Object", MAX_ID_NAME, "Object", "Target Object"); + RNA_def_string(ot->srna, "scene", "Scene", MAX_ID_NAME, "Scene", "Target Scene"); +} + +static int material_drop_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + Main *bmain = CTX_data_main(C); + Material *ma = NULL; + Object *ob = NULL; + SpaceOops *soops = CTX_wm_space_outliner(C); + ARegion *ar = CTX_wm_region(C); + TreeElement *te = NULL; + TreeElement *te_found = NULL; + char mat_name[MAX_ID_NAME - 2]; + float fmval[2]; + + UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]); + + /* Find object hovered over */ + for (te = soops->tree.first; te; te = te->next) { + te_found = outliner_dropzone_parent(C, event, te, fmval); + if (te_found) + break; + } + + if (te_found) { + RNA_string_set(op->ptr, "object", te_found->name); + ob = (Object *)BKE_libblock_find_name(ID_OB, te_found->name); + + RNA_string_get(op->ptr, "material", mat_name); + ma = (Material *)BKE_libblock_find_name(ID_MA, mat_name); + + if (ELEM(NULL, ob, ma)) { + return OPERATOR_CANCELLED; + } + + assign_material(ob, ma, ob->totcol + 1); + + DAG_ids_flush_update(bmain, 0); + WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C)); + WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING, ma); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +void OUTLINER_OT_material_drop(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Drop Material on Object"; + ot->description = "Drag material to object in Outliner"; + ot->idname = "OUTLINER_OT_material_drop"; + + /* api callbacks */ + ot->invoke = material_drop_invoke; + + ot->poll = ED_operator_outliner_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + /* properties */ + RNA_def_string(ot->srna, "object", "Object", MAX_ID_NAME, "Object", "Target Object"); + RNA_def_string(ot->srna, "material", "Material", MAX_ID_NAME, "Material", "Target Material"); +} + diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index d8d10519bd6..65de2a27568 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -110,7 +110,7 @@ typedef struct TreeElement { /* get TreeStoreElem associated with a TreeElement * < a: (TreeElement) tree element to find stored element for */ -#define TREESTORE(a) ((a) ? soops->treestore->data + (a)->store_index : NULL) +#define TREESTORE(a) (soops->treestore->data + (a)->store_index) /* size constants */ #define OL_Y_OFFSET 2 @@ -190,7 +190,7 @@ void item_rename_cb(struct bContext *C, struct Scene *scene, TreeElement *te, st TreeElement *outliner_dropzone_parent(struct bContext *C, struct wmEvent *event, struct TreeElement *te, float *fmval); int outliner_dropzone_parent_clear(struct bContext *C, struct wmEvent *event, struct TreeElement *te, float *fmval); - +TreeElement *outliner_dropzone_scene(struct bContext *C, struct wmEvent *event, struct TreeElement *te, float *fmval); /* ...................................................... */ void OUTLINER_OT_item_activate(struct wmOperatorType *ot); @@ -220,6 +220,8 @@ void OUTLINER_OT_drivers_delete_selected(struct wmOperatorType *ot); void OUTLINER_OT_parent_drop(struct wmOperatorType *ot); void OUTLINER_OT_parent_clear(struct wmOperatorType *ot); +void OUTLINER_OT_scene_drop(struct wmOperatorType *ot); +void OUTLINER_OT_material_drop(struct wmOperatorType *ot); /* outliner_tools.c ---------------------------------------------- */ diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c index 12f8f2cb38b..1dd043409a5 100644 --- a/source/blender/editors/space_outliner/outliner_ops.c +++ b/source/blender/editors/space_outliner/outliner_ops.c @@ -76,6 +76,8 @@ void outliner_operatortypes(void) WM_operatortype_append(OUTLINER_OT_parent_drop); WM_operatortype_append(OUTLINER_OT_parent_clear); + WM_operatortype_append(OUTLINER_OT_scene_drop); + WM_operatortype_append(OUTLINER_OT_material_drop); } void outliner_keymap(wmKeyConfig *keyconf) diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c index 18769476118..812fba50295 100644 --- a/source/blender/editors/space_outliner/outliner_select.c +++ b/source/blender/editors/space_outliner/outliner_select.c @@ -43,6 +43,7 @@ #include "DNA_world_types.h" #include "BLI_utildefines.h" +#include "BLI_listbase.h" #include "BKE_context.h" #include "BKE_depsgraph.h" @@ -52,6 +53,7 @@ #include "ED_armature.h" #include "ED_object.h" #include "ED_screen.h" +#include "ED_sequencer.h" #include "ED_util.h" #include "WM_api.h" @@ -568,16 +570,34 @@ static int tree_element_active_pose(bContext *C, Scene *scene, TreeElement *UNUS return 0; } -static int tree_element_active_sequence(TreeElement *te, TreeStoreElem *UNUSED(tselem), int set) +static int tree_element_active_sequence(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tselem), int set) { Sequence *seq = (Sequence *) te->directdata; + Editing *ed = BKE_sequencer_editing_get(scene, FALSE); if (set) { -// XXX select_single_seq(seq, 1); + /* only check on setting */ + if (BLI_findindex(ed->seqbasep, seq) != -1) { + if (set == 2) { + BKE_sequencer_active_set(scene, NULL); + } + ED_sequencer_deselect_all(scene); + + if (set == 2 && seq->flag & SELECT) { + seq->flag &= ~SELECT; + } + else { + seq->flag |= SELECT; + BKE_sequencer_active_set(scene, seq); + } + } + + WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene); } else { - if (seq->flag & SELECT) - return(1); + if (ed->act_seq == seq && seq->flag & SELECT) { + return 1; + } } return(0); } @@ -650,7 +670,8 @@ int tree_element_active(bContext *C, Scene *scene, SpaceOops *soops, TreeElement /* generic call for non-id data to make/check active in UI */ /* Context can be NULL when set==0 */ -int tree_element_type_active(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, TreeStoreElem *tselem, int set) +int tree_element_type_active(bContext *C, Scene *scene, SpaceOops *soops, + TreeElement *te, TreeStoreElem *tselem, int set) { switch (tselem->type) { case TSE_DEFGROUP: @@ -678,7 +699,7 @@ int tree_element_type_active(bContext *C, Scene *scene, SpaceOops *soops, TreeEl case TSE_POSEGRP: return tree_element_active_posegroup(C, scene, te, tselem, set); case TSE_SEQUENCE: - return tree_element_active_sequence(te, tselem, set); + return tree_element_active_sequence(C, scene, te, tselem, set); case TSE_SEQUENCE_DUP: return tree_element_active_sequence_dup(scene, te, tselem, set); case TSE_KEYMAP_ITEM: @@ -690,7 +711,8 @@ int tree_element_type_active(bContext *C, Scene *scene, SpaceOops *soops, TreeEl /* ================================================ */ -static int do_outliner_item_activate(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops, TreeElement *te, int extend, const float mval[2]) +static int do_outliner_item_activate(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops, + TreeElement *te, int extend, const float mval[2]) { if (mval[1] > te->ys && mval[1] < te->ys + UI_UNIT_Y) { diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c index a3ed2eac2d5..3d01de1c67a 100644 --- a/source/blender/editors/space_outliner/outliner_tools.c +++ b/source/blender/editors/space_outliner/outliner_tools.c @@ -39,6 +39,7 @@ #include "DNA_mesh_types.h" #include "DNA_meta_types.h" #include "DNA_scene_types.h" +#include "DNA_sequence_types.h" #include "DNA_world_types.h" #include "DNA_object_types.h" @@ -54,10 +55,12 @@ #include "BKE_main.h" #include "BKE_report.h" #include "BKE_scene.h" +#include "BKE_sequencer.h" #include "ED_armature.h" #include "ED_object.h" #include "ED_screen.h" +#include "ED_sequencer.h" #include "ED_util.h" #include "WM_api.h" @@ -122,13 +125,15 @@ static void set_operation_types(SpaceOops *soops, ListBase *lb, } } -static void unlink_action_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te), TreeStoreElem *tsep, TreeStoreElem *UNUSED(tselem)) +static void unlink_action_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te), + TreeStoreElem *tsep, TreeStoreElem *UNUSED(tselem)) { /* just set action to NULL */ BKE_animdata_set_action(CTX_wm_reports(C), tsep->id, NULL); } -static void unlink_material_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *UNUSED(tselem)) +static void unlink_material_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *te, + TreeStoreElem *tsep, TreeStoreElem *UNUSED(tselem)) { Material **matar = NULL; int a, totcol = 0; @@ -162,7 +167,8 @@ static void unlink_material_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeEl } } -static void unlink_texture_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *UNUSED(tselem)) +static void unlink_texture_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *te, + TreeStoreElem *tsep, TreeStoreElem *UNUSED(tselem)) { MTex **mtex = NULL; int a; @@ -191,7 +197,8 @@ static void unlink_texture_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeEle } } -static void unlink_group_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *UNUSED(te), TreeStoreElem *tsep, TreeStoreElem *tselem) +static void unlink_group_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *UNUSED(te), + TreeStoreElem *tsep, TreeStoreElem *tselem) { Group *group = (Group *)tselem->id; @@ -206,7 +213,8 @@ static void unlink_group_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeEleme } } -static void unlink_world_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *UNUSED(te), TreeStoreElem *tsep, TreeStoreElem *tselem) +static void unlink_world_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *UNUSED(te), + TreeStoreElem *tsep, TreeStoreElem *tselem) { Scene *parscene = (Scene *)tsep->id; World *wo = (World *)tselem->id; @@ -217,7 +225,8 @@ static void unlink_world_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeEleme } static void outliner_do_libdata_operation(bContext *C, Scene *scene, SpaceOops *soops, ListBase *lb, - void (*operation_cb)(bContext *C, Scene *scene, TreeElement *, TreeStoreElem *, TreeStoreElem *)) + void (*operation_cb)(bContext *C, Scene *scene, TreeElement *, + TreeStoreElem *, TreeStoreElem *)) { TreeElement *te; TreeStoreElem *tselem; @@ -226,7 +235,7 @@ static void outliner_do_libdata_operation(bContext *C, Scene *scene, SpaceOops * tselem = TREESTORE(te); if (tselem->flag & TSE_SELECTED) { if (tselem->type == 0) { - TreeStoreElem *tsep = TREESTORE(te->parent); + TreeStoreElem *tsep = te->parent ? TREESTORE(te->parent) : NULL; operation_cb(C, scene, te, tsep, tselem); } } @@ -238,7 +247,8 @@ static void outliner_do_libdata_operation(bContext *C, Scene *scene, SpaceOops * /* */ -static void object_select_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +static void object_select_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { Base *base = (Base *)te->directdata; @@ -249,7 +259,8 @@ static void object_select_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, } } -static void object_deselect_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +static void object_deselect_cb(bContext *UNUSED(C), Scene *scene, TreeElement *te, + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { Base *base = (Base *)te->directdata; @@ -260,7 +271,8 @@ static void object_deselect_cb(bContext *UNUSED(C), Scene *scene, TreeElement *t } } -static void object_delete_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +static void object_delete_cb(bContext *C, Scene *scene, TreeElement *te, + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { Base *base = (Base *)te->directdata; @@ -277,7 +289,8 @@ static void object_delete_cb(bContext *C, Scene *scene, TreeElement *te, TreeSto } } -static void id_local_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +static void id_local_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te), + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { if (tselem->id->lib && (tselem->id->flag & LIB_EXTERN)) { /* if the ID type has no special local function, @@ -289,7 +302,8 @@ static void id_local_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(t } } -static void id_fake_user_set_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +static void id_fake_user_set_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *UNUSED(te), + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { ID *id = tselem->id; @@ -299,7 +313,8 @@ static void id_fake_user_set_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeE } } -static void id_fake_user_clear_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +static void id_fake_user_clear_cb(bContext *UNUSED(C), Scene *UNUSED(scene), TreeElement *UNUSED(te), + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { ID *id = tselem->id; @@ -309,7 +324,8 @@ static void id_fake_user_clear_cb(bContext *UNUSED(C), Scene *UNUSED(scene), Tre } } -static void singleuser_action_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te), TreeStoreElem *tsep, TreeStoreElem *tselem) +static void singleuser_action_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te), + TreeStoreElem *tsep, TreeStoreElem *tselem) { ID *id = tselem->id; @@ -325,7 +341,8 @@ static void singleuser_action_cb(bContext *C, Scene *UNUSED(scene), TreeElement } } -static void singleuser_world_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te), TreeStoreElem *tsep, TreeStoreElem *tselem) +static void singleuser_world_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te), + TreeStoreElem *tsep, TreeStoreElem *tselem) { ID *id = tselem->id; @@ -342,7 +359,8 @@ static void singleuser_world_cb(bContext *C, Scene *UNUSED(scene), TreeElement * } } -static void group_linkobs2scene_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +static void group_linkobs2scene_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) { Group *group = (Group *)tselem->id; GroupObject *gob; @@ -367,8 +385,21 @@ static void group_linkobs2scene_cb(bContext *UNUSED(C), Scene *scene, TreeElemen } } +static void group_instance_cb(bContext *C, Scene *scene, TreeElement *UNUSED(te), + TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem) +{ + Group *group = (Group *)tselem->id; + + Object *ob = ED_object_add_type(C, OB_EMPTY, scene->cursor, NULL, FALSE, scene->layact); + rename_id(&ob->id, group->id.name + 2); + ob->dup_group = group; + ob->transflag |= OB_DUPLIGROUP; + id_lib_extern(&group->id); +} + void outliner_do_object_operation(bContext *C, Scene *scene_act, SpaceOops *soops, ListBase *lb, - void (*operation_cb)(bContext *C, Scene *scene, TreeElement *, TreeStoreElem *, TreeStoreElem *)) + void (*operation_cb)(bContext *C, Scene *scene, TreeElement *, + TreeStoreElem *, TreeStoreElem *)) { TreeElement *te; TreeStoreElem *tselem; @@ -396,13 +427,15 @@ void outliner_do_object_operation(bContext *C, Scene *scene_act, SpaceOops *soop /* ******************************************** */ -static void unlinkact_animdata_cb(int UNUSED(event), TreeElement *UNUSED(te), TreeStoreElem *tselem) +static void unlinkact_animdata_cb(int UNUSED(event), TreeElement *UNUSED(te), + TreeStoreElem *tselem, void *UNUSED(arg)) { /* just set action to NULL */ BKE_animdata_set_action(NULL, tselem->id, NULL); } -static void cleardrivers_animdata_cb(int UNUSED(event), TreeElement *UNUSED(te), TreeStoreElem *tselem) +static void cleardrivers_animdata_cb(int UNUSED(event), TreeElement *UNUSED(te), + TreeStoreElem *tselem, void *UNUSED(arg)) { IdAdtTemplate *iat = (IdAdtTemplate *)tselem->id; @@ -410,7 +443,8 @@ static void cleardrivers_animdata_cb(int UNUSED(event), TreeElement *UNUSED(te), free_fcurves(&iat->adt->drivers); } -static void refreshdrivers_animdata_cb(int UNUSED(event), TreeElement *UNUSED(te), TreeStoreElem *tselem) +static void refreshdrivers_animdata_cb(int UNUSED(event), TreeElement *UNUSED(te), + TreeStoreElem *tselem, void *UNUSED(arg)) { IdAdtTemplate *iat = (IdAdtTemplate *)tselem->id; FCurve *fcu; @@ -426,7 +460,7 @@ static void refreshdrivers_animdata_cb(int UNUSED(event), TreeElement *UNUSED(te /* --------------------------------- */ -static void pchan_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem)) +static void pchan_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem), void *UNUSED(arg)) { bPoseChannel *pchan = (bPoseChannel *)te->directdata; @@ -442,7 +476,7 @@ static void pchan_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem)) pchan->bone->flag &= ~BONE_HIDDEN_P; } -static void bone_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem)) +static void bone_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem), void *UNUSED(arg)) { Bone *bone = (Bone *)te->directdata; @@ -458,7 +492,7 @@ static void bone_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem)) bone->flag &= ~BONE_HIDDEN_P; } -static void ebone_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem)) +static void ebone_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem), void *UNUSED(arg)) { EditBone *ebone = (EditBone *)te->directdata; @@ -474,16 +508,23 @@ static void ebone_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem)) ebone->flag &= ~BONE_HIDDEN_A; } -static void sequence_cb(int event, TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tselem)) +static void sequence_cb(int event, TreeElement *te, TreeStoreElem *tselem, void *scene_ptr) { -// Sequence *seq= (Sequence*) te->directdata; + Sequence *seq = (Sequence *)te->directdata; if (event == 1) { -// XXX select_single_seq(seq, 1); + Scene *scene = (Scene *)scene_ptr; + Editing *ed = BKE_sequencer_editing_get(scene, FALSE); + if (BLI_findindex(ed->seqbasep, seq) != -1) { + ED_sequencer_select_sequence_single(scene, seq, TRUE); + } } + + (void)tselem; } -static void outliner_do_data_operation(SpaceOops *soops, int type, int event, ListBase *lb, - void (*operation_cb)(int, TreeElement *, TreeStoreElem *)) +static void outliner_do_data_operation(SpaceOops *soops, int type, int event, ListBase *lb, + void (*operation_cb)(int, TreeElement *, TreeStoreElem *, void *), + void *arg) { TreeElement *te; TreeStoreElem *tselem; @@ -492,11 +533,11 @@ static void outliner_do_data_operation(SpaceOops *soops, int type, int event, Li tselem = TREESTORE(te); if (tselem->flag & TSE_SELECTED) { if (tselem->type == type) { - operation_cb(event, te, tselem); + operation_cb(event, te, tselem, arg); } } if (TSELEM_OPEN(tselem, soops)) { - outliner_do_data_operation(soops, type, event, &te->subtree, operation_cb); + outliner_do_data_operation(soops, type, event, &te->subtree, operation_cb, arg); } } } @@ -607,13 +648,14 @@ void OUTLINER_OT_object_operation(wmOperatorType *ot) /* **************************************** */ static EnumPropertyItem prop_group_op_types[] = { - {1, "UNLINK", 0, "Unlink", ""}, - {2, "LOCAL", 0, "Make Local", ""}, - {3, "LINK", 0, "Link Group Objects to Scene", ""}, - {4, "TOGVIS", 0, "Toggle Visible", ""}, - {5, "TOGSEL", 0, "Toggle Selectable", ""}, - {6, "TOGREN", 0, "Toggle Renderable", ""}, - {7, "RENAME", 0, "Rename", ""}, + {0, "UNLINK", 0, "Unlink Group", ""}, + {1, "LOCAL", 0, "Make Local Group", ""}, + {2, "LINK", 0, "Link Group Objects to Scene", ""}, + {3, "INSTANCE", 0, "Instance Groups in Scene", ""}, + {4, "TOGVIS", 0, "Toggle Visible Group", ""}, + {5, "TOGSEL", 0, "Toggle Selectable", ""}, + {6, "TOGREN", 0, "Toggle Renderable", ""}, + {7, "RENAME", 0, "Rename", ""}, {0, NULL, 0, NULL, NULL} }; @@ -622,45 +664,36 @@ static int outliner_group_operation_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); SpaceOops *soops = CTX_wm_space_outliner(C); int event; - const char *str = NULL; /* check for invalid states */ if (soops == NULL) return OPERATOR_CANCELLED; event = RNA_enum_get(op->ptr, "type"); - - if (event == 1) { - outliner_do_libdata_operation(C, scene, soops, &soops->tree, unlink_group_cb); - str = "Unlink group"; - } - else if (event == 2) { - outliner_do_libdata_operation(C, scene, soops, &soops->tree, id_local_cb); - str = "Localized Data"; - } - else if (event == 3) { - outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_linkobs2scene_cb); - str = "Link Group Objects to Scene"; - } - else if (event == 4) { - outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_toggle_visibility_cb); - str = "Toggle Visibility"; - } - else if (event == 5) { - outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_toggle_selectability_cb); - str = "Toggle Selectability"; - } - else if (event == 6) { - outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_toggle_renderability_cb); - str = "Toggle Renderability"; - } - else if (event == 7) { - outliner_do_libdata_operation(C, scene, soops, &soops->tree, item_rename_cb); - str = "Rename"; + + switch (event) { + case 0: outliner_do_libdata_operation(C, scene, soops, &soops->tree, unlink_group_cb); break; + case 1: outliner_do_libdata_operation(C, scene, soops, &soops->tree, id_local_cb); break; + case 2: outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_linkobs2scene_cb); break; + case 3: outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_instance_cb); break; + case 4: outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_toggle_visibility_cb); break; + case 5: outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_toggle_selectability_cb); break; + case 6: outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_toggle_renderability_cb); break; + case 7: outliner_do_libdata_operation(C, scene, soops, &soops->tree, item_rename_cb); break; + default: + BLI_assert(0); + return OPERATOR_CANCELLED; } + + if (event == 3) { /* instance */ + Main *bmain = CTX_data_main(C); + + /* works without this except if you try render right after, see: 22027 */ + DAG_scene_sort(bmain, scene); + } - ED_undo_push(C, str); + ED_undo_push(C, prop_group_op_types[event].name); WM_event_add_notifier(C, NC_GROUP, NULL); return OPERATOR_FINISHED; @@ -703,7 +736,8 @@ static EnumPropertyItem prop_id_op_types[] = { {OUTLINER_IDOP_UNLINK, "UNLINK", 0, "Unlink", ""}, {OUTLINER_IDOP_LOCAL, "LOCAL", 0, "Make Local", ""}, {OUTLINER_IDOP_SINGLE, "SINGLE", 0, "Make Single User", ""}, - {OUTLINER_IDOP_FAKE_ADD, "ADD_FAKE", 0, "Add Fake User", "Ensure datablock gets saved even if it isn't in use (e.g. for motion and material libraries)"}, + {OUTLINER_IDOP_FAKE_ADD, "ADD_FAKE", 0, "Add Fake User", + "Ensure datablock gets saved even if it isn't in use (e.g. for motion and material libraries)"}, {OUTLINER_IDOP_FAKE_CLEAR, "CLEAR_FAKE", 0, "Clear Fake User", ""}, {OUTLINER_IDOP_RENAME, "RENAME", 0, "Rename", ""}, {0, NULL, 0, NULL, NULL} @@ -866,7 +900,7 @@ static void outliner_do_id_set_operation(SpaceOops *soops, int type, ListBase *l tselem = TREESTORE(te); if (tselem->flag & TSE_SELECTED) { if (tselem->type == type) { - TreeStoreElem *tsep = TREESTORE(te->parent); + TreeStoreElem *tsep = te->parent ? TREESTORE(te->parent) : NULL; operation_cb(te, tselem, tsep, newid); } } @@ -918,7 +952,9 @@ static int outliner_action_set_exec(bContext *C, wmOperator *op) else if (act->idroot == 0) { /* hopefully in this case (i.e. library of userless actions), the user knows what they're doing... */ BKE_reportf(op->reports, RPT_WARNING, - "Action '%s' does not specify what datablocks it can be used on. Try setting the 'ID Root Type' setting from the Datablocks Editor for this Action to avoid future problems", + "Action '%s' does not specify what datablocks it can be used on. " + "Try setting the 'ID Root Type' setting from the Datablocks Editor " + "for this Action to avoid future problems", act->id.name + 2); } @@ -1013,14 +1049,14 @@ static int outliner_animdata_operation_exec(bContext *C, wmOperator *op) case OUTLINER_ANIMOP_CLEAR_ACT: /* clear active action - using standard rules */ - outliner_do_data_operation(soops, datalevel, event, &soops->tree, unlinkact_animdata_cb); + outliner_do_data_operation(soops, datalevel, event, &soops->tree, unlinkact_animdata_cb, NULL); WM_event_add_notifier(C, NC_ANIMATION | ND_NLA_ACTCHANGE, NULL); ED_undo_push(C, "Unlink action"); break; case OUTLINER_ANIMOP_REFRESH_DRV: - outliner_do_data_operation(soops, datalevel, event, &soops->tree, refreshdrivers_animdata_cb); + outliner_do_data_operation(soops, datalevel, event, &soops->tree, refreshdrivers_animdata_cb, NULL); WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN, NULL); //ED_undo_push(C, "Refresh Drivers"); /* no undo needed - shouldn't have any impact? */ @@ -1028,7 +1064,7 @@ static int outliner_animdata_operation_exec(bContext *C, wmOperator *op) break; case OUTLINER_ANIMOP_CLEAR_DRV: - outliner_do_data_operation(soops, datalevel, event, &soops->tree, cleardrivers_animdata_cb); + outliner_do_data_operation(soops, datalevel, event, &soops->tree, cleardrivers_animdata_cb, NULL); WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN, NULL); ED_undo_push(C, "Clear Drivers"); @@ -1097,28 +1133,29 @@ static int outliner_data_operation_exec(bContext *C, wmOperator *op) if (datalevel == TSE_POSE_CHANNEL) { if (event > 0) { - outliner_do_data_operation(soops, datalevel, event, &soops->tree, pchan_cb); + outliner_do_data_operation(soops, datalevel, event, &soops->tree, pchan_cb, NULL); WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL); ED_undo_push(C, "PoseChannel operation"); } } else if (datalevel == TSE_BONE) { if (event > 0) { - outliner_do_data_operation(soops, datalevel, event, &soops->tree, bone_cb); + outliner_do_data_operation(soops, datalevel, event, &soops->tree, bone_cb, NULL); WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL); ED_undo_push(C, "Bone operation"); } } else if (datalevel == TSE_EBONE) { if (event > 0) { - outliner_do_data_operation(soops, datalevel, event, &soops->tree, ebone_cb); + outliner_do_data_operation(soops, datalevel, event, &soops->tree, ebone_cb, NULL); WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL); ED_undo_push(C, "EditBone operation"); } } else if (datalevel == TSE_SEQUENCE) { if (event > 0) { - outliner_do_data_operation(soops, datalevel, event, &soops->tree, sequence_cb); + Scene *scene = CTX_data_scene(C); + outliner_do_data_operation(soops, datalevel, event, &soops->tree, sequence_cb, scene); } } @@ -1147,7 +1184,8 @@ void OUTLINER_OT_data_operation(wmOperatorType *ot) /* ******************** */ -static int do_outliner_operation_event(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops, TreeElement *te, wmEvent *event, const float mval[2]) +static int do_outliner_operation_event(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops, + TreeElement *te, wmEvent *event, const float mval[2]) { ReportList *reports = CTX_wm_reports(C); // XXX... diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index 8a31305d65e..63907f530eb 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -132,6 +132,14 @@ static void outliner_storage_cleanup(SpaceOops *soops) } } +/* XXX - THIS FUNCTION IS INCREDIBLY SLOW + * ... it can bring blenders tools and viewport to a grinding halt becuase of searching + * for duplicate items every times they are added. + * + * TODO (possible speedups) + * - use a hash for duplicate (could even store a hash per type) + * - use mempool for TreeElements + * */ static void check_persistent(SpaceOops *soops, TreeElement *te, ID *id, short type, short nr) { TreeStore *ts; @@ -147,8 +155,8 @@ static void check_persistent(SpaceOops *soops, TreeElement *te, ID *id, short ty /* check if 'te' is in treestore */ tselem = ts->data; for (a = 0; a < ts->usedelem; a++, tselem++) { - if (tselem->id == id && tselem->used == 0) { - if ((type == 0 && tselem->type == 0) || (tselem->type == type && tselem->nr == nr)) { + if ((tselem->used == 0) && (tselem->type == type) && (tselem->id == id)) { + if ((type == 0) || (tselem->nr == nr)) { te->store_index = a; tselem->used = 1; return; @@ -889,24 +897,16 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i */ te->idcode = seq->type; te->directdata = seq; + te->name = seq->name + 2; - if (seq->type < 7) { + if (seq->type < SEQ_TYPE_EFFECT) { /* * This work like the sequence. * If the sequence have a name (not default name) * show it, in other case put the filename. */ - if (strcmp(seq->name, "SQ")) - te->name = seq->name; - else { - if ((seq->strip) && (seq->strip->stripdata)) - te->name = seq->strip->stripdata->name; - else - te->name = "SQ None"; - } - if (seq->type == SEQ_META) { - te->name = "Meta Strip"; + if (seq->type == SEQ_TYPE_META) { p = seq->seqbase.first; while (p) { outliner_add_element(soops, &te->subtree, (void *)p, te, TSE_SEQUENCE, index); @@ -916,8 +916,6 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i else outliner_add_element(soops, &te->subtree, (void *)seq->strip, te, TSE_SEQ_STRIP, index); } - else - te->name = "Effect"; } else if (type == TSE_SEQ_STRIP) { Strip *strip = (Strip *)idv; diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index 3110ff3e29e..489a4efe891 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -41,6 +41,7 @@ #include "BKE_context.h" #include "BKE_screen.h" +#include "BKE_scene.h" #include "ED_space_api.h" #include "ED_screen.h" @@ -52,6 +53,9 @@ #include "RNA_access.h" +#include "DNA_scene_types.h" +#include "DNA_object_types.h" + #include "UI_resources.h" #include "UI_view2d.h" @@ -91,7 +95,22 @@ static int outliner_parent_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) for (te = soops->tree.first; te; te = te->next) { TreeElement *te_valid; te_valid = outliner_dropzone_parent(C, event, te, fmval); - if (te_valid) return 1; + if (te_valid) { + /* check that parent/child are both in the same scene */ + Scene *scene = (Scene *)outliner_search_back(soops, te_valid, ID_SCE); + + if (!scene) { + /* currently outlier organized in a way, that if there's no parent scene + * element for object it means that all displayed objects belong to + * active scene and parenting them is allowed (sergey) + */ + return 1; + } + + if (scene && BKE_scene_base_find(scene, (Object *)id)) { + return 1; + } + } } } } @@ -117,7 +136,9 @@ static int outliner_parent_clear_poll(bContext *C, wmDrag *drag, wmEvent *event) if (drag->type == WM_DRAG_ID) { ID *id = (ID *)drag->poin; if (GS(id->name) == ID_OB) { - //TODO: Check if no parent? + if (((Object *)id)->parent == NULL) { + return 0; + } /* Ensure location under cursor is valid dropzone */ for (te = soops->tree.first; te; te = te->next) { if (outliner_dropzone_parent_clear(C, event, te, fmval)) return 1; @@ -144,6 +165,64 @@ static void outliner_parent_clear_copy(wmDrag *drag, wmDropBox *drop) RNA_enum_set(drop->ptr, "type", 0); } +static int outliner_scene_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) +{ + ARegion *ar = CTX_wm_region(C); + SpaceOops *soops = CTX_wm_space_outliner(C); + TreeElement *te = NULL; + float fmval[2]; + UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]); + + if (drag->type == WM_DRAG_ID) { + ID *id = (ID *)drag->poin; + if (GS(id->name) == ID_OB) { + /* Ensure item under cursor is valid drop target */ + /* Find object hovered over */ + for (te = soops->tree.first; te; te = te->next) { + if (outliner_dropzone_scene(C, event, te, fmval)) + return 1; + } + } + } + return 0; +} + +static void outliner_scene_drop_copy(wmDrag *drag, wmDropBox *drop) +{ + ID *id = (ID *)drag->poin; + + RNA_string_set(drop->ptr, "object", id->name + 2); +} + +static int outliner_material_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) +{ + ARegion *ar = CTX_wm_region(C); + SpaceOops *soops = CTX_wm_space_outliner(C); + TreeElement *te = NULL; + float fmval[2]; + UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]); + + if (drag->type == WM_DRAG_ID) { + ID *id = (ID *)drag->poin; + if (GS(id->name) == ID_MA) { + /* Ensure item under cursor is valid drop target */ + /* Find object hovered over */ + for (te = soops->tree.first; te; te = te->next) { + if (outliner_dropzone_parent(C, event, te, fmval)) + return 1; + } + } + } + return 0; +} + +static void outliner_material_drop_copy(wmDrag *drag, wmDropBox *drop) +{ + ID *id = (ID *)drag->poin; + + RNA_string_set(drop->ptr, "material", id->name + 2); +} + /* region dropbox definition */ static void outliner_dropboxes(void) { @@ -151,6 +230,8 @@ static void outliner_dropboxes(void) WM_dropbox_add(lb, "OUTLINER_OT_parent_drop", outliner_parent_drop_poll, outliner_parent_drop_copy); WM_dropbox_add(lb, "OUTLINER_OT_parent_clear", outliner_parent_clear_poll, outliner_parent_clear_copy); + WM_dropbox_add(lb, "OUTLINER_OT_scene_drop", outliner_scene_drop_poll, outliner_scene_drop_copy); + WM_dropbox_add(lb, "OUTLINER_OT_material_drop", outliner_material_drop_poll, outliner_material_drop_copy); } static void outliner_main_area_draw(const bContext *C, ARegion *ar) diff --git a/source/blender/editors/space_sequencer/CMakeLists.txt b/source/blender/editors/space_sequencer/CMakeLists.txt index bfd9ed95ee4..7bee8c2bebf 100644 --- a/source/blender/editors/space_sequencer/CMakeLists.txt +++ b/source/blender/editors/space_sequencer/CMakeLists.txt @@ -20,6 +20,7 @@ set(INC ../include + ../../blenfont ../../blenkernel ../../blenlib ../../blenloader diff --git a/source/blender/editors/space_sequencer/SConscript b/source/blender/editors/space_sequencer/SConscript index 65aadfa1c8a..ec06eacae9c 100644 --- a/source/blender/editors/space_sequencer/SConscript +++ b/source/blender/editors/space_sequencer/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../blenfont ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' ../../makesrna ../../blenloader' +incs += ' ../../makesrna ../../blenloader ../../blenfont' incs += ' #/intern/audaspace/intern' if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', 'win64-mingw'): diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index 97bfe1bafc2..26bedd14d6e 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -46,6 +46,7 @@ #include "BLI_utildefines.h" #include "DNA_scene_types.h" +#include "DNA_mask_types.h" #include "DNA_userdef_types.h" #include "BKE_context.h" @@ -54,6 +55,8 @@ #include "BKE_main.h" #include "BKE_sequencer.h" #include "BKE_movieclip.h" +#include "BKE_sequencer.h" +#include "BKE_mask.h" #include "BKE_report.h" #include "WM_api.h" @@ -65,6 +68,7 @@ /* for menu/popup icons etc etc*/ #include "ED_screen.h" +#include "ED_sequencer.h" #include "UI_view2d.h" @@ -227,8 +231,8 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) } seq = alloc_sequence(ed->seqbasep, start_frame, channel); - seq->type = SEQ_SCENE; - seq->blend_mode = SEQ_CROSS; /* so alpha adjustment fade to the strip below */ + seq->type = SEQ_TYPE_SCENE; + seq->blend_mode = SEQ_TYPE_CROSS; /* so alpha adjustment fade to the strip below */ seq->scene = sce_seq; @@ -246,7 +250,7 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op) BKE_sequencer_sort(scene); if (RNA_boolean_get(op->ptr, "replace_sel")) { - deselect_all_seq(scene); + ED_sequencer_deselect_all(scene); BKE_sequencer_active_set(scene, seq); seq->flag |= SELECT; } @@ -326,8 +330,8 @@ static int sequencer_add_movieclip_strip_exec(bContext *C, wmOperator *op) } seq = alloc_sequence(ed->seqbasep, start_frame, channel); - seq->type = SEQ_MOVIECLIP; - seq->blend_mode = SEQ_CROSS; + seq->type = SEQ_TYPE_MOVIECLIP; + seq->blend_mode = SEQ_TYPE_CROSS; seq->clip = clip; if (seq->clip->id.us == 0) @@ -345,7 +349,7 @@ static int sequencer_add_movieclip_strip_exec(bContext *C, wmOperator *op) BKE_sequencer_sort(scene); if (RNA_boolean_get(op->ptr, "replace_sel")) { - deselect_all_seq(scene); + ED_sequencer_deselect_all(scene); BKE_sequencer_active_set(scene, seq); seq->flag |= SELECT; } @@ -359,7 +363,6 @@ static int sequencer_add_movieclip_strip_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } - static int sequencer_add_movieclip_strip_invoke(bContext *C, wmOperator *op, wmEvent *event) { if (!ED_operator_sequencer_active(C)) { @@ -376,11 +379,10 @@ static int sequencer_add_movieclip_strip_invoke(bContext *C, wmOperator *op, wmE // return WM_menu_invoke(C, op, event); } - void SEQUENCER_OT_movieclip_strip_add(struct wmOperatorType *ot) { PropertyRNA *prop; - + /* identifiers */ ot->name = "Add MovieClip Strip"; ot->idname = "SEQUENCER_OT_movieclip_strip_add"; @@ -391,16 +393,113 @@ void SEQUENCER_OT_movieclip_strip_add(struct wmOperatorType *ot) ot->exec = sequencer_add_movieclip_strip_exec; ot->poll = ED_operator_scene_editable; - + /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - + sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME); prop = RNA_def_enum(ot->srna, "clip", DummyRNA_NULL_items, 0, "Clip", ""); RNA_def_enum_funcs(prop, RNA_movieclip_itemf); ot->prop = prop; } +static int sequencer_add_mask_strip_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + Editing *ed = BKE_sequencer_editing_get(scene, TRUE); + + Mask *mask; + + Sequence *seq; /* generic strip vars */ + Strip *strip; + + int start_frame, channel; /* operator props */ + + start_frame = RNA_int_get(op->ptr, "frame_start"); + channel = RNA_int_get(op->ptr, "channel"); + + mask = BLI_findlink(&CTX_data_main(C)->mask, RNA_enum_get(op->ptr, "mask")); + + if (mask == NULL) { + BKE_report(op->reports, RPT_ERROR, "Mask not found"); + return OPERATOR_CANCELLED; + } + + seq = alloc_sequence(ed->seqbasep, start_frame, channel); + seq->type = SEQ_TYPE_MASK; + seq->blend_mode = SEQ_TYPE_CROSS; + seq->mask = mask; + + if (seq->mask->id.us == 0) + seq->mask->id.us = 1; + + /* basic defaults */ + seq->strip = strip = MEM_callocN(sizeof(Strip), "strip"); + seq->len = BKE_mask_get_duration(mask); + strip->us = 1; + + BLI_strncpy(seq->name + 2, mask->id.name + 2, sizeof(seq->name) - 2); + seqbase_unique_name_recursive(&ed->seqbase, seq); + + calc_sequence_disp(scene, seq); + BKE_sequencer_sort(scene); + + if (RNA_boolean_get(op->ptr, "replace_sel")) { + ED_sequencer_deselect_all(scene); + BKE_sequencer_active_set(scene, seq); + seq->flag |= SELECT; + } + + if (RNA_boolean_get(op->ptr, "overlap") == FALSE) { + if (seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq, scene); + } + + WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene); + + return OPERATOR_FINISHED; +} + +static int sequencer_add_mask_strip_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + if (!ED_operator_sequencer_active(C)) { + BKE_report(op->reports, RPT_ERROR, "Sequencer area not active"); + return OPERATOR_CANCELLED; + } + + if (!RNA_struct_property_is_set(op->ptr, "mask")) + return WM_enum_search_invoke(C, op, event); + + sequencer_generic_invoke_xy__internal(C, op, event, 0); + return sequencer_add_mask_strip_exec(C, op); + // needs a menu + // return WM_menu_invoke(C, op, event); +} + + +void SEQUENCER_OT_mask_strip_add(struct wmOperatorType *ot) +{ + PropertyRNA *prop; + + /* identifiers */ + ot->name = "Add Mask Strip"; + ot->idname = "SEQUENCER_OT_mask_strip_add"; + ot->description = "Add a mask strip to the sequencer"; + + /* api callbacks */ + ot->invoke = sequencer_add_mask_strip_invoke; + ot->exec = sequencer_add_mask_strip_exec; + + ot->poll = ED_operator_scene_editable; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME); + prop = RNA_def_enum(ot->srna, "mask", DummyRNA_NULL_items, 0, "Mask", ""); + RNA_def_enum_funcs(prop, RNA_mask_itemf); + ot->prop = prop; +} + static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoadFunc seq_load_func) { @@ -414,7 +513,7 @@ static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoad seq_load_operator_info(&seq_load, op); if (seq_load.flag & SEQ_LOAD_REPLACE_SEL) - deselect_all_seq(scene); + ED_sequencer_deselect_all(scene); if (RNA_struct_property_is_set(op->ptr, "files")) tot_files = RNA_property_collection_length(op->ptr, RNA_struct_find_property(op->ptr, "files")); @@ -595,7 +694,7 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; if (seq_load.flag & SEQ_LOAD_REPLACE_SEL) - deselect_all_seq(scene); + ED_sequencer_deselect_all(scene); /* main adding function */ @@ -739,27 +838,14 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op) seq->strip = strip = MEM_callocN(sizeof(Strip), "strip"); strip->us = 1; - if (seq->type == SEQ_PLUGIN) { - char path[FILE_MAX]; - RNA_string_get(op->ptr, "filepath", path); - - sh.init_plugin(seq, path); - - if (seq->plugin == NULL) { - BLI_remlink(ed->seqbasep, seq); - seq_free_sequence(scene, seq); - BKE_reportf(op->reports, RPT_ERROR, "Sequencer plugin \"%s\" could not load", path); - return OPERATOR_CANCELLED; - } - } - else if (seq->type == SEQ_COLOR) { + if (seq->type == SEQ_TYPE_COLOR) { SolidColorVars *colvars = (SolidColorVars *)seq->effectdata; RNA_float_get_array(op->ptr, "color", colvars->col); - seq->blend_mode = SEQ_CROSS; /* so alpha adjustment fade to the strip below */ + seq->blend_mode = SEQ_TYPE_CROSS; /* so alpha adjustment fade to the strip below */ } - else if (seq->type == SEQ_ADJUSTMENT) { - seq->blend_mode = SEQ_CROSS; + else if (seq->type == SEQ_TYPE_ADJUSTMENT) { + seq->blend_mode = SEQ_TYPE_CROSS; } /* an unset channel is a special case where we automatically go above @@ -786,7 +872,7 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op) BKE_sequencer_sort(scene); if (RNA_boolean_get(op->ptr, "replace_sel")) { - deselect_all_seq(scene); + ED_sequencer_deselect_all(scene); BKE_sequencer_active_set(scene, seq); seq->flag |= SELECT; } @@ -823,14 +909,7 @@ static int sequencer_add_effect_strip_invoke(bContext *C, wmOperator *op, wmEven sequencer_generic_invoke_xy__internal(C, op, event, prop_flag); - if (is_type_set && type == SEQ_PLUGIN) { - /* only plugins need the file selector */ - WM_event_add_fileselect(C, op); - return OPERATOR_RUNNING_MODAL; - } - else { - return sequencer_add_effect_strip_exec(C, op); - } + return sequencer_add_effect_strip_exec(C, op); } void SEQUENCER_OT_effect_strip_add(struct wmOperatorType *ot) @@ -851,6 +930,6 @@ void SEQUENCER_OT_effect_strip_add(struct wmOperatorType *ot) WM_operator_properties_filesel(ot, 0, FILE_SPECIAL, FILE_OPENFILE, WM_FILESEL_FILEPATH | WM_FILESEL_RELPATH, FILE_DEFAULTDISPLAY); sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME | SEQPROP_ENDFRAME); - RNA_def_enum(ot->srna, "type", sequencer_prop_effect_types, SEQ_CROSS, "Type", "Sequencer effect type"); + RNA_def_enum(ot->srna, "type", sequencer_prop_effect_types, SEQ_TYPE_CROSS, "Type", "Sequencer effect type"); RNA_def_float_vector(ot->srna, "color", 3, NULL, 0.0f, 1.0f, "Color", "Initialize the strip with this color (only used when type='COLOR')", 0.0f, 1.0f); } diff --git a/source/blender/editors/space_sequencer/sequencer_buttons.c b/source/blender/editors/space_sequencer/sequencer_buttons.c index aeedafa9992..1e452f2052d 100644 --- a/source/blender/editors/space_sequencer/sequencer_buttons.c +++ b/source/blender/editors/space_sequencer/sequencer_buttons.c @@ -25,8 +25,6 @@ * \ingroup spseq */ - - #include <string.h> #include <stdio.h> @@ -36,10 +34,13 @@ #include "BLI_blenlib.h" #include "BLI_utildefines.h" +#include "BLF_translation.h" + #include "BKE_context.h" #include "BKE_screen.h" #include "ED_screen.h" +#include "ED_gpencil.h" #include "WM_api.h" #include "WM_types.h" @@ -48,6 +49,19 @@ #include "sequencer_intern.h" +/* **************************** buttons ********************************* */ + +void sequencer_buttons_register(ARegionType *art) +{ + PanelType *pt; + + pt = MEM_callocN(sizeof(PanelType), "spacetype sequencer panel gpencil"); + strcpy(pt->idname, "SEQUENCER_PT_gpencil"); + strcpy(pt->label, N_("Grease Pencil")); + pt->draw= gpencil_panel_standard; + BLI_addtail(&art->paneltypes, pt); +} + /* **************** operator to open/close properties view ************* */ static int sequencer_properties(bContext *C, wmOperator *UNUSED(op)) diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 392e7793a0f..e48450e93bd 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -40,6 +40,7 @@ #include "IMB_imbuf_types.h" #include "DNA_scene_types.h" +#include "DNA_mask_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" #include "DNA_userdef_types.h" @@ -57,8 +58,11 @@ #include "BIF_glutil.h" #include "ED_anim_api.h" +#include "ED_gpencil.h" #include "ED_markers.h" +#include "ED_mask.h" #include "ED_types.h" +#include "ED_space_api.h" #include "UI_interface.h" #include "UI_resources.h" @@ -82,23 +86,27 @@ static void get_seq_color3ubv(Scene *curscene, Sequence *seq, unsigned char col[ SolidColorVars *colvars = (SolidColorVars *)seq->effectdata; switch (seq->type) { - case SEQ_IMAGE: + case SEQ_TYPE_IMAGE: UI_GetThemeColor3ubv(TH_SEQ_IMAGE, col); break; - case SEQ_META: + case SEQ_TYPE_META: UI_GetThemeColor3ubv(TH_SEQ_META, col); break; - case SEQ_MOVIE: + case SEQ_TYPE_MOVIE: UI_GetThemeColor3ubv(TH_SEQ_MOVIE, col); break; - case SEQ_MOVIECLIP: + case SEQ_TYPE_MOVIECLIP: UI_GetThemeColor3ubv(TH_SEQ_MOVIECLIP, col); break; - - case SEQ_SCENE: + + case SEQ_TYPE_MASK: + UI_GetThemeColor3ubv(TH_SEQ_MASK, col); /* TODO */ + break; + + case SEQ_TYPE_SCENE: UI_GetThemeColor3ubv(TH_SEQ_SCENE, col); if (seq->scene == curscene) { @@ -107,45 +115,45 @@ static void get_seq_color3ubv(Scene *curscene, Sequence *seq, unsigned char col[ break; /* transitions */ - case SEQ_CROSS: - case SEQ_GAMCROSS: - case SEQ_WIPE: + case SEQ_TYPE_CROSS: + case SEQ_TYPE_GAMCROSS: + case SEQ_TYPE_WIPE: UI_GetThemeColor3ubv(TH_SEQ_TRANSITION, col); /* slightly offset hue to distinguish different effects */ - if (seq->type == SEQ_CROSS) rgb_byte_set_hue_float_offset(col, 0.04); - if (seq->type == SEQ_GAMCROSS) rgb_byte_set_hue_float_offset(col, 0.08); - if (seq->type == SEQ_WIPE) rgb_byte_set_hue_float_offset(col, 0.12); + if (seq->type == SEQ_TYPE_CROSS) rgb_byte_set_hue_float_offset(col, 0.04); + if (seq->type == SEQ_TYPE_GAMCROSS) rgb_byte_set_hue_float_offset(col, 0.08); + if (seq->type == SEQ_TYPE_WIPE) rgb_byte_set_hue_float_offset(col, 0.12); break; /* effects */ - case SEQ_TRANSFORM: - case SEQ_SPEED: - case SEQ_ADD: - case SEQ_SUB: - case SEQ_MUL: - case SEQ_ALPHAOVER: - case SEQ_ALPHAUNDER: - case SEQ_OVERDROP: - case SEQ_GLOW: - case SEQ_MULTICAM: - case SEQ_ADJUSTMENT: + case SEQ_TYPE_TRANSFORM: + case SEQ_TYPE_SPEED: + case SEQ_TYPE_ADD: + case SEQ_TYPE_SUB: + case SEQ_TYPE_MUL: + case SEQ_TYPE_ALPHAOVER: + case SEQ_TYPE_ALPHAUNDER: + case SEQ_TYPE_OVERDROP: + case SEQ_TYPE_GLOW: + case SEQ_TYPE_MULTICAM: + case SEQ_TYPE_ADJUSTMENT: UI_GetThemeColor3ubv(TH_SEQ_EFFECT, col); /* slightly offset hue to distinguish different effects */ - if (seq->type == SEQ_ADD) rgb_byte_set_hue_float_offset(col, 0.04); - else if (seq->type == SEQ_SUB) rgb_byte_set_hue_float_offset(col, 0.08); - else if (seq->type == SEQ_MUL) rgb_byte_set_hue_float_offset(col, 0.12); - else if (seq->type == SEQ_ALPHAOVER) rgb_byte_set_hue_float_offset(col, 0.16); - else if (seq->type == SEQ_ALPHAUNDER) rgb_byte_set_hue_float_offset(col, 0.20); - else if (seq->type == SEQ_OVERDROP) rgb_byte_set_hue_float_offset(col, 0.24); - else if (seq->type == SEQ_GLOW) rgb_byte_set_hue_float_offset(col, 0.28); - else if (seq->type == SEQ_TRANSFORM) rgb_byte_set_hue_float_offset(col, 0.36); - else if (seq->type == SEQ_MULTICAM) rgb_byte_set_hue_float_offset(col, 0.32); - else if (seq->type == SEQ_ADJUSTMENT) rgb_byte_set_hue_float_offset(col, 0.40); + if (seq->type == SEQ_TYPE_ADD) rgb_byte_set_hue_float_offset(col, 0.04); + else if (seq->type == SEQ_TYPE_SUB) rgb_byte_set_hue_float_offset(col, 0.08); + else if (seq->type == SEQ_TYPE_MUL) rgb_byte_set_hue_float_offset(col, 0.12); + else if (seq->type == SEQ_TYPE_ALPHAOVER) rgb_byte_set_hue_float_offset(col, 0.16); + else if (seq->type == SEQ_TYPE_ALPHAUNDER) rgb_byte_set_hue_float_offset(col, 0.20); + else if (seq->type == SEQ_TYPE_OVERDROP) rgb_byte_set_hue_float_offset(col, 0.24); + else if (seq->type == SEQ_TYPE_GLOW) rgb_byte_set_hue_float_offset(col, 0.28); + else if (seq->type == SEQ_TYPE_TRANSFORM) rgb_byte_set_hue_float_offset(col, 0.36); + else if (seq->type == SEQ_TYPE_MULTICAM) rgb_byte_set_hue_float_offset(col, 0.32); + else if (seq->type == SEQ_TYPE_ADJUSTMENT) rgb_byte_set_hue_float_offset(col, 0.40); break; - case SEQ_COLOR: + case SEQ_TYPE_COLOR: if (colvars->col) { rgb_float_to_uchar(col, colvars->col); } @@ -153,12 +161,8 @@ static void get_seq_color3ubv(Scene *curscene, Sequence *seq, unsigned char col[ col[0] = col[1] = col[2] = 128; } break; - - case SEQ_PLUGIN: - UI_GetThemeColor3ubv(TH_SEQ_PLUGIN, col); - break; - case SEQ_SOUND: + case SEQ_TYPE_SOUND_RAM: UI_GetThemeColor3ubv(TH_SEQ_AUDIO, col); blendcol[0] = blendcol[1] = blendcol[2] = 128; if (seq->flag & SEQ_MUTE) UI_GetColorPtrBlendShade3ubv(col, blendcol, col, 0.5, 20); @@ -366,7 +370,7 @@ static void draw_seq_handle(View2D *v2d, Sequence *seq, float pixelx, short dire } /* draw! */ - if (seq->type < SEQ_EFFECT || + if (seq->type < SEQ_TYPE_EFFECT || get_sequence_effect_num_inputs(seq->type) == 0) { glEnable(GL_BLEND); @@ -413,7 +417,7 @@ static void draw_seq_extensions(Scene *scene, ARegion *ar, Sequence *seq) unsigned char col[3], blendcol[3]; View2D *v2d = &ar->v2d; - if (seq->type >= SEQ_EFFECT) return; + if (seq->type >= SEQ_TYPE_EFFECT) return; x1 = seq->startdisp; x2 = seq->enddisp; @@ -525,10 +529,10 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float if (name[0] == '\0') name = give_seqname(seq); - if (seq->type == SEQ_META || seq->type == SEQ_ADJUSTMENT) { + if (seq->type == SEQ_TYPE_META || seq->type == SEQ_TYPE_ADJUSTMENT) { BLI_snprintf(str, sizeof(str), "%d | %s", seq->len, name); } - else if (seq->type == SEQ_SCENE) { + else if (seq->type == SEQ_TYPE_SCENE) { if (seq->scene) { if (seq->scene_camera) { BLI_snprintf(str, sizeof(str), "%d | %s: %s (%s)", @@ -544,7 +548,7 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float seq->len, name); } } - else if (seq->type == SEQ_MOVIECLIP) { + else if (seq->type == SEQ_TYPE_MOVIECLIP) { if (seq->clip && strcmp(name, seq->clip->id.name + 2) != 0) { BLI_snprintf(str, sizeof(str), "%d | %s: %s", seq->len, name, seq->clip->id.name + 2); @@ -554,33 +558,29 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float seq->len, name); } } - else if (seq->type == SEQ_MULTICAM) { + else if (seq->type == SEQ_TYPE_MASK) { + if (seq->mask && strcmp(name, seq->mask->id.name + 2) != 0) { + BLI_snprintf(str, sizeof(str), "%d | %s: %s", + seq->len, name, seq->mask->id.name + 2); + } + else { + BLI_snprintf(str, sizeof(str), "%d | %s", + seq->len, name); + } + } + else if (seq->type == SEQ_TYPE_MULTICAM) { BLI_snprintf(str, sizeof(str), "Cam | %s: %d", name, seq->multicam_source); } - else if (seq->type == SEQ_IMAGE) { + else if (seq->type == SEQ_TYPE_IMAGE) { BLI_snprintf(str, sizeof(str), "%d | %s: %s%s", seq->len, name, seq->strip->dir, seq->strip->stripdata->name); } - else if (seq->type & SEQ_EFFECT) { - int can_float = (seq->type != SEQ_PLUGIN) || (seq->plugin && seq->plugin->version >= 4); - - if (seq->seq3 != seq->seq2 && seq->seq1 != seq->seq3) { - BLI_snprintf(str, sizeof(str), "%d | %s: %d>%d (use %d)%s", - seq->len, name, seq->seq1->machine, seq->seq2->machine, seq->seq3->machine, - can_float ? "" : " No float, upgrade plugin!"); - } - else if (seq->seq1 && seq->seq2) { - BLI_snprintf(str, sizeof(str), "%d | %s: %d>%d%s", - seq->len, name, seq->seq1->machine, seq->seq2->machine, - can_float ? "" : " No float, upgrade plugin!"); - } - else { - BLI_snprintf(str, sizeof(str), "%d | %s", + else if (seq->type & SEQ_TYPE_EFFECT) { + BLI_snprintf(str, sizeof(str), "%d | %s", seq->len, name); - } } - else if (seq->type == SEQ_SOUND) { + else if (seq->type == SEQ_TYPE_SOUND_RAM) { if (seq->sound) BLI_snprintf(str, sizeof(str), "%d | %s: %s", seq->len, name, seq->sound->name); @@ -588,7 +588,7 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float BLI_snprintf(str, sizeof(str), "%d | %s", seq->len, name); } - else if (seq->type == SEQ_MOVIE) { + else if (seq->type == SEQ_TYPE_MOVIE) { BLI_snprintf(str, sizeof(str), "%d | %s: %s%s", seq->len, name, seq->strip->dir, seq->strip->stripdata->name); } @@ -714,7 +714,7 @@ static void draw_seq_strip(Scene *scene, ARegion *ar, Sequence *seq, int outline x2 = seq->enddisp; /* draw sound wave */ - if (seq->type == SEQ_SOUND) { + if (seq->type == SEQ_TYPE_SOUND_RAM) { drawseqwave(scene, seq, x1, y1, x2, y2, (ar->v2d.cur.xmax - ar->v2d.cur.xmin) / ar->winx); } @@ -761,7 +761,7 @@ static void draw_seq_strip(Scene *scene, ARegion *ar, Sequence *seq, int outline glDisable(GL_LINE_STIPPLE); } - if (seq->type == SEQ_META) { + if (seq->type == SEQ_TYPE_META) { drawmeta_contents(scene, seq, x1, y1, x2, y2); } @@ -976,17 +976,68 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq } /* draw grease-pencil (image aligned) */ -// if (sseq->flag & SEQ_DRAW_GPENCIL) -// XXX draw_gpencil_2dimage(sa, ibuf); + draw_gpencil_2dimage(C); IMB_freeImBuf(ibuf); - /* draw grease-pencil (screen aligned) */ -// if (sseq->flag & SEQ_DRAW_GPENCIL) -// XXX draw_gpencil_view2d(sa, 0); - /* ortho at pixel level */ UI_view2d_view_restore(C); + + /* draw grease-pencil (screen aligned) */ + draw_gpencil_view2d(C, 0); + + //if (sc->mode == SC_MODE_MASKEDIT) { + if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) { + Sequence *seq_act = BKE_sequencer_active_get(scene); + + if (seq_act && seq_act->type == SEQ_TYPE_MASK && seq_act->mask) { + int x, y; + int width, height; + float zoomx, zoomy; + + /* frame image */ + float maxdim; + float xofs, yofs; + + /* find window pixel coordinates of origin */ + UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &x, &y); + + width = v2d->tot.xmax - v2d->tot.xmin; + height = v2d->tot.ymax - v2d->tot.ymin; + + zoomx = (float)(ar->winrct.xmax - ar->winrct.xmin + 1) / (float)((ar->v2d.cur.xmax - ar->v2d.cur.xmin)); + zoomy = (float)(ar->winrct.ymax - ar->winrct.ymin + 1) / (float)((ar->v2d.cur.ymax - ar->v2d.cur.ymin)); + + x += v2d->tot.xmin * zoomx; + y += v2d->tot.ymin * zoomy; + + /* frame the image */ + maxdim = maxf(width, height); + if (width == height) { + xofs = yofs = 0; + } + else if (width < height) { + xofs = ((height - width) / -2.0f) * zoomx; + yofs = 0.0f; + } + else { /* (width > height) */ + xofs = 0.0f; + yofs = ((width - height) / -2.0f) * zoomy; + } + + /* apply transformation so mask editing tools will assume drawing from the origin in normalized space */ + glPushMatrix(); + glTranslatef(x + xofs, y + yofs, 0); + glScalef(maxdim * zoomx, maxdim * zoomy, 0); + + ED_mask_draw((bContext *)C, 0, 0); // sc->mask_draw_flag, sc->mask_draw_type + + ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW); + + glPopMatrix(); + } + } + } #if 0 diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index b3b4e47ba81..c686f8440a9 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -79,21 +79,21 @@ /* XXX */ /* RNA Enums, used in multiple files */ EnumPropertyItem sequencer_prop_effect_types[] = { - {SEQ_CROSS, "CROSS", 0, "Crossfade", "Crossfade effect strip type"}, - {SEQ_ADD, "ADD", 0, "Add", "Add effect strip type"}, - {SEQ_SUB, "SUBTRACT", 0, "Subtract", "Subtract effect strip type"}, - {SEQ_ALPHAOVER, "ALPHA_OVER", 0, "Alpha Over", "Alpha Over effect strip type"}, - {SEQ_ALPHAUNDER, "ALPHA_UNDER", 0, "Alpha Under", "Alpha Under effect strip type"}, - {SEQ_GAMCROSS, "GAMMA_CROSS", 0, "Gamma Cross", "Gamma Cross effect strip type"}, - {SEQ_MUL, "MULTIPLY", 0, "Multiply", "Multiply effect strip type"}, - {SEQ_OVERDROP, "OVER_DROP", 0, "Alpha Over Drop", "Alpha Over Drop effect strip type"}, - {SEQ_WIPE, "WIPE", 0, "Wipe", "Wipe effect strip type"}, - {SEQ_GLOW, "GLOW", 0, "Glow", "Glow effect strip type"}, - {SEQ_TRANSFORM, "TRANSFORM", 0, "Transform", "Transform effect strip type"}, - {SEQ_COLOR, "COLOR", 0, "Color", "Color effect strip type"}, - {SEQ_SPEED, "SPEED", 0, "Speed", "Color effect strip type"}, - {SEQ_MULTICAM, "MULTICAM", 0, "Multicam Selector", ""}, - {SEQ_ADJUSTMENT, "ADJUSTMENT", 0, "Adjustment Layer", ""}, + {SEQ_TYPE_CROSS, "CROSS", 0, "Crossfade", "Crossfade effect strip type"}, + {SEQ_TYPE_ADD, "ADD", 0, "Add", "Add effect strip type"}, + {SEQ_TYPE_SUB, "SUBTRACT", 0, "Subtract", "Subtract effect strip type"}, + {SEQ_TYPE_ALPHAOVER, "ALPHA_OVER", 0, "Alpha Over", "Alpha Over effect strip type"}, + {SEQ_TYPE_ALPHAUNDER, "ALPHA_UNDER", 0, "Alpha Under", "Alpha Under effect strip type"}, + {SEQ_TYPE_GAMCROSS, "GAMMA_CROSS", 0, "Gamma Cross", "Gamma Cross effect strip type"}, + {SEQ_TYPE_MUL, "MULTIPLY", 0, "Multiply", "Multiply effect strip type"}, + {SEQ_TYPE_OVERDROP, "OVER_DROP", 0, "Alpha Over Drop", "Alpha Over Drop effect strip type"}, + {SEQ_TYPE_WIPE, "WIPE", 0, "Wipe", "Wipe effect strip type"}, + {SEQ_TYPE_GLOW, "GLOW", 0, "Glow", "Glow effect strip type"}, + {SEQ_TYPE_TRANSFORM, "TRANSFORM", 0, "Transform", "Transform effect strip type"}, + {SEQ_TYPE_COLOR, "COLOR", 0, "Color", "Color effect strip type"}, + {SEQ_TYPE_SPEED, "SPEED", 0, "Speed", "Color effect strip type"}, + {SEQ_TYPE_MULTICAM, "MULTICAM", 0, "Multicam Selector", ""}, + {SEQ_TYPE_ADJUSTMENT, "ADJUSTMENT", 0, "Adjustment Layer", ""}, {0, NULL, 0, NULL, NULL} }; @@ -231,27 +231,6 @@ void seq_rectf(Sequence *seq, rctf *rectf) rectf->ymax = seq->machine + SEQ_STRIP_OFSTOP; } -static void UNUSED_FUNCTION(change_plugin_seq) (Scene * scene, char *str) /* called from fileselect */ -{ - Editing *ed = BKE_sequencer_editing_get(scene, FALSE); - struct SeqEffectHandle sh; - Sequence *last_seq = BKE_sequencer_active_get(scene); - - if (last_seq == NULL || last_seq->type != SEQ_PLUGIN) return; - - sh = get_sequence_effect(last_seq); - sh.free(last_seq); - sh.init_plugin(last_seq, str); - - last_seq->machine = MAX3(last_seq->seq1->machine, - last_seq->seq2->machine, - last_seq->seq3->machine); - - if (seq_test_overlap(ed->seqbasep, last_seq) ) shuffle_seq(ed->seqbasep, last_seq, scene); - -} - - void boundbox_seq(Scene *scene, rctf *rect) { Sequence *seq; @@ -454,7 +433,7 @@ static int seq_is_predecessor(Sequence *pred, Sequence *seq) return 0; } -void deselect_all_seq(Scene *scene) +void ED_sequencer_deselect_all(Scene *scene) { Sequence *seq; Editing *ed = BKE_sequencer_editing_get(scene, FALSE); @@ -499,7 +478,7 @@ int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequen for (seq = ed->seqbasep->first; seq; seq = seq->next) { if (seq->flag & SELECT) { - if (seq->type == SEQ_SOUND && get_sequence_effect_num_inputs(type) != 0) { + if (seq->type == SEQ_TYPE_SOUND_RAM && get_sequence_effect_num_inputs(type) != 0) { *error_str = "Can't apply effects to audio sequence strips"; return 0; } @@ -564,7 +543,7 @@ static Sequence *del_seq_find_replace_recurs(Scene *scene, Sequence *seq) if (!seq) return NULL; - else if (!(seq->type & SEQ_EFFECT)) + else if (!(seq->type & SEQ_TYPE_EFFECT)) return ((seq->flag & SELECT) ? NULL : seq); else if (!(seq->flag & SELECT)) { /* try to find replacement for effect inputs */ @@ -605,7 +584,7 @@ static void recurs_del_seq_flag(Scene *scene, ListBase *lb, short flag, short de if ((seq->flag & flag) || deleteall) { BLI_remlink(lb, seq); if (seq == last_seq) BKE_sequencer_active_set(scene, NULL); - if (seq->type == SEQ_META) recurs_del_seq_flag(scene, &seq->seqbase, flag, 1); + if (seq->type == SEQ_TYPE_META) recurs_del_seq_flag(scene, &seq->seqbase, flag, 1); seq_free_sequence(scene, seq); } seq = seqn; @@ -637,7 +616,7 @@ static Sequence *cut_seq_hard(Scene *scene, Sequence *seq, int cutframe) if ((seq->startstill) && (cutframe < seq->start)) { /* don't do funny things with METAs ... */ - if (seq->type == SEQ_META) { + if (seq->type == SEQ_TYPE_META) { skip_dup = TRUE; seq->startstill = seq->start - cutframe; } @@ -658,7 +637,7 @@ static Sequence *cut_seq_hard(Scene *scene, Sequence *seq, int cutframe) else if (((seq->start + seq->len) < cutframe) && (seq->endstill)) { seq->endstill -= seq->enddisp - cutframe; /* don't do funny things with METAs ... */ - if (seq->type == SEQ_META) { + if (seq->type == SEQ_TYPE_META) { skip_dup = TRUE; } } @@ -733,7 +712,7 @@ static Sequence *cut_seq_soft(Scene *scene, Sequence *seq, int cutframe) if ((seq->startstill) && (cutframe < seq->start)) { /* don't do funny things with METAs ... */ - if (seq->type == SEQ_META) { + if (seq->type == SEQ_TYPE_META) { skip_dup = TRUE; seq->startstill = seq->start - cutframe; } @@ -752,7 +731,7 @@ static Sequence *cut_seq_soft(Scene *scene, Sequence *seq, int cutframe) else if (((seq->start + seq->len) < cutframe) && (seq->endstill)) { seq->endstill -= seq->enddisp - cutframe; /* don't do funny things with METAs ... */ - if (seq->type == SEQ_META) { + if (seq->type == SEQ_TYPE_META) { skip_dup = TRUE; } } @@ -876,7 +855,7 @@ static void UNUSED_FUNCTION(touch_seq_files) (Scene * scene) SEQP_BEGIN (ed, seq) { if (seq->flag & SELECT) { - if (seq->type == SEQ_MOVIE) { + if (seq->type == SEQ_TYPE_MOVIE) { if (seq->strip && seq->strip->stripdata) { BLI_make_file_string(G.main->name, str, seq->strip->dir, seq->strip->stripdata->name); BLI_file_touch(seq->name); @@ -904,7 +883,7 @@ static void set_filter_seq(Scene *scene) SEQP_BEGIN (ed, seq) { if (seq->flag & SELECT) { - if (seq->type == SEQ_MOVIE) { + if (seq->type == SEQ_TYPE_MOVIE) { seq->flag |= SEQ_FILTERY; reload_sequence_new_file(scene, seq, FALSE); calc_sequence(scene, seq); @@ -1073,7 +1052,7 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op) shuffle_seq(ed->seqbasep, seq, scene); } } - else if (seq->type & SEQ_EFFECT) { + else if (seq->type & SEQ_TYPE_EFFECT) { if (seq->seq1 && (seq->seq1->flag & SELECT)) calc_sequence(scene, seq); else if (seq->seq2 && (seq->seq2->flag & SELECT)) @@ -1389,7 +1368,7 @@ static int sequencer_effect_poll(bContext *C) if (ed) { Sequence *last_seq = BKE_sequencer_active_get(scene); - if (last_seq && (last_seq->type & SEQ_EFFECT)) { + if (last_seq && (last_seq->type & SEQ_TYPE_EFFECT)) { return 1; } } @@ -1647,7 +1626,7 @@ static int sequencer_delete_exec(bContext *C, wmOperator *UNUSED(op)) /* for effects, try to find a replacement input */ for (seq = ed->seqbasep->first; seq; seq = seq->next) - if ((seq->type & SEQ_EFFECT) && !(seq->flag & SELECT)) + if ((seq->type & SEQ_TYPE_EFFECT) && !(seq->flag & SELECT)) del_seq_find_replace_recurs(scene, seq); /* delete all selected strips */ @@ -1700,7 +1679,7 @@ static int sequencer_offset_clear_exec(bContext *C, wmOperator *UNUSED(op)) /* for effects, try to find a replacement input */ for (seq = ed->seqbasep->first; seq; seq = seq->next) { - if ((seq->type & SEQ_EFFECT) == 0 && (seq->flag & SELECT)) { + if ((seq->type & SEQ_TYPE_EFFECT) == 0 && (seq->flag & SELECT)) { seq->startofs = seq->endofs = seq->startstill = seq->endstill = 0; } } @@ -1713,7 +1692,7 @@ static int sequencer_offset_clear_exec(bContext *C, wmOperator *UNUSED(op)) } for (seq = ed->seqbasep->first; seq; seq = seq->next) { - if ((seq->type & SEQ_EFFECT) == 0 && (seq->flag & SELECT)) { + if ((seq->type & SEQ_TYPE_EFFECT) == 0 && (seq->flag & SELECT)) { if (seq_test_overlap(ed->seqbasep, seq)) { shuffle_seq(ed->seqbasep, seq, scene); } @@ -1758,7 +1737,7 @@ static int sequencer_separate_images_exec(bContext *C, wmOperator *op) seq = ed->seqbasep->first; /* poll checks this is valid */ while (seq) { - if ((seq->flag & SELECT) && (seq->type == SEQ_IMAGE) && (seq->len > 1)) { + if ((seq->flag & SELECT) && (seq->type == SEQ_TYPE_IMAGE) && (seq->len > 1)) { /* remove seq so overlap tests don't conflict, * see seq_free_sequence below for the real free'ing */ BLI_remlink(ed->seqbasep, seq); @@ -1776,7 +1755,7 @@ static int sequencer_separate_images_exec(bContext *C, wmOperator *op) BLI_addtail(ed->seqbasep, seq_new); seq_new->start = start_ofs; - seq_new->type = SEQ_IMAGE; + seq_new->type = SEQ_TYPE_IMAGE; seq_new->len = 1; seq_new->endstill = step - 1; @@ -1847,7 +1826,7 @@ static int sequencer_meta_toggle_exec(bContext *C, wmOperator *UNUSED(op)) Sequence *last_seq = BKE_sequencer_active_get(scene); MetaStack *ms; - if (last_seq && last_seq->type == SEQ_META && last_seq->flag & SELECT) { + if (last_seq && last_seq->type == SEQ_TYPE_META && last_seq->flag & SELECT) { /* Enter Metastrip */ ms = MEM_mallocN(sizeof(MetaStack), "metastack"); BLI_addtail(&ed->metastack, ms); @@ -1925,7 +1904,7 @@ static int sequencer_meta_make_exec(bContext *C, wmOperator *op) seqm = alloc_sequence(ed->seqbasep, 1, 1); /* channel number set later */ strcpy(seqm->name + 2, "MetaStrip"); - seqm->type = SEQ_META; + seqm->type = SEQ_TYPE_META; seqm->flag = SELECT; seq = ed->seqbasep->first; @@ -1991,7 +1970,7 @@ static int sequencer_meta_separate_exec(bContext *C, wmOperator *UNUSED(op)) Sequence *seq, *last_seq = BKE_sequencer_active_get(scene); /* last_seq checks (ed == NULL) */ - if (last_seq == NULL || last_seq->type != SEQ_META) + if (last_seq == NULL || last_seq->type != SEQ_TYPE_META) return OPERATOR_CANCELLED; BLI_movelisttolist(ed->seqbasep, &last_seq->seqbase); @@ -2004,7 +1983,7 @@ static int sequencer_meta_separate_exec(bContext *C, wmOperator *UNUSED(op)) /* emtpy meta strip, delete all effects depending on it */ for (seq = ed->seqbasep->first; seq; seq = seq->next) - if ((seq->type & SEQ_EFFECT) && seq_depends_on_meta(seq, last_seq)) + if ((seq->type & SEQ_TYPE_EFFECT) && seq_depends_on_meta(seq, last_seq)) seq->flag |= SEQ_FLAG_DELETE; recurs_del_seq_flag(scene, ed->seqbasep, SEQ_FLAG_DELETE, 0); @@ -2475,14 +2454,14 @@ static int sequencer_swap_exec(bContext *C, wmOperator *op) // XXX - should be a generic function for (iseq = scene->ed->seqbasep->first; iseq; iseq = iseq->next) { - if ((iseq->type & SEQ_EFFECT) && (seq_is_parent(iseq, active_seq) || seq_is_parent(iseq, seq))) { + if ((iseq->type & SEQ_TYPE_EFFECT) && (seq_is_parent(iseq, active_seq) || seq_is_parent(iseq, seq))) { calc_sequence(scene, iseq); } } /* do this in a new loop since both effects need to be calculated first */ for (iseq = scene->ed->seqbasep->first; iseq; iseq = iseq->next) { - if ((iseq->type & SEQ_EFFECT) && (seq_is_parent(iseq, active_seq) || seq_is_parent(iseq, seq))) { + if ((iseq->type & SEQ_TYPE_EFFECT) && (seq_is_parent(iseq, active_seq) || seq_is_parent(iseq, seq))) { /* this may now overlap */ if (seq_test_overlap(ed->seqbasep, iseq) ) { shuffle_seq(ed->seqbasep, iseq, scene); @@ -2533,16 +2512,16 @@ static int sequencer_rendersize_exec(bContext *C, wmOperator *UNUSED(op)) if (active_seq->strip) { switch (active_seq->type) { - case SEQ_IMAGE: + case SEQ_TYPE_IMAGE: se = give_stripelem(active_seq, scene->r.cfra); break; - case SEQ_MOVIE: + case SEQ_TYPE_MOVIE: se = active_seq->strip->stripdata; break; - case SEQ_SCENE: - case SEQ_META: - case SEQ_RAM_SOUND: - case SEQ_HD_SOUND: + case SEQ_TYPE_SCENE: + case SEQ_TYPE_META: + case SEQ_TYPE_SOUND_RAM: + case SEQ_TYPE_SOUND_HD: default: break; } @@ -2580,7 +2559,7 @@ void SEQUENCER_OT_rendersize(wmOperatorType *ot) static void seq_copy_del_sound(Scene *scene, Sequence *seq) { - if (seq->type == SEQ_META) { + if (seq->type == SEQ_TYPE_META) { Sequence *iseq; for (iseq = seq->seqbase.first; iseq; iseq = iseq->next) { seq_copy_del_sound(scene, iseq); @@ -2665,7 +2644,7 @@ static int sequencer_paste_exec(bContext *C, wmOperator *UNUSED(op)) int ofs; Sequence *iseq; - deselect_all_seq(scene); + ED_sequencer_deselect_all(scene); ofs = scene->r.cfra - seqbase_clipboard_frame; seqbase_dupli_recursive(scene, NULL, &nseqbase, &seqbase_clipboard, SEQ_DUPE_UNIQUE_NAME); @@ -2921,7 +2900,7 @@ static int sequencer_change_effect_type_exec(bContext *C, wmOperator *op) /* free previous effect and init new effect */ struct SeqEffectHandle sh; - if ((seq->type & SEQ_EFFECT) == 0) { + if ((seq->type & SEQ_TYPE_EFFECT) == 0) { return OPERATOR_CANCELLED; } @@ -2968,7 +2947,7 @@ void SEQUENCER_OT_change_effect_type(struct wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - ot->prop = RNA_def_enum(ot->srna, "type", sequencer_prop_effect_types, SEQ_CROSS, "Type", "Sequencer effect type"); + ot->prop = RNA_def_enum(ot->srna, "type", sequencer_prop_effect_types, SEQ_TYPE_CROSS, "Type", "Sequencer effect type"); } static int sequencer_change_path_exec(bContext *C, wmOperator *op) @@ -2979,7 +2958,7 @@ static int sequencer_change_path_exec(bContext *C, wmOperator *op) Sequence *seq = BKE_sequencer_active_get(scene); const int is_relative_path = RNA_boolean_get(op->ptr, "relative_path"); - if (seq->type == SEQ_IMAGE) { + if (seq->type == SEQ_TYPE_IMAGE) { char directory[FILE_MAX]; const int len = RNA_property_collection_length(op->ptr, RNA_struct_find_property(op->ptr, "files")); StripElem *se; @@ -3049,7 +3028,7 @@ static int sequencer_change_path_invoke(bContext *C, wmOperator *op, wmEvent *UN RNA_string_set(op->ptr, "directory", seq->strip->dir); /* set default display depending on seq type */ - if (seq->type == SEQ_IMAGE) { + if (seq->type == SEQ_TYPE_IMAGE) { RNA_boolean_set(op->ptr, "filter_movie", FALSE); } else { diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h index fd536524c11..14d2ccdbbbe 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.h +++ b/source/blender/editors/space_sequencer/sequencer_intern.h @@ -61,7 +61,6 @@ void seq_rectf(struct Sequence *seq, struct rctf *rectf); void boundbox_seq(struct Scene *scene, struct rctf *rect); struct Sequence *find_nearest_seq(struct Scene *scene, struct View2D *v2d, int *hand, const int mval[2]); struct Sequence *find_neighboring_sequence(struct Scene *scene, struct Sequence *test, int lr, int sel); -void deselect_all_seq(struct Scene *scene); void recurs_sel_seq(struct Sequence *seqm); int seq_effect_find_selected(struct Scene *scene, struct Sequence *activeseq, int type, struct Sequence **selseq1, struct Sequence **selseq2, struct Sequence **selseq3, const char **error_str); @@ -139,6 +138,7 @@ void SEQUENCER_OT_select_grouped(struct wmOperatorType *ot); void SEQUENCER_OT_scene_strip_add(struct wmOperatorType *ot); void SEQUENCER_OT_movie_strip_add(struct wmOperatorType *ot); void SEQUENCER_OT_movieclip_strip_add(struct wmOperatorType *ot); +void SEQUENCER_OT_mask_strip_add(struct wmOperatorType *ot); void SEQUENCER_OT_sound_strip_add(struct wmOperatorType *ot); void SEQUENCER_OT_image_strip_add(struct wmOperatorType *ot); void SEQUENCER_OT_effect_strip_add(struct wmOperatorType *ot); @@ -174,7 +174,7 @@ struct ImBuf *make_zebra_view_from_ibuf(struct ImBuf * ibuf, float perc); struct ImBuf *make_histogram_view_from_ibuf(struct ImBuf * ibuf); /* sequencer_buttons.c */ - +void sequencer_buttons_register(struct ARegionType *art); void SEQUENCER_OT_properties(struct wmOperatorType *ot); #endif /* __SEQUENCER_INTERN_H__ */ diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c index 3a02c90f99a..79ecd9f7481 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.c +++ b/source/blender/editors/space_sequencer/sequencer_ops.c @@ -105,6 +105,7 @@ void sequencer_operatortypes(void) /* sequencer_add.c */ WM_operatortype_append(SEQUENCER_OT_scene_strip_add); WM_operatortype_append(SEQUENCER_OT_movieclip_strip_add); + WM_operatortype_append(SEQUENCER_OT_mask_strip_add); WM_operatortype_append(SEQUENCER_OT_movie_strip_add); WM_operatortype_append(SEQUENCER_OT_sound_strip_add); WM_operatortype_append(SEQUENCER_OT_image_strip_add); diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index 811a89b07a8..b03edfc61b9 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -58,6 +58,7 @@ #include "ED_types.h" #include "ED_screen.h" +#include "ED_sequencer.h" #include "UI_view2d.h" @@ -161,20 +162,20 @@ void select_surround_from_last(Scene *scene) } #endif - -static void UNUSED_FUNCTION(select_single_seq) (Scene * scene, Sequence * seq, int deselect_all) /* BRING BACK */ +void ED_sequencer_select_sequence_single(Scene * scene, Sequence * seq, int deselect_all) { Editing *ed = BKE_sequencer_editing_get(scene, FALSE); if (deselect_all) - deselect_all_seq(scene); + ED_sequencer_deselect_all(scene); + BKE_sequencer_active_set(scene, seq); - if ((seq->type == SEQ_IMAGE) || (seq->type == SEQ_MOVIE)) { + if ((seq->type == SEQ_TYPE_IMAGE) || (seq->type == SEQ_TYPE_MOVIE)) { if (seq->strip) BLI_strncpy(ed->act_imagedir, seq->strip->dir, FILE_MAXDIR); } - else if (seq->type == SEQ_SOUND) { + else if (seq->type == SEQ_TYPE_SOUND_RAM) { if (seq->strip) BLI_strncpy(ed->act_sounddir, seq->strip->dir, FILE_MAXDIR); } @@ -359,7 +360,7 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, wmEvent *event) else if (left_right) { /* use different logic for this */ float x; - deselect_all_seq(scene); + ED_sequencer_deselect_all(scene); UI_view2d_region_to_view(v2d, event->mval[0], event->mval[1], &x, NULL); SEQP_BEGIN (ed, seq) @@ -403,18 +404,18 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, wmEvent *event) act_orig = ed->act_seq; if (extend == 0 && linked_handle == 0) - deselect_all_seq(scene); + ED_sequencer_deselect_all(scene); if (seq) { BKE_sequencer_active_set(scene, seq); - if ((seq->type == SEQ_IMAGE) || (seq->type == SEQ_MOVIE)) { + if ((seq->type == SEQ_TYPE_IMAGE) || (seq->type == SEQ_TYPE_MOVIE)) { if (seq->strip) { BLI_strncpy(ed->act_imagedir, seq->strip->dir, FILE_MAXDIR); } } else - if (seq->type == SEQ_SOUND) { + if (seq->type == SEQ_TYPE_SOUND_RAM) { if (seq->strip) { BLI_strncpy(ed->act_sounddir, seq->strip->dir, FILE_MAXDIR); } @@ -442,7 +443,7 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, wmEvent *event) /* On Alt selection, select the strip and bordering handles */ if (linked_handle && !ELEM(hand, SEQ_SIDE_LEFT, SEQ_SIDE_RIGHT)) { - if (extend == 0) deselect_all_seq(scene); + if (extend == 0) ED_sequencer_deselect_all(scene); seq->flag |= SELECT; select_surrounding_handles(scene, seq); } @@ -458,13 +459,13 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, wmEvent *event) switch (sel_side) { case SEQ_SIDE_LEFT: if ((seq->flag & SEQ_LEFTSEL) && (neighbor->flag & SEQ_RIGHTSEL)) { - if (extend == 0) deselect_all_seq(scene); + if (extend == 0) ED_sequencer_deselect_all(scene); seq->flag |= SELECT; select_active_side(ed->seqbasep, SEQ_SIDE_LEFT, seq->machine, seq->startdisp); } else { - if (extend == 0) deselect_all_seq(scene); + if (extend == 0) ED_sequencer_deselect_all(scene); seq->flag |= SELECT; neighbor->flag |= SELECT; @@ -475,13 +476,13 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, wmEvent *event) break; case SEQ_SIDE_RIGHT: if ((seq->flag & SEQ_RIGHTSEL) && (neighbor->flag & SEQ_LEFTSEL)) { - if (extend == 0) deselect_all_seq(scene); + if (extend == 0) ED_sequencer_deselect_all(scene); seq->flag |= SELECT; select_active_side(ed->seqbasep, SEQ_SIDE_RIGHT, seq->machine, seq->startdisp); } else { - if (extend == 0) deselect_all_seq(scene); + if (extend == 0) ED_sequencer_deselect_all(scene); seq->flag |= SELECT; neighbor->flag |= SELECT; @@ -493,7 +494,7 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, wmEvent *event) } } else { - if (extend == 0) deselect_all_seq(scene); + if (extend == 0) ED_sequencer_deselect_all(scene); select_active_side(ed->seqbasep, sel_side, seq->machine, seq->startdisp); } } @@ -686,7 +687,7 @@ static int sequencer_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEv return OPERATOR_FINISHED; /* user error as with mesh?? */ if (extend == 0) - deselect_all_seq(scene); + ED_sequencer_deselect_all(scene); mouse_seq->flag |= SELECT; recurs_sel_seq(mouse_seq); @@ -929,11 +930,11 @@ static EnumPropertyItem sequencer_prop_select_grouped_types[] = { {0, NULL, 0, NULL, NULL} }; -#define SEQ_IS_SOUND(_seq) ((_seq->type & SEQ_SOUND) && !(_seq->type & SEQ_EFFECT)) +#define SEQ_IS_SOUND(_seq) ((_seq->type & SEQ_TYPE_SOUND_RAM) && !(_seq->type & SEQ_TYPE_EFFECT)) -#define SEQ_IS_EFFECT(_seq) (_seq->type & SEQ_EFFECT) +#define SEQ_IS_EFFECT(_seq) (_seq->type & SEQ_TYPE_EFFECT) -#define SEQ_USE_DATA(_seq) (ELEM(_seq->type, SEQ_SCENE, SEQ_MOVIECLIP) || SEQ_HAS_PATH(_seq)) +#define SEQ_USE_DATA(_seq) (ELEM3(_seq->type, SEQ_TYPE_SCENE, SEQ_TYPE_MOVIECLIP, SEQ_TYPE_MASK) || SEQ_HAS_PATH(_seq)) static short select_grouped_type(Editing *ed, Sequence *actseq) { @@ -1007,22 +1008,33 @@ static short select_grouped_data(Editing *ed, Sequence *actseq) } SEQ_END; } - else if (actseq->type == SEQ_SCENE) { + else if (actseq->type == SEQ_TYPE_SCENE) { Scene *sce = actseq->scene; SEQP_BEGIN (ed, seq) { - if (seq->type == SEQ_SCENE && seq->scene == sce) { + if (seq->type == SEQ_TYPE_SCENE && seq->scene == sce) { seq->flag |= SELECT; changed = TRUE; } } SEQ_END; } - else if (actseq->type == SEQ_MOVIECLIP) { + else if (actseq->type == SEQ_TYPE_MOVIECLIP) { MovieClip *clip = actseq->clip; SEQP_BEGIN (ed, seq) { - if (seq->type == SEQ_MOVIECLIP && seq->clip == clip) { + if (seq->type == SEQ_TYPE_MOVIECLIP && seq->clip == clip) { + seq->flag |= SELECT; + changed = TRUE; + } + } + SEQ_END; + } + else if (actseq->type == SEQ_TYPE_MASK) { + struct Mask *mask = actseq->mask; + SEQP_BEGIN (ed, seq) + { + if (seq->type == SEQ_TYPE_MASK && seq->mask == mask) { seq->flag |= SELECT; changed = TRUE; } @@ -1037,10 +1049,10 @@ static short select_grouped_effect(Editing *ed, Sequence *actseq) { Sequence *seq; short changed = FALSE; - short effects[SEQ_EFFECT_MAX + 1]; + short effects[SEQ_TYPE_EFFECT_MAX + 1]; int i; - for (i = 0; i <= SEQ_EFFECT_MAX; i++) + for (i = 0; i <= SEQ_TYPE_EFFECT_MAX; i++) effects[i] = FALSE; SEQP_BEGIN (ed, seq) @@ -1086,7 +1098,7 @@ static short select_grouped_effect_link(Editing *ed, Sequence *actseq) { Sequence *seq = NULL; short changed = FALSE; - short is_audio = ((actseq->type == SEQ_META) || SEQ_IS_SOUND(actseq)); + short is_audio = ((actseq->type == SEQ_TYPE_META) || SEQ_IS_SOUND(actseq)); int startdisp = actseq->startdisp; int enddisp = actseq->enddisp; int machine = actseq->machine; @@ -1108,7 +1120,7 @@ static short select_grouped_effect_link(Editing *ed, Sequence *actseq) /* Ignore all seqs of incompatible types (audio vs video). */ if ((seq->flag & SELECT) || (seq->startdisp >= enddisp) || (seq->enddisp < startdisp) || (!is_audio && SEQ_IS_SOUND(seq)) || - (is_audio && !((seq->type == SEQ_META) || SEQ_IS_SOUND(seq)))) + (is_audio && !((seq->type == SEQ_TYPE_META) || SEQ_IS_SOUND(seq)))) { continue; } diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c index 4168cb9ac77..b8bf764fabc 100644 --- a/source/blender/editors/space_sequencer/space_sequencer.c +++ b/source/blender/editors/space_sequencer/space_sequencer.c @@ -33,6 +33,7 @@ #include <stdio.h> #include "DNA_scene_types.h" +#include "DNA_mask_types.h" #include "MEM_guardedalloc.h" @@ -324,27 +325,43 @@ static void sequencer_main_area_draw(const bContext *C, ARegion *ar) /* ************* dropboxes ************* */ -static int image_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event)) +static int image_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) { + ARegion *ar = CTX_wm_region(C); + Scene *scene = CTX_data_scene(C); + int hand; + if (drag->type == WM_DRAG_PATH) if (ELEM(drag->icon, ICON_FILE_IMAGE, ICON_FILE_BLANK)) /* rule might not work? */ - return 1; + if (find_nearest_seq(scene, &ar->v2d, &hand, event->mval) == NULL) + return 1; + return 0; } -static int movie_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event)) +static int movie_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) { + ARegion *ar = CTX_wm_region(C); + Scene *scene = CTX_data_scene(C); + int hand; + if (drag->type == WM_DRAG_PATH) if (ELEM3(drag->icon, 0, ICON_FILE_MOVIE, ICON_FILE_BLANK)) /* rule might not work? */ - return 1; + if (find_nearest_seq(scene, &ar->v2d, &hand, event->mval) == NULL) + return 1; return 0; } -static int sound_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event)) +static int sound_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) { + ARegion *ar = CTX_wm_region(C); + Scene *scene = CTX_data_scene(C); + int hand; + if (drag->type == WM_DRAG_PATH) if (ELEM(drag->icon, ICON_FILE_SOUND, ICON_FILE_BLANK)) /* rule might not work? */ - return 1; + if (find_nearest_seq(scene, &ar->v2d, &hand, event->mval) == NULL) + return 1; return 0; } @@ -380,6 +397,29 @@ static void sequencer_dropboxes(void) /* ************* end drop *********** */ +const char *sequencer_context_dir[] = {"edit_mask", NULL}; + +static int sequencer_context(const bContext *C, const char *member, bContextDataResult *result) +{ + Scene *scene = CTX_data_scene(C); + + if (CTX_data_dir(member)) { + CTX_data_dir_set(result, sequencer_context_dir); + + return TRUE; + } + else if (CTX_data_equals(member, "edit_mask")) { + Sequence *seq_act = BKE_sequencer_active_get(scene); + if (seq_act && seq_act->type == SEQ_TYPE_MASK && seq_act->mask) { + CTX_data_id_pointer_set(result, &seq_act->mask->id); + } + return TRUE; + } + + return FALSE; +} + + /* add handlers, stuff you only do once or on area/region changes */ static void sequencer_header_area_init(wmWindowManager *UNUSED(wm), ARegion *ar) { @@ -461,6 +501,11 @@ static void sequencer_preview_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ switch (wmn->category) { + case NC_SCREEN: + if (wmn->data == ND_GPENCIL) { + ED_region_tag_redraw(ar); + } + break; case NC_SCENE: switch (wmn->data) { case ND_FRAME: @@ -482,6 +527,12 @@ static void sequencer_preview_area_listener(ARegion *ar, wmNotifier *wmn) break; } break; + + case NC_MASK: + if (wmn->action == NA_EDITED) { + ED_region_tag_redraw(ar); + } + break; } } @@ -504,6 +555,11 @@ static void sequencer_buttons_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ switch (wmn->category) { + case NC_SCREEN: + if (wmn->data == ND_GPENCIL) { + ED_region_tag_redraw(ar); + } + break; case NC_SCENE: switch (wmn->data) { case ND_FRAME: @@ -539,6 +595,7 @@ void ED_spacetype_sequencer(void) st->duplicate = sequencer_duplicate; st->operatortypes = sequencer_operatortypes; st->keymap = sequencer_keymap; + st->context = sequencer_context; st->dropboxes = sequencer_dropboxes; st->refresh = sequencer_refresh; @@ -559,7 +616,7 @@ void ED_spacetype_sequencer(void) art->init = sequencer_preview_area_init; art->draw = sequencer_preview_area_draw; art->listener = sequencer_preview_area_listener; - art->keymapflag = ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_ANIMATION; + art->keymapflag = ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_GPENCIL; BLI_addhead(&st->regiontypes, art); /* regions: listview/buttons */ @@ -571,6 +628,8 @@ void ED_spacetype_sequencer(void) art->init = sequencer_buttons_area_init; art->draw = sequencer_buttons_area_draw; BLI_addhead(&st->regiontypes, art); + + sequencer_buttons_register(art); /* regions: header */ art = MEM_callocN(sizeof(ARegionType), "spacetype sequencer region"); @@ -591,4 +650,3 @@ void ED_spacetype_sequencer(void) sequencer_view3d_cb = ED_view3d_draw_offscreen_imbuf_simple; } } - diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 0de7e2569c0..e51f7a312eb 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -557,7 +557,7 @@ static void draw_bone_solid_octahedral(void) /* *************** Armature drawing, bones ******************* */ -static void draw_bone_points(int dt, int armflag, unsigned int boneflag, int id) +static void draw_bone_points(const short dt, int armflag, unsigned int boneflag, int id) { /* Draw root point if we are not connected */ if ((boneflag & BONE_CONNECTED) == 0) { @@ -862,7 +862,7 @@ static void draw_sphere_bone_wire(float smat[][4], float imat[][4], } /* does wire only for outline selecting */ -static void draw_sphere_bone(int dt, int armflag, int boneflag, short constflag, unsigned int id, +static void draw_sphere_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id, bPoseChannel *pchan, EditBone *ebone) { GLUquadricObj *qobj; @@ -1100,7 +1100,7 @@ static void draw_line_bone(int armflag, int boneflag, short constflag, unsigned glPopMatrix(); } -static void draw_b_bone_boxes(int dt, bPoseChannel *pchan, float xwidth, float length, float zwidth) +static void draw_b_bone_boxes(const short dt, bPoseChannel *pchan, float xwidth, float length, float zwidth) { int segments = 0; @@ -1128,7 +1128,7 @@ static void draw_b_bone_boxes(int dt, bPoseChannel *pchan, float xwidth, float l } } -static void draw_b_bone(int dt, int armflag, int boneflag, short constflag, unsigned int id, +static void draw_b_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id, bPoseChannel *pchan, EditBone *ebone) { float xwidth, length, zwidth; @@ -1242,7 +1242,7 @@ static void draw_wire_bone_segments(bPoseChannel *pchan, Mat4 *bbones, float len } } -static void draw_wire_bone(int dt, int armflag, int boneflag, short constflag, unsigned int id, +static void draw_wire_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id, bPoseChannel *pchan, EditBone *ebone) { Mat4 *bbones = NULL; @@ -1293,7 +1293,7 @@ static void draw_wire_bone(int dt, int armflag, int boneflag, short constflag, u draw_wire_bone_segments(pchan, bbones, length, segments); } -static void draw_bone(int dt, int armflag, int boneflag, short constflag, unsigned int id, float length) +static void draw_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id, float length) { /* Draw a 3d octahedral bone, we use normalized space based on length, @@ -1364,7 +1364,7 @@ static void draw_bone(int dt, int armflag, int boneflag, short constflag, unsign } static void draw_custom_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, - int dt, int armflag, int boneflag, unsigned int id, float length) + const short dt, int armflag, int boneflag, unsigned int id, float length) { if (ob == NULL) return; @@ -1656,8 +1656,9 @@ static void bone_matrix_translate_y(float mat[][4], float y) } /* assumes object is Armature with pose */ -static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, - const short is_ghost, const short is_outline) +static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, + const short dt, const unsigned char ob_wire_col[4], + const short do_const_color, const short is_outline) { RegionView3D *rv3d = ar->regiondata; Object *ob = base->object; @@ -1752,8 +1753,13 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, if (bone == arm->act_bone) flag |= BONE_DRAW_ACTIVE; - /* set color-set to use */ - set_pchan_colorset(ob, pchan); + if (do_const_color) { + /* keep color */ + } + else { + /* set color-set to use */ + set_pchan_colorset(ob, pchan); + } if (use_custom) { /* if drawwire, don't try to draw in solid */ @@ -1827,20 +1833,13 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, } /* prepare colors */ - if (is_ghost) { + if (do_const_color) { /* 13 October 2009, Disabled this to make ghosting show the right colors (Aligorith) */ } - else if (arm->flag & ARM_POSEMODE) + else if (arm->flag & ARM_POSEMODE) set_pchan_colorset(ob, pchan); else { - if ((scene->basact) == base) { - if (base->flag & (SELECT + BA_WAS_SEL)) UI_ThemeColor(TH_ACTIVE); - else UI_ThemeColor(TH_WIRE); - } - else { - if (base->flag & (SELECT + BA_WAS_SEL)) UI_ThemeColor(TH_SELECT); - else UI_ThemeColor(TH_WIRE); - } + glColor3ubv(ob_wire_col); } /* catch exception for bone with hidden parent */ @@ -1956,7 +1955,12 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, /* extra draw service for pose mode */ /* set color-set to use */ - set_pchan_colorset(ob, pchan); + if (do_const_color) { + /* keep color */ + } + else { + set_pchan_colorset(ob, pchan); + } if ((pchan->custom) && !(arm->flag & ARM_NO_CUSTOM)) { /* custom bone shapes should not be drawn here! */ @@ -1991,20 +1995,35 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, glDisable(GL_CULL_FACE); /* draw DoFs */ - if (arm->flag & ARM_POSEMODE) - draw_pose_dofs(ob); + if (arm->flag & ARM_POSEMODE) { + if (((base->flag & OB_FROMDUPLI) == 0)) { + draw_pose_dofs(ob); + } + } /* finally names and axes */ - if ((arm->flag & (ARM_DRAWNAMES | ARM_DRAWAXES)) && (is_outline == 0)) { + if ((arm->flag & (ARM_DRAWNAMES | ARM_DRAWAXES)) && + (is_outline == 0) && + ((base->flag & OB_FROMDUPLI) == 0)) + { /* patch for several 3d cards (IBM mostly) that crash on GL_SELECT with text drawing */ if ((G.f & G_PICKSEL) == 0) { float vec[3]; - + unsigned char col[4]; - float col_f[4]; - glGetFloatv(GL_CURRENT_COLOR, col_f); /* in case this is not set below */ - rgb_float_to_uchar(col, col_f); - col[3] = 255; + if (do_const_color) { + /* so we can draw bone names in current const color */ + float tcol[4]; + glGetFloatv(GL_CURRENT_COLOR, tcol); + rgb_float_to_uchar(col, tcol); + col[3] = 255; + } + else { + col[0] = ob_wire_col[0]; + col[1] = ob_wire_col[1]; + col[2] = ob_wire_col[2]; + col[3] = 255; + } if (v3d->zbuf) glDisable(GL_DEPTH_TEST); @@ -2063,7 +2082,7 @@ static void get_matrix_editbone(EditBone *eBone, float bmat[][4]) add_v3_v3(bmat[3], eBone->head); } -static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) +static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt) { RegionView3D *rv3d = ar->regiondata; EditBone *eBone; @@ -2353,7 +2372,7 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, ARegion *ar, Base BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); BKE_pose_where_is(scene, ob); - draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE, FALSE); + draw_pose_bones(scene, v3d, ar, base, OB_WIRE, NULL, TRUE, FALSE); } glDisable(GL_BLEND); if (v3d->zbuf) glEnable(GL_DEPTH_TEST); @@ -2432,7 +2451,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, ARegion *ar, Base * BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); BKE_pose_where_is(scene, ob); - draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE, FALSE); + draw_pose_bones(scene, v3d, ar, base, OB_WIRE, NULL, TRUE, FALSE); } glDisable(GL_BLEND); if (v3d->zbuf) glEnable(GL_DEPTH_TEST); @@ -2502,7 +2521,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base) if (CFRA != cfrao) { BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); BKE_pose_where_is(scene, ob); - draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE, FALSE); + draw_pose_bones(scene, v3d, ar, base, OB_WIRE, NULL, TRUE, FALSE); } } @@ -2517,7 +2536,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base) if (CFRA != cfrao) { BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); BKE_pose_where_is(scene, ob); - draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE, FALSE); + draw_pose_bones(scene, v3d, ar, base, OB_WIRE, NULL, TRUE, FALSE); } } } @@ -2537,8 +2556,11 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base) /* ********************************** Armature Drawing - Main ************************* */ -/* called from drawobject.c, return 1 if nothing was drawn */ -int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag, const short is_outline) +/* called from drawobject.c, return 1 if nothing was drawn + * (ob_wire_col == NULL) when drawing ghost */ +int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, + const short dt, const short dflag, const unsigned char ob_wire_col[4], + const short is_outline) { Object *ob = base->object; bArmature *arm = ob->data; @@ -2549,11 +2571,8 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, in if (dt > OB_WIRE && !ELEM(arm->drawtype, ARM_LINE, ARM_WIRE)) { /* we use color for solid lighting */ - glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); - glEnable(GL_COLOR_MATERIAL); - glColor3ub(255, 255, 255); // clear spec - glDisable(GL_COLOR_MATERIAL); - + const float white[4] = {1.0f, 1.0f, 1.0f, 1.0f}; + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); // only for lighting... } @@ -2594,7 +2613,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, in if (arm->ghostep) draw_ghost_poses(scene, v3d, ar, base); } - if ((flag & DRAW_SCENESET) == 0) { + if ((dflag & DRAW_SCENESET) == 0) { if (ob == OBACT) arm->flag |= ARM_POSEMODE; else if (OBACT && (OBACT->mode & OB_MODE_WEIGHT_PAINT)) { @@ -2605,7 +2624,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, in } } } - draw_pose_bones(scene, v3d, ar, base, dt, FALSE, is_outline); + draw_pose_bones(scene, v3d, ar, base, dt, ob_wire_col, (dflag & DRAW_CONSTCOLOR), is_outline); arm->flag &= ~ARM_POSEMODE; if (ob->mode & OB_MODE_POSE) diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index de1d9f22667..19696b2b0e0 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -1015,14 +1015,14 @@ void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d, Object *ob, DerivedMesh *d if (ob && ob->mode & OB_MODE_WEIGHT_PAINT) { if (do_light) { + const float spec[4] = {0.47f, 0.47f, 0.47f, 0.47f}; + /* enforce default material settings */ GPU_enable_material(0, NULL); /* but set default spec */ glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); - glEnable(GL_COLOR_MATERIAL); /* according manpages needed */ - glColor3ub(120, 120, 120); - glDisable(GL_COLOR_MATERIAL); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); /* diffuse */ glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index aec7913e80d..b92d3d9d24c 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -333,7 +333,7 @@ static void view3d_project_short_clip_persmat(ARegion *ar, const float vec[3], s /* check for glsl drawing */ -int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt) +int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, const short dt) { if (!GPU_glsl_support()) return 0; @@ -1189,14 +1189,17 @@ static void draw_transp_spot_volume(Lamp *la, float x, float z) glCullFace(GL_BACK); } -static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) +static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, + const short dt, const short dflag, const unsigned char ob_wire_col[4]) { Object *ob = base->object; const float pixsize = ED_view3d_pixel_size(rv3d, ob->obmat[3]); Lamp *la = ob->data; float vec[3], lvec[3], vvec[3], circrad, x, y, z; float lampsize; - float imat[4][4], curcol[4]; + float imat[4][4]; + + unsigned char curcol[4]; unsigned char col[4]; /* cone can't be drawn for duplicated lamps, because duplilist would be freed to */ /* the moment of view3d_draw_transp() call */ @@ -1210,7 +1213,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, if (drawcone && !v3d->transp) { /* in this case we need to draw delayed */ - add_view3d_after(&v3d->afterdraw_transp, base, flag); + ED_view3d_after_add(&v3d->afterdraw_transp, base, dflag); return; } @@ -1228,17 +1231,23 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, /* lamp center */ copy_v3_v3(vec, ob->obmat[3]); - - /* for AA effects */ - glGetFloatv(GL_CURRENT_COLOR, curcol); - curcol[3] = 0.6; - glColor4fv(curcol); - + + if ((dflag & DRAW_CONSTCOLOR) == 0) { + /* for AA effects */ + curcol[0] = ob_wire_col[0]; + curcol[1] = ob_wire_col[1]; + curcol[2] = ob_wire_col[2]; + curcol[3] = 154; + glColor4ubv(curcol); + } + if (lampsize > 0.0f) { - if (ob->id.us > 1) { - if (ob == OBACT || (ob->flag & SELECT)) glColor4ub(0x88, 0xFF, 0xFF, 155); - else glColor4ub(0x77, 0xCC, 0xCC, 155); + if ((dflag & DRAW_CONSTCOLOR) == 0) { + if (ob->id.us > 1) { + if (ob == OBACT || (ob->flag & SELECT)) glColor4ub(0x88, 0xFF, 0xFF, 155); + else glColor4ub(0x77, 0xCC, 0xCC, 155); + } } /* Inner Circle */ @@ -1248,8 +1257,10 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, drawcircball(GL_POLYGON, vec, lampsize, imat); /* restore */ - if (ob->id.us > 1) - glColor4fv(curcol); + if ((dflag & DRAW_CONSTCOLOR) == 0) { + if (ob->id.us > 1) + glColor4ubv(curcol); + } /* Outer circle */ circrad = 3.0f * lampsize; @@ -1481,9 +1492,10 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, glDisable(GL_BLEND); - /* restore for drawing extra stuff */ - glColor3fv(curcol); - + if ((dflag & DRAW_CONSTCOLOR) == 0) { + /* restore for drawing extra stuff */ + glColor3ubv(ob_wire_col); + } } static void draw_limit_line(float sta, float end, unsigned int col) @@ -1516,7 +1528,7 @@ static void draw_focus_cross(float dist, float size) } #ifdef VIEW3D_CAMERA_BORDER_HACK -float view3d_camera_border_hack_col[4]; +unsigned char view3d_camera_border_hack_col[3]; short view3d_camera_border_hack_test = FALSE; #endif @@ -1546,20 +1558,20 @@ static void draw_bundle_sphere(void) } static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D *v3d, - MovieClip *clip, MovieTrackingObject *tracking_object, int flag, - int *global_track_index, int draw_selected) + MovieClip *clip, MovieTrackingObject *tracking_object, + const short dflag, int *global_track_index, int draw_selected) { MovieTracking *tracking = &clip->tracking; MovieTrackingTrack *track; float mat[4][4], imat[4][4]; unsigned char col[4], scol[4]; int tracknr = *global_track_index; - ListBase *tracksbase = BKE_tracking_object_tracks(tracking, tracking_object); + ListBase *tracksbase = BKE_tracking_object_get_tracks(tracking, tracking_object); UI_GetThemeColor4ubv(TH_TEXT, col); UI_GetThemeColor4ubv(TH_SELECT, scol); - BKE_get_tracking_mat(scene, base->object, mat); + BKE_tracking_get_camera_object_matrix(scene, base->object, mat); glPushMatrix(); @@ -1575,7 +1587,7 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D else { float obmat[4][4]; - BKE_tracking_get_interpolated_camera(tracking, tracking_object, scene->r.cfra, obmat); + BKE_tracking_camera_get_reconstructed_interpolate(tracking, tracking_object, scene->r.cfra, obmat); invert_m4_m4(imat, obmat); glMultMatrixf(imat); @@ -1590,7 +1602,7 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D if ((track->flag & TRACK_HAS_BUNDLE) == 0) continue; - if (flag & DRAW_PICKING) + if (dflag & DRAW_PICKING) glLoadName(base->selcol + (tracknr << 16)); glPushMatrix(); @@ -1656,7 +1668,7 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D glPopMatrix(); - if ((flag & DRAW_PICKING) == 0 && (v3d->flag2 & V3D_SHOW_BUNDLENAME)) { + if ((dflag & DRAW_PICKING) == 0 && (v3d->flag2 & V3D_SHOW_BUNDLENAME)) { float pos[3]; unsigned char tcol[4]; @@ -1670,10 +1682,10 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D tracknr++; } - if ((flag & DRAW_PICKING) == 0) { + if ((dflag & DRAW_PICKING) == 0) { if ((v3d->flag2 & V3D_SHOW_CAMERAPATH) && (tracking_object->flag & TRACKING_OBJECT_CAMERA)) { MovieTrackingReconstruction *reconstruction; - reconstruction = BKE_tracking_object_reconstruction(tracking, tracking_object); + reconstruction = BKE_tracking_object_get_reconstruction(tracking, tracking_object); if (reconstruction->camnr) { MovieReconstructedCamera *camera = reconstruction->cameras; @@ -1701,11 +1713,11 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D } static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, MovieClip *clip, - int flag, int draw_selected) + const short dflag, const unsigned char ob_wire_col[4], + int draw_selected) { MovieTracking *tracking = &clip->tracking; MovieTrackingObject *tracking_object; - float curcol[4]; int global_track_index = 1; if ((v3d->flag2 & V3D_SHOW_RECONSTRUCTION) == 0) @@ -1714,8 +1726,6 @@ static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, if (v3d->flag2 & V3D_RENDER_OVERRIDE) return; - glGetFloatv(GL_CURRENT_COLOR, curcol); - glEnable(GL_LIGHTING); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glEnable(GL_COLOR_MATERIAL); @@ -1724,7 +1734,7 @@ static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, tracking_object = tracking->objects.first; while (tracking_object) { draw_viewport_object_reconstruction(scene, base, v3d, clip, tracking_object, - flag, &global_track_index, draw_selected); + dflag, &global_track_index, draw_selected); tracking_object = tracking_object->next; } @@ -1734,14 +1744,17 @@ static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); - glColor4fv(curcol); + if ((dflag & DRAW_CONSTCOLOR) == 0) { + glColor3ubv(ob_wire_col); + } - if (flag & DRAW_PICKING) + if (dflag & DRAW_PICKING) glLoadName(base->selcol); } /* flag similar to draw_object() */ -static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int flag) +static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, + const short dflag, const unsigned char ob_wire_col[4]) { /* a standing up pyramid with (0,0,0) as top */ Camera *cam; @@ -1755,13 +1768,22 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base /* draw data for movie clip set as active for scene */ if (clip) { - draw_viewport_reconstruction(scene, base, v3d, clip, flag, FALSE); - draw_viewport_reconstruction(scene, base, v3d, clip, flag, TRUE); + draw_viewport_reconstruction(scene, base, v3d, clip, dflag, ob_wire_col, FALSE); + draw_viewport_reconstruction(scene, base, v3d, clip, dflag, ob_wire_col, TRUE); } #ifdef VIEW3D_CAMERA_BORDER_HACK if (is_view && !(G.f & G_PICKSEL)) { - glGetFloatv(GL_CURRENT_COLOR, view3d_camera_border_hack_col); + if ((dflag & DRAW_CONSTCOLOR) == 0) { + view3d_camera_border_hack_col[0] = ob_wire_col[0]; + view3d_camera_border_hack_col[1] = ob_wire_col[1]; + view3d_camera_border_hack_col[2] = ob_wire_col[2]; + } + else { + float col[4]; + glGetFloatv(GL_CURRENT_COLOR, col); + rgb_float_to_uchar(view3d_camera_border_hack_col, col); + } view3d_camera_border_hack_test = TRUE; return; } @@ -1829,7 +1851,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base glEnd(); } - if (flag == 0) { + if (dflag == 0) { if (cam->flag & (CAM_SHOWLIMITS + CAM_SHOWMIST)) { float nobmat[4][4]; World *wrld; @@ -2451,7 +2473,7 @@ static void draw_dm_verts__mapFunc(void *userData, int index, const float co[3], } static void draw_dm_verts(BMEditMesh *em, DerivedMesh *dm, int sel, BMVert *eve_act, - RegionView3D *rv3d) + RegionView3D *rv3d) { drawDMVerts_userData data; data.sel = sel; @@ -2953,7 +2975,7 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS else \ BLI_snprintf(numstr, sizeof(numstr), conv_float, area); \ view3d_cached_text_draw_add(vmid, numstr, 0, txt_flag, col); \ - } + } (void)0 UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEAREA, col); @@ -2974,16 +2996,16 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS copy_v3_v3(v1, l[0]->v->co); copy_v3_v3(v2, l[1]->v->co); copy_v3_v3(v3, l[2]->v->co); + add_v3_v3(vmid, v1); + add_v3_v3(vmid, v2); + add_v3_v3(vmid, v3); + n += 3; if (do_global) { mul_mat3_m4_v3(ob->obmat, v1); mul_mat3_m4_v3(ob->obmat, v2); mul_mat3_m4_v3(ob->obmat, v3); } area += area_tri_v3(v1, v2, v3); - add_v3_v3(vmid, v1); - add_v3_v3(vmid, v2); - add_v3_v3(vmid, v3); - n += 3; } if (f) { @@ -3030,16 +3052,15 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, BMEditMesh *em, UnitS mul_mat3_m4_v3(ob->obmat, v3); angle = angle_v3v3v3(v1, v2, v3); - interp_v3_v3v3(fvec, vmid, v2, 0.8f); copy_v3_v3(v1, v2); copy_v3_v3(v2, v3); } else { angle = angle_v3v3v3(loop->prev->v->co, loop->v->co, loop->next->v->co); - interp_v3_v3v3(fvec, vmid, loop->v->co, 0.8f); } BLI_snprintf(numstr, sizeof(numstr), "%.3f", is_rad ? angle : RAD2DEGF(angle)); + interp_v3_v3v3(fvec, vmid, loop->v->co, 0.8f); view3d_cached_text_draw_add(fvec, numstr, 0, txt_flag, col); } } @@ -3125,7 +3146,7 @@ static DMDrawOption draw_em_fancy__setGLSLFaceOpts(void *userData, int index) } static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, - Object *ob, BMEditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, int dt) + Object *ob, BMEditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, const short dt) { Mesh *me = ob->data; @@ -3332,7 +3353,8 @@ static void draw_mesh_object_outline(View3D *v3d, Object *ob, DerivedMesh *dm) } } -static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) +static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base, + const short dt, const short dflag) { Object *ob = base->object; Mesh *me = ob->data; @@ -3418,10 +3440,12 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D else if (dt == OB_SOLID) { if (draw_flags & DRAW_MODIFIERS_PREVIEW) { /* for object selection draws no shade */ - if (flag & (DRAW_PICKING | DRAW_CONSTCOLOR)) { + if (dflag & (DRAW_PICKING | DRAW_CONSTCOLOR)) { dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); } else { + const float spec[4] = {0.47f, 0.47f, 0.47f, 0.47f}; + /* draw outline */ if ( (v3d->flag & V3D_SELECT_OUTLINE) && ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) && @@ -3439,9 +3463,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D /* set default spec */ glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); - glEnable(GL_COLOR_MATERIAL); /* according manpages needed */ - glColor3ub(120, 120, 120); - glDisable(GL_COLOR_MATERIAL); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); /* diffuse */ glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glEnable(GL_LIGHTING); @@ -3520,7 +3542,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D UI_ThemeColor(TH_GROUP_ACTIVE); else if (ob->flag & OB_FROMGROUP) UI_ThemeColorShade(TH_GROUP_ACTIVE, -16); - else if (flag != DRAW_CONSTCOLOR) + else if (dflag != DRAW_CONSTCOLOR) UI_ThemeColor(is_obact ? TH_ACTIVE : TH_SELECT); else glColor3ub(80, 80, 80); @@ -3529,7 +3551,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D if (ob->flag & OB_FROMGROUP) UI_ThemeColor(TH_GROUP); else { - if (ob->dtx & OB_DRAWWIRE && flag == DRAW_CONSTCOLOR) + if (ob->dtx & OB_DRAWWIRE && dflag == DRAW_CONSTCOLOR) glColor3ub(80, 80, 80); else UI_ThemeColor(TH_WIRE); @@ -3586,7 +3608,8 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D } /* returns 1 if nothing was drawn, for detecting to draw an object center */ -static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) +static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base, + const short dt, const short dflag) { Object *ob = base->object; Object *obedit = scene->obedit; @@ -3650,7 +3673,7 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D (check_alpha) ? &do_alpha_after : NULL); } - draw_mesh_fancy(scene, ar, v3d, rv3d, base, dt, flag); + draw_mesh_fancy(scene, ar, v3d, rv3d, base, dt, dflag); GPU_end_object_materials(); @@ -3658,20 +3681,20 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D } } - if ((flag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0) { + if ((dflag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0) { /* GPU_begin_object_materials checked if this is needed */ if (do_alpha_after) { if (ob->dtx & OB_DRAWXRAY) { - add_view3d_after(&v3d->afterdraw_xraytransp, base, flag); + ED_view3d_after_add(&v3d->afterdraw_xraytransp, base, dflag); } else { - add_view3d_after(&v3d->afterdraw_transp, base, flag); + ED_view3d_after_add(&v3d->afterdraw_transp, base, dflag); } } else if (ob->dtx & OB_DRAWXRAY && ob->dtx & OB_DRAWTRANSP) { /* special case xray+transp when alpha is 1.0, without this the object vanishes */ if (v3d->xray == 0 && v3d->transp == 0) { - add_view3d_after(&v3d->afterdraw_xray, base, flag); + ED_view3d_after_add(&v3d->afterdraw_xray, base, dflag); } } } @@ -3779,17 +3802,15 @@ static int drawDispListwire(ListBase *dlbase) return 0; } -static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) +static void drawDispListsolid(ListBase *lb, Object *ob, + const unsigned char ob_wire_col[4], int use_glsl) { DispList *dl; GPUVertexAttribs gattribs; - float *data, curcol[4]; + float *data; float *ndata; if (lb == NULL) return; - - /* for drawing wire */ - glGetFloatv(GL_CURRENT_COLOR, curcol); glEnable(GL_LIGHTING); glEnableClientState(GL_VERTEX_ARRAY); @@ -3812,7 +3833,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) int nr; glDisable(GL_LIGHTING); - glColor3fv(curcol); + glColor3ubv(ob_wire_col); // glVertexPointer(3, GL_FLOAT, 0, dl->verts); // glDrawArrays(GL_LINE_STRIP, 0, dl->nr); @@ -3846,7 +3867,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) case DL_SURF: if (dl->index) { - GPU_enable_material(dl->col + 1, (glsl) ? &gattribs : NULL); + GPU_enable_material(dl->col + 1, (use_glsl) ? &gattribs : NULL); if (dl->rt & CU_SMOOTH) glShadeModel(GL_SMOOTH); else glShadeModel(GL_FLAT); @@ -3860,11 +3881,11 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) break; case DL_INDEX3: - GPU_enable_material(dl->col + 1, (glsl) ? &gattribs : NULL); + GPU_enable_material(dl->col + 1, (use_glsl) ? &gattribs : NULL); glVertexPointer(3, GL_FLOAT, 0, dl->verts); - /* voor polys only one normal needed */ + /* for polys only one normal needed */ if (index3_nors_incr) { glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, 0, dl->nors); @@ -3880,7 +3901,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl) break; case DL_INDEX4: - GPU_enable_material(dl->col + 1, (glsl) ? &gattribs : NULL); + GPU_enable_material(dl->col + 1, (use_glsl) ? &gattribs : NULL); glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3, GL_FLOAT, 0, dl->verts); @@ -3906,7 +3927,7 @@ static void drawCurveDMWired(Object *ob) } /* return 1 when nothing was drawn */ -static int drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt) +static int drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, const short dt) { Object *ob = base->object; DerivedMesh *dm = ob->derivedFinal; @@ -3938,7 +3959,8 @@ static int drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d, B } /* returns 1 when nothing was drawn */ -static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt) +static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, + const short dt, const unsigned char ob_wire_col[4]) { Object *ob = base->object; ListBase *lb = NULL; @@ -3986,12 +4008,12 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas else { if (draw_glsl_material(scene, ob, v3d, dt)) { GPU_begin_object_materials(v3d, rv3d, scene, ob, 1, NULL); - drawDispListsolid(lb, ob, 1); + drawDispListsolid(lb, ob, ob_wire_col, TRUE); GPU_end_object_materials(); } else { GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL); - drawDispListsolid(lb, ob, 0); + drawDispListsolid(lb, ob, ob_wire_col, FALSE); GPU_end_object_materials(); } if (cu->editnurb && cu->bevobj == NULL && cu->taperobj == NULL && cu->ext1 == 0.0f && cu->ext2 == 0.0f) { @@ -4023,12 +4045,12 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas if (draw_glsl_material(scene, ob, v3d, dt)) { GPU_begin_object_materials(v3d, rv3d, scene, ob, 1, NULL); - drawDispListsolid(lb, ob, 1); + drawDispListsolid(lb, ob, ob_wire_col, TRUE); GPU_end_object_materials(); } else { GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL); - drawDispListsolid(lb, ob, 0); + drawDispListsolid(lb, ob, ob_wire_col, FALSE); GPU_end_object_materials(); } } @@ -4047,12 +4069,12 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas if (draw_glsl_material(scene, ob, v3d, dt)) { GPU_begin_object_materials(v3d, rv3d, scene, ob, 1, NULL); - drawDispListsolid(lb, ob, 1); + drawDispListsolid(lb, ob, ob_wire_col, TRUE); GPU_end_object_materials(); } else { GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL); - drawDispListsolid(lb, ob, 0); + drawDispListsolid(lb, ob, ob_wire_col, FALSE); GPU_end_object_materials(); } } @@ -5564,7 +5586,8 @@ static void draw_editnurb(Object *ob, Nurb *nurb, int sel) } } -static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, Nurb *nurb, int dt) +static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, Nurb *nurb, + const short dt, const unsigned char ob_wire_col[4]) { ToolSettings *ts = scene->toolsettings; Object *ob = base->object; @@ -5573,10 +5596,13 @@ static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, BevList *bl; short hide_handles = (cu->drawflag & CU_HIDE_HANDLES); int index; + unsigned char wire_col[3]; /* DispList */ - UI_ThemeColor(TH_WIRE); - drawDispList(scene, v3d, rv3d, base, dt); + UI_GetThemeColor3ubv(TH_WIRE, wire_col); + glColor3ubv(wire_col); + + drawDispList(scene, v3d, rv3d, base, dt, ob_wire_col); if (v3d->zbuf) glDisable(GL_DEPTH_TEST); @@ -5888,7 +5914,8 @@ static void drawcone(const float vec[3], float radius, float height, float tmat[ glEnd(); } /* return 1 if nothing was drawn */ -static int drawmball(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt) +static int drawmball(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, + const short dt, const unsigned char ob_wire_col[4]) { Object *ob = base->object; MetaBall *mb; @@ -5899,13 +5926,19 @@ static int drawmball(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, mb = ob->data; if (mb->editelems) { - UI_ThemeColor(TH_WIRE); - if ((G.f & G_PICKSEL) == 0) drawDispList(scene, v3d, rv3d, base, dt); + if ((G.f & G_PICKSEL) == 0) { + unsigned char wire_col[3]; + UI_GetThemeColor3ubv(TH_WIRE, wire_col); + glColor3ubv(wire_col); + + drawDispList(scene, v3d, rv3d, base, dt, wire_col); + } ml = mb->editelems->first; } else { - if ((base->flag & OB_FROMDUPLI) == 0) - drawDispList(scene, v3d, rv3d, base, dt); + if ((base->flag & OB_FROMDUPLI) == 0) { + drawDispList(scene, v3d, rv3d, base, dt, ob_wire_col); + } ml = mb->elems.first; } @@ -6277,7 +6310,8 @@ static void drawtexspace(Object *ob) } /* draws wire outline */ -static void drawObjectSelect(Scene *scene, View3D *v3d, ARegion *ar, Base *base) +static void drawObjectSelect(Scene *scene, View3D *v3d, ARegion *ar, Base *base, + const unsigned char ob_wire_col[4]) { RegionView3D *rv3d = ar->regiondata; Object *ob = base->object; @@ -6316,7 +6350,7 @@ static void drawObjectSelect(Scene *scene, View3D *v3d, ARegion *ar, Base *base) } else if (ob->type == OB_ARMATURE) { if (!(ob->mode & OB_MODE_POSE && base == scene->basact)) - draw_armature(scene, v3d, ar, base, OB_WIRE, FALSE, TRUE); + draw_armature(scene, v3d, ar, base, OB_WIRE, FALSE, ob_wire_col, TRUE); } glLineWidth(1.0); @@ -6408,19 +6442,13 @@ static void draw_hooks(Object *ob) } } -static void drawRBpivot(bRigidBodyJointConstraint *data) +static void drawRBpivot(bRigidBodyJointConstraint *data, const unsigned char ob_wire_col[4]) { const char *axis_str[3] = {"px", "py", "pz"}; int axis; float mat[4][4]; /* color */ - float curcol[4]; - unsigned char tcol[4]; - - glGetFloatv(GL_CURRENT_COLOR, curcol); - rgb_float_to_uchar(tcol, curcol); - tcol[3] = 255; eul_to_mat4(mat, &data->axX); glLineWidth(4.0f); @@ -6439,14 +6467,89 @@ static void drawRBpivot(bRigidBodyJointConstraint *data) glVertex3fv(v); glEnd(); - view3d_cached_text_draw_add(v, axis_str[axis], 0, V3D_CACHE_TEXT_ASCII, tcol); + view3d_cached_text_draw_add(v, axis_str[axis], 0, V3D_CACHE_TEXT_ASCII, ob_wire_col); } glLineWidth(1.0f); setlinestyle(0); } +static void draw_object_wire_color(Scene *scene, Base *base, unsigned char r_ob_wire_col[4], + const int warning_recursive) +{ + Object *ob = base->object; + int colindex = 0; + + /* confusing logic here, there are 2 methods of setting the color + * 'colortab[colindex]' and 'theme_id', colindex overrides theme_id. + * + * note: no theme yet for 'colindex' */ + int theme_id = TH_WIRE; + int theme_shade = 0; + + if ((scene->obedit == NULL) && + (G.moving & G_TRANSFORM_OBJ) && + (base->flag & (SELECT + BA_WAS_SEL))) + { + theme_id = TH_TRANSFORM; + } + else { + /* Sets the 'colindex' */ + if (ob->id.lib) { + colindex = (base->flag & (SELECT + BA_WAS_SEL)) ? 4 : 3; + } + else if (warning_recursive == 1) { + if (base->flag & (SELECT + BA_WAS_SEL)) { + colindex = (scene->basact == base) ? 8 : 7; + } + else { + colindex = 6; + } + } + /* Sets the 'theme_id' or fallback to wire */ + else { + if (ob->flag & OB_FROMGROUP) { + if (base->flag & (SELECT + BA_WAS_SEL)) { + /* uses darker active color for non-active + selected*/ + theme_id = TH_GROUP_ACTIVE; + + if (scene->basact != base) { + theme_shade = -16; + } + } + else { + theme_id = TH_GROUP; + } + } + else { + if (base->flag & (SELECT + BA_WAS_SEL)) { + theme_id = scene->basact == base ? TH_ACTIVE : TH_SELECT; + } + else { + if (ob->type == OB_LAMP) theme_id = TH_LAMP; + else if (ob->type == OB_SPEAKER) theme_id = TH_SPEAKER; + else if (ob->type == OB_CAMERA) theme_id = TH_CAMERA; + else if (ob->type == OB_EMPTY) theme_id = TH_EMPTY; + /* fallback to TH_WIRE */ + } + } + } + } + + /* finally set the color */ + if (colindex == 0) { + if (theme_shade == 0) UI_GetThemeColor3ubv(theme_id, r_ob_wire_col); + else UI_GetThemeColorShade3ubv(theme_id, theme_shade, r_ob_wire_col); + } + else { + cpack_cpy_3ub(r_ob_wire_col, colortab[colindex]); + } + + /* no reason to use this but some functions take col[4] */ + r_ob_wire_col[3] = 255; +} + /* flag can be DRAW_PICKING and/or DRAW_CONSTCOLOR, DRAW_SCENESET */ -void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) +void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short dflag) { static int warning_recursive = 0; ModifierData *md = NULL; @@ -6455,7 +6558,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) RegionView3D *rv3d = ar->regiondata; float vec1[3], vec2[3]; unsigned int col = 0; - int /*sel, drawtype,*/ colindex = 0; + unsigned char _ob_wire_col[4]; /* dont initialize this */ + unsigned char *ob_wire_col = NULL; /* dont initialize this, use NULL crashes as a way to find invalid use */ int i, selstart, selend, empty_object = 0; short dt, dtx, zbufoff = 0; const short is_obact = (ob == OBACT); @@ -6479,12 +6583,12 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) return; /* xray delay? */ - if ((flag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0) { + if ((dflag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0) { /* don't do xray in particle mode, need the z-buffer */ if (!(ob->mode & OB_MODE_PARTICLE_EDIT)) { /* xray and transp are set when it is drawing the 2nd/3rd pass */ if (!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY) && !(ob->dtx & OB_DRAWTRANSP)) { - add_view3d_after(&v3d->afterdraw_xray, base, flag); + ED_view3d_after_add(&v3d->afterdraw_xray, base, dflag); return; } } @@ -6493,9 +6597,6 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* no return after this point, otherwise leaks */ view3d_cached_text_draw_begin(); - /* patch? children objects with a timeoffs change the parents. How to solve! */ - /* if ( ((int)ob->ctime) != F_(scene->r.cfra)) BKE_object_where_is_calc(scene, ob); */ - /* draw motion paths (in view space) */ if (ob->mpath && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) { bAnimVizSettings *avs = &ob->avs; @@ -6515,74 +6616,14 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) ED_view3d_init_mats_rv3d_gl(ob, rv3d); /* which wire color */ - if ((flag & DRAW_CONSTCOLOR) == 0) { - /* confusing logic here, there are 2 methods of setting the color - * 'colortab[colindex]' and 'theme_id', colindex overrides theme_id. - * - * note: no theme yet for 'colindex' */ - int theme_id = TH_WIRE; - int theme_shade = 0; + if ((dflag & DRAW_CONSTCOLOR) == 0) { project_short(ar, ob->obmat[3], &base->sx); - if ((scene->obedit == NULL) && - (G.moving & G_TRANSFORM_OBJ) && - (base->flag & (SELECT + BA_WAS_SEL))) - { - theme_id = TH_TRANSFORM; - } - else { - /* Sets the 'colindex' */ - if (ob->id.lib) { - colindex = (base->flag & (SELECT + BA_WAS_SEL)) ? 4 : 3; - } - else if (warning_recursive == 1) { - if (base->flag & (SELECT + BA_WAS_SEL)) { - colindex = (scene->basact == base) ? 8 : 7; - } - else { - colindex = 6; - } - } - /* Sets the 'theme_id' or fallback to wire */ - else { - if (ob->flag & OB_FROMGROUP) { - if (base->flag & (SELECT + BA_WAS_SEL)) { - /* uses darker active color for non-active + selected*/ - theme_id = TH_GROUP_ACTIVE; - - if (scene->basact != base) { - theme_shade = -16; - } - } - else { - theme_id = TH_GROUP; - } - } - else { - if (base->flag & (SELECT + BA_WAS_SEL)) { - theme_id = scene->basact == base ? TH_ACTIVE : TH_SELECT; - } - else { - if (ob->type == OB_LAMP) theme_id = TH_LAMP; - else if (ob->type == OB_SPEAKER) theme_id = TH_SPEAKER; - else if (ob->type == OB_CAMERA) theme_id = TH_CAMERA; - else if (ob->type == OB_EMPTY) theme_id = TH_EMPTY; - /* fallback to TH_WIRE */ - } - } - } - } + draw_object_wire_color(scene, base, _ob_wire_col, warning_recursive); + ob_wire_col = _ob_wire_col; - /* finally set the color */ - if (colindex == 0) { - if (theme_shade == 0) UI_ThemeColor(theme_id); - else UI_ThemeColorShade(theme_id, theme_shade); - } - else { - col = colortab[colindex]; - cpack(col); - } + glColor3ubv(ob_wire_col); } /* maximum drawtype */ @@ -6640,18 +6681,18 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* draw outline for selected objects, mesh does itself */ if ((v3d->flag & V3D_SELECT_OUTLINE) && ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) && ob->type != OB_MESH) { - if (dt > OB_WIRE && (ob->mode & OB_MODE_EDIT) == 0 && (flag & DRAW_SCENESET) == 0) { - if (!(ob->dtx & OB_DRAWWIRE) && (ob->flag & SELECT) && !(flag & DRAW_PICKING)) { + if (dt > OB_WIRE && (ob->mode & OB_MODE_EDIT) == 0 && (dflag & DRAW_SCENESET) == 0) { + if (!(ob->dtx & OB_DRAWWIRE) && (ob->flag & SELECT) && !(dflag & DRAW_PICKING)) { - drawObjectSelect(scene, v3d, ar, base); + drawObjectSelect(scene, v3d, ar, base, ob_wire_col); } } } switch (ob->type) { case OB_MESH: - empty_object = draw_mesh_object(scene, ar, v3d, rv3d, base, dt, flag); - if (flag != DRAW_CONSTCOLOR) dtx &= ~OB_DRAWWIRE; // mesh draws wire itself + empty_object = draw_mesh_object(scene, ar, v3d, rv3d, base, dt, dflag); + if (dflag != DRAW_CONSTCOLOR) dtx &= ~OB_DRAWWIRE; // mesh draws wire itself break; case OB_FONT: @@ -6662,11 +6703,11 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if (cu->flag & CU_FAST) { cpack(0xFFFFFF); set_inverted_drawing(1); - drawDispList(scene, v3d, rv3d, base, OB_WIRE); + drawDispList(scene, v3d, rv3d, base, OB_WIRE, ob_wire_col); set_inverted_drawing(0); } else { - drawDispList(scene, v3d, rv3d, base, dt); + drawDispList(scene, v3d, rv3d, base, dt, ob_wire_col); } if (cu->linewidth != 0.0f) { @@ -6741,7 +6782,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) } } else if (ED_view3d_boundbox_clip(rv3d, ob->obmat, ob->bb ? ob->bb : cu->bb)) { - empty_object = drawDispList(scene, v3d, rv3d, base, dt); + empty_object = drawDispList(scene, v3d, rv3d, base, dt, ob_wire_col); } break; @@ -6751,7 +6792,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if (cu->editnurb) { ListBase *nurbs = BKE_curve_editNurbs_get(cu); - drawnurb(scene, v3d, rv3d, base, nurbs->first, dt); + drawnurb(scene, v3d, rv3d, base, nurbs->first, dt, ob_wire_col); } else if (dt == OB_BOUNDBOX) { if (((v3d->flag2 & V3D_RENDER_OVERRIDE) && (v3d->drawtype >= OB_WIRE)) == 0) { @@ -6759,7 +6800,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) } } else if (ED_view3d_boundbox_clip(rv3d, ob->obmat, ob->bb ? ob->bb : cu->bb)) { - empty_object = drawDispList(scene, v3d, rv3d, base, dt); + empty_object = drawDispList(scene, v3d, rv3d, base, dt, ob_wire_col); //XXX old animsys if (cu->path) // curve_draw_speed(scene, ob); @@ -6770,14 +6811,14 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) MetaBall *mb = ob->data; if (mb->editelems) - drawmball(scene, v3d, rv3d, base, dt); + drawmball(scene, v3d, rv3d, base, dt, ob_wire_col); else if (dt == OB_BOUNDBOX) { if (((v3d->flag2 & V3D_RENDER_OVERRIDE) && (v3d->drawtype >= OB_WIRE)) == 0) { draw_bounding_volume(scene, ob, ob->boundtype); } } else - empty_object = drawmball(scene, v3d, rv3d, base, dt); + empty_object = drawmball(scene, v3d, rv3d, base, dt, ob_wire_col); break; } case OB_EMPTY: @@ -6792,7 +6833,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) break; case OB_LAMP: if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) { - drawlamp(scene, v3d, rv3d, base, dt, flag); + drawlamp(scene, v3d, rv3d, base, dt, dflag, ob_wire_col); if (dtx || (base->flag & SELECT)) glMultMatrixf(ob->obmat); } break; @@ -6800,12 +6841,12 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0 || (rv3d->persp == RV3D_CAMOB && v3d->camera == ob)) /* special exception for active camera */ { - drawcamera(scene, v3d, rv3d, base, flag); + drawcamera(scene, v3d, rv3d, base, dflag, ob_wire_col); break; } case OB_SPEAKER: if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) - drawspeaker(scene, v3d, rv3d, ob, flag); + drawspeaker(scene, v3d, rv3d, ob, dflag); break; case OB_LATTICE: if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) { @@ -6823,7 +6864,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) else { if (dt > OB_WIRE) GPU_enable_material(0, NULL); /* we use default material */ - empty_object = draw_armature(scene, v3d, ar, base, dt, flag, FALSE); + empty_object = draw_armature(scene, v3d, ar, base, dt, dflag, ob_wire_col, FALSE); if (dt > OB_WIRE) GPU_disable_material(); } @@ -6837,7 +6878,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) { - if (ob->soft /*&& flag & OB_SBMOTION*/) { + if (ob->soft /*&& dflag & OB_SBMOTION*/) { float mrt[3][3], msc[3][3], mtr[3][3]; SoftBody *sb = NULL; float tipw = 0.5f, tiph = 0.5f, drawsize = 4.0f; @@ -6862,7 +6903,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* code for new particle system */ if ((warning_recursive == 0) && (ob->particlesystem.first) && - (flag & DRAW_PICKING) == 0 && + (dflag & DRAW_PICKING) == 0 && (ob != scene->obedit) ) { @@ -6896,7 +6937,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* draw edit particles last so that they can draw over child particles */ if ( (warning_recursive == 0) && - (flag & DRAW_PICKING) == 0 && + (dflag & DRAW_PICKING) == 0 && (!scene->obedit)) { @@ -7027,7 +7068,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if (con->type == CONSTRAINT_TYPE_RIGIDBODYJOINT) { bRigidBodyJointConstraint *data = (bRigidBodyJointConstraint *)con->data; if (data->flag & CONSTRAINT_DRAW_PIVOT) - drawRBpivot(data); + drawRBpivot(data, ob_wire_col); } } @@ -7054,14 +7095,9 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if (dtx & OB_DRAWNAME) { /* patch for several 3d cards (IBM mostly) that crash on GL_SELECT with text drawing */ /* but, we also don't draw names for sets or duplicators */ - if (flag == 0) { - float zero[3] = {0, 0, 0}; - float curcol[4]; - unsigned char tcol[4]; - glGetFloatv(GL_CURRENT_COLOR, curcol); - rgb_float_to_uchar(tcol, curcol); - tcol[3] = 255; - view3d_cached_text_draw_add(zero, ob->id.name + 2, 10, 0, tcol); + if (dflag == 0) { + const float zero[3] = {0, 0, 0}; + view3d_cached_text_draw_add(zero, ob->id.name + 2, 10, 0, ob_wire_col); } } /*if (dtx & OB_DRAWIMAGE) drawDispListwire(&ob->disp);*/ @@ -7117,13 +7153,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) do_draw_center = DESELECT; if (do_draw_center != -1) { - if (flag & DRAW_PICKING) { + if (dflag & DRAW_PICKING) { /* draw a single point for opengl selection */ glBegin(GL_POINTS); glVertex3fv(ob->obmat[3]); glEnd(); } - else if ((flag & DRAW_CONSTCOLOR) == 0) { + else if ((dflag & DRAW_CONSTCOLOR) == 0) { /* we don't draw centers for duplicators and sets */ if (U.obcenter_dia > 0) { /* check > 0 otherwise grease pencil can draw into the circle select which is annoying. */ @@ -7134,7 +7170,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) } /* not for sets, duplicators or picking */ - if (flag == 0 && (v3d->flag & V3D_HIDE_HELPLINES) == 0 && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) { + if (dflag == 0 && (v3d->flag & V3D_HIDE_HELPLINES) == 0 && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) { ListBase *list; /* draw hook center and offset line */ @@ -7476,7 +7512,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec /* helper function for drawing object instances - meshes */ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, - Object *ob, int dt, int outline) + Object *ob, const short dt, int outline) { Mesh *me = ob->data; DerivedMesh *dm = NULL, *edm = NULL; @@ -7524,7 +7560,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r if (dm) dm->release(dm); } -void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, int dt, int outline) +void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, const short dt, int outline) { if (ob == NULL) return; diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index 19cf9d9e20f..43252111303 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -146,7 +146,7 @@ static int intersect_edges(float *points, float a, float b, float c, float d, fl return numpoints; } -static int convex(float *p0, float *up, float *a, float *b) +static int convex(const float p0[3], const float up[3], const float a[3], const float b[3]) { // Vec3 va = a-p0, vb = b-p0; float va[3], vb[3], tmp[3]; diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 28fd2c8bc74..a6948222d93 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -1016,7 +1016,7 @@ static void space_view3d_listener(struct ScrArea *sa, struct wmNotifier *wmn) break; } - // removed since BKE_image_user_frame_calc is now called in draw_bgpic because screen_ops doesnt call the notifier. + // removed since BKE_image_user_frame_calc is now called in view3d_draw_bgpic because screen_ops doesnt call the notifier. #if 0 if (wmn->category == NC_SCENE && wmn->data == ND_FRAME) { View3D *v3d = area->spacedata.first; diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index ee02f99d5b7..709a73178aa 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -153,12 +153,14 @@ static void view3d_draw_clipping(RegionView3D *rv3d) BoundBox *bb = rv3d->clipbb; if (bb) { - static unsigned int clipping_index[6][4] = {{0, 1, 2, 3}, - {0, 4, 5, 1}, - {4, 7, 6, 5}, - {7, 3, 2, 6}, - {1, 5, 6, 2}, - {7, 4, 0, 3}}; + static unsigned int clipping_index[6][4] = { + {0, 1, 2, 3}, + {0, 4, 5, 1}, + {4, 7, 6, 5}, + {7, 3, 2, 6}, + {1, 5, 6, 2}, + {7, 4, 0, 3} + }; /* fill in zero alpha for rendering & re-projection [#31530] */ unsigned char col[4]; @@ -437,16 +439,9 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char ** } #undef GRID_MIN_PX -static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit) +float ED_view3d_grid_scale(Scene *scene, View3D *v3d, const char **grid_unit) { - float grid, grid_scale; - unsigned char col_grid[3]; - const int gridlines = v3d->gridlines / 2; - - if (v3d->gridlines < 3) return; - - grid_scale = v3d->grid; - /* use 'grid_scale' instead of 'v3d->grid' from now on */ + float grid_scale = v3d->grid; /* apply units */ if (scene->unit.system) { @@ -457,11 +452,25 @@ static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit) if (usys) { int i = bUnit_GetBaseUnit(usys); - *grid_unit = bUnit_GetNameDisplay(usys, i); + if (grid_unit) + *grid_unit = bUnit_GetNameDisplay(usys, i); grid_scale = (grid_scale * (float)bUnit_GetScaler(usys, i)) / scene->unit.scale_length; } } + return grid_scale; +} + +static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit) +{ + float grid, grid_scale; + unsigned char col_grid[3]; + const int gridlines = v3d->gridlines / 2; + + if (v3d->gridlines < 3) return; + + /* use 'grid_scale' instead of 'v3d->grid' from now on */ + grid_scale = ED_view3d_grid_scale(scene, v3d, grid_unit); grid = gridlines * grid_scale; if (v3d->zbuf && scene->obedit) glDepthMask(0); // for zbuffer-select @@ -501,8 +510,7 @@ static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit) } /* set variable axis */ - vert[0][1] = vert[1][1] = - vert[2][0] = vert[3][0] = line; + vert[0][1] = vert[1][1] = vert[2][0] = vert[3][0] = line; glDrawArrays(GL_LINES, 0, 4); } @@ -1121,7 +1129,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) #ifdef VIEW3D_CAMERA_BORDER_HACK if (view3d_camera_border_hack_test == TRUE) { - glColor4fv(view3d_camera_border_hack_col); + glColor3ubv(view3d_camera_border_hack_col); glRectf(x1i + 1, y1i + 1, x2i - 1, y2i - 1); view3d_camera_border_hack_test = FALSE; } @@ -1140,7 +1148,6 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) /* border */ if (scene->r.mode & R_BORDER) { - cpack(0); x3 = x1 + scene->r.border.xmin * (x2 - x1); y3 = y1 + scene->r.border.ymin * (y2 - y1); @@ -1521,7 +1528,8 @@ exit: /* ************************************************************* */ -static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d, int foreground) +static void view3d_draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d, + const short do_forground, const short do_camera_frame) { RegionView3D *rv3d = ar->regiondata; BGpic *bgpic; @@ -1530,7 +1538,7 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d, int foreground) ImBuf *ibuf = NULL, *freeibuf; float vec[4], fac, asp, zoomx, zoomy; float x1, y1, x2, y2, cx, cy; - int fg_flag = foreground ? V3D_BGPIC_FOREGROUND : 0; + int fg_flag = do_forground ? V3D_BGPIC_FOREGROUND : 0; for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) { @@ -1541,6 +1549,8 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d, int foreground) (bgpic->view & (1 << rv3d->view)) || /* check agaist flags */ (rv3d->persp == RV3D_CAMOB && bgpic->view == (1 << RV3D_VIEW_CAMERA))) { + float image_aspect[2]; + /* disable individual images */ if ((bgpic->flag & V3D_BGPIC_DISABLED)) continue; @@ -1552,8 +1562,11 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d, int foreground) continue; BKE_image_user_frame_calc(&bgpic->iuser, CFRA, 0); ibuf = BKE_image_get_ibuf(ima, &bgpic->iuser); + + image_aspect[0] = ima->aspx; + image_aspect[1] = ima->aspx; } - else { + else if (bgpic->source == V3D_BGPIC_MOVIE) { clip = NULL; if (bgpic->flag & V3D_BGPIC_CAMERACLIP) { @@ -1568,6 +1581,9 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d, int foreground) BKE_movieclip_user_set_frame(&bgpic->cuser, CFRA); ibuf = BKE_movieclip_get_ibuf(clip, &bgpic->cuser); + image_aspect[0] = clip->aspx; + image_aspect[1] = clip->aspx; + /* working with ibuf from image and clip has got different workflow now. * ibuf acquired from clip is referenced by cache system and should * be dereferenced after usage. */ @@ -1588,14 +1604,65 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d, int foreground) IMB_rect_from_float(ibuf); if (rv3d->persp == RV3D_CAMOB) { - rctf vb; - ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &vb, FALSE); + if (do_camera_frame) { + rctf vb; + ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &vb, FALSE); + x1 = vb.xmin; + y1 = vb.ymin; + x2 = vb.xmax; + y2 = vb.ymax; + } + else { + x1 = ar->winrct.xmin; + y1 = ar->winrct.ymin; + x2 = ar->winrct.xmax; + y2 = ar->winrct.ymax; + } - x1 = vb.xmin; - y1 = vb.ymin; - x2 = vb.xmax; - y2 = vb.ymax; + /* apply offset last - camera offset is different to offset in blender units */ + /* so this has some sane way of working - this matches camera's shift _exactly_ */ + { + const float max_dim = maxf(x2 - x1, y2 - y1); + const float xof_scale = bgpic->xof * max_dim; + const float yof_scale = bgpic->yof * max_dim; + + x1 += xof_scale; + y1 += yof_scale; + x2 += xof_scale; + y2 += yof_scale; + } + + /* aspect correction */ + if (bgpic->flag & V3D_BGPIC_CAMERA_ASPECT) { + /* apply aspect from clip */ + const float w_src = ibuf->x * image_aspect[0]; + const float h_src = ibuf->y * image_aspect[1]; + + /* destination aspect is already applied from the camera frame */ + const float w_dst = x1 - x2; + const float h_dst = y1 - y2; + + const float asp_src = w_src / h_src; + const float asp_dst = w_dst / h_dst; + + if (fabsf(asp_src - asp_dst) >= FLT_EPSILON) { + if ((asp_src > asp_dst) == ((bgpic->flag & V3D_BGPIC_CAMERA_CROP) != 0)) { + /* fit X */ + const float div = asp_src / asp_dst; + const float cent = (x1 + x2) / 2.0f; + x1 = ((x1 - cent) * div) + cent; + x2 = ((x2 - cent) * div) + cent; + } + else { + /* fit Y */ + const float div = asp_dst / asp_src; + const float cent = (y1 + y2) / 2.0f; + y1 = ((y1 - cent) * div) + cent; + y2 = ((y2 - cent) * div) + cent; + } + } + } } else { float sco[2]; @@ -1689,7 +1756,8 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d, int foreground) } } -static void draw_bgpics(Scene *scene, ARegion *ar, View3D *v3d, int foreground) +static void view3d_draw_bgpic_test(Scene *scene, ARegion *ar, View3D *v3d, + const short do_forground, const short do_camera_frame) { RegionView3D *rv3d = ar->regiondata; @@ -1701,11 +1769,11 @@ static void draw_bgpics(Scene *scene, ARegion *ar, View3D *v3d, int foreground) if ((rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO)) { if (rv3d->persp == RV3D_CAMOB) { - draw_bgpic(scene, ar, v3d, foreground); + view3d_draw_bgpic(scene, ar, v3d, do_forground, do_camera_frame); } } else { - draw_bgpic(scene, ar, v3d, foreground); + view3d_draw_bgpic(scene, ar, v3d, do_forground, do_camera_frame); } } @@ -1714,17 +1782,17 @@ static void draw_bgpics(Scene *scene, ARegion *ar, View3D *v3d, int foreground) typedef struct View3DAfter { struct View3DAfter *next, *prev; struct Base *base; - int flag; + short dflag; } View3DAfter; /* temp storage of Objects that need to be drawn as last */ -void add_view3d_after(ListBase *lb, Base *base, int flag) +void ED_view3d_after_add(ListBase *lb, Base *base, const short dflag) { View3DAfter *v3da = MEM_callocN(sizeof(View3DAfter), "View 3d after"); BLI_assert((base->flag & OB_FROMDUPLI) == 0); BLI_addtail(lb, v3da); v3da->base = base; - v3da->flag = flag; + v3da->dflag = dflag; } /* disables write in zbuffer and draws it over */ @@ -1737,7 +1805,7 @@ static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d) for (v3da = v3d->afterdraw_transp.first; v3da; v3da = next) { next = v3da->next; - draw_object(scene, ar, v3d, v3da->base, v3da->flag); + draw_object(scene, ar, v3d, v3da->base, v3da->dflag); BLI_remlink(&v3d->afterdraw_transp, v3da); MEM_freeN(v3da); } @@ -1758,7 +1826,7 @@ static void view3d_draw_xray(Scene *scene, ARegion *ar, View3D *v3d, int clear) v3d->xray = TRUE; for (v3da = v3d->afterdraw_xray.first; v3da; v3da = next) { next = v3da->next; - draw_object(scene, ar, v3d, v3da->base, v3da->flag); + draw_object(scene, ar, v3d, v3da->base, v3da->dflag); BLI_remlink(&v3d->afterdraw_xray, v3da); MEM_freeN(v3da); } @@ -1779,7 +1847,7 @@ static void view3d_draw_xraytransp(Scene *scene, ARegion *ar, View3D *v3d, int c for (v3da = v3d->afterdraw_xraytransp.first; v3da; v3da = next) { next = v3da->next; - draw_object(scene, ar, v3d, v3da->base, v3da->flag); + draw_object(scene, ar, v3d, v3da->base, v3da->dflag); BLI_remlink(&v3d->afterdraw_xraytransp, v3da); MEM_freeN(v3da); } @@ -2421,14 +2489,13 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar, void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, int winy, float viewmat[][4], float winmat[][4], - int draw_background) + int do_bgpic) { RegionView3D *rv3d = ar->regiondata; Base *base; float backcol[3]; int bwinx, bwiny; rcti brect; - ImBuf *bg_ibuf = NULL; glPushMatrix(); @@ -2458,66 +2525,21 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, if (draw_glsl_material(scene, NULL, v3d, v3d->drawtype)) gpu_update_lamps_shadows(scene, v3d); - /* if scene has got active clip, use it for render backdrop */ - if (draw_background && scene->clip && rv3d->persp == RV3D_CAMOB && v3d->camera) { - MovieClipUser user = {0}; - - BKE_movieclip_user_set_frame(&user, CFRA); - bg_ibuf = BKE_movieclip_get_ibuf(scene->clip, &user); + /* set background color, fallback on the view background color + * (if active clip is set but frame is failed to load fallback to horizon color as background) */ + if (scene->world) { + if (scene->r.color_mgt_flag & R_COLOR_MANAGEMENT) + linearrgb_to_srgb_v3_v3(backcol, &scene->world->horr); + else + copy_v3_v3(backcol, &scene->world->horr); + glClearColor(backcol[0], backcol[1], backcol[2], 0.0); } - - if (!bg_ibuf) { - /* set background color, fallback on the view background color - * (if active clip is set but frame is failed to load fallback to horizon color as background) */ - if (scene->world) { - if (scene->r.color_mgt_flag & R_COLOR_MANAGEMENT) - linearrgb_to_srgb_v3_v3(backcol, &scene->world->horr); - else - copy_v3_v3(backcol, &scene->world->horr); - glClearColor(backcol[0], backcol[1], backcol[2], 0.0); - } - else { - UI_ThemeClearColor(TH_BACK); - } + else { + UI_ThemeClearColor(TH_BACK); } - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (bg_ibuf) { - unsigned char *pixels, *cp, *dst_cp; - int i; - - if (bg_ibuf->rect_float && !bg_ibuf->rect) - IMB_rect_from_float(bg_ibuf); - - dst_cp = pixels = MEM_callocN(4 * sizeof(unsigned char) * bg_ibuf->x * bg_ibuf->y, "draw offscreen clip pixels"); - cp = (unsigned char *)bg_ibuf->rect; - for (i = 0; i < bg_ibuf->x * bg_ibuf->y; i++, cp += 4, dst_cp += 4) { - dst_cp[0] = cp[0]; - dst_cp[1] = cp[1]; - dst_cp[2] = cp[2]; - dst_cp[3] = 255; - } - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - ED_region_pixelspace(ar); - - glPixelZoom((float)winx / bg_ibuf->x, (float)winy / bg_ibuf->y); - glaDrawPixelsTex(0, 0, bg_ibuf->x, bg_ibuf->y, GL_UNSIGNED_BYTE, pixels); - - glPixelZoom(1.0, 1.0); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - - IMB_freeImBuf(bg_ibuf); - MEM_freeN(pixels); - } + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* setup view matrices */ view3d_main_area_setup_view(scene, v3d, ar, viewmat, winmat); @@ -2533,6 +2555,11 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, else v3d->zbuf = FALSE; + /* important to do before clipping */ + if (do_bgpic) { + view3d_draw_bgpic_test(scene, ar, v3d, FALSE, FALSE); + } + if (rv3d->rflag & RV3D_CLIPPING) ED_view3d_clipping_set(rv3d); @@ -2574,6 +2601,11 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, if (rv3d->rflag & RV3D_CLIPPING) ED_view3d_clipping_disable(); + /* important to do after clipping */ + if (do_bgpic) { + view3d_draw_bgpic_test(scene, ar, v3d, TRUE, FALSE); + } + /* cleanup */ if (v3d->zbuf) { v3d->zbuf = FALSE; @@ -2756,12 +2788,15 @@ static void draw_viewport_fps(Scene *scene, ARegion *ar) BLF_draw_default_ascii(22, ar->winy - 17, 0.0f, printable, sizeof(printable)); } -static int view3d_main_area_draw_engine(const bContext *C, ARegion *ar) +static void view3d_main_area_draw_objects(const bContext *C, ARegion *ar, const char **grid_unit); + +static int view3d_main_area_draw_engine(const bContext *C, ARegion *ar, int draw_border) { Scene *scene = CTX_data_scene(C); View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d = CTX_wm_region_view3d(C); RenderEngineType *type; + GLint scissor[4]; /* create render engine */ if (!rv3d->render_engine) { @@ -2778,22 +2813,57 @@ static int view3d_main_area_draw_engine(const bContext *C, ARegion *ar) view3d_main_area_setup_view(scene, v3d, ar, NULL, NULL); /* background draw */ + ED_region_pixelspace(ar); + + if (draw_border) { + /* for border draw, we only need to clear a subset of the 3d view */ + rctf viewborder; + rcti cliprct; + + ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &viewborder, FALSE); + + cliprct.xmin = viewborder.xmin + scene->r.border.xmin * (viewborder.xmax - viewborder.xmin); + cliprct.ymin = viewborder.ymin + scene->r.border.ymin * (viewborder.ymax - viewborder.ymin); + cliprct.xmax = viewborder.xmin + scene->r.border.xmax * (viewborder.xmax - viewborder.xmin); + cliprct.ymax = viewborder.ymin + scene->r.border.ymax * (viewborder.ymax - viewborder.ymin); + + cliprct.xmin += ar->winrct.xmin; + cliprct.xmax += ar->winrct.xmin; + cliprct.ymin += ar->winrct.ymin; + cliprct.ymax += ar->winrct.ymin; + + cliprct.xmin = CLAMPIS(cliprct.xmin, ar->winrct.xmin, ar->winrct.xmax); + cliprct.ymin = CLAMPIS(cliprct.ymin, ar->winrct.ymin, ar->winrct.ymax); + cliprct.xmax = CLAMPIS(cliprct.xmax, ar->winrct.xmin, ar->winrct.xmax); + cliprct.ymax = CLAMPIS(cliprct.ymax, ar->winrct.ymin, ar->winrct.ymax); + + if (cliprct.xmax > cliprct.xmin && cliprct.ymax > cliprct.ymin) { + glGetIntegerv(GL_SCISSOR_BOX, scissor); + glScissor(cliprct.xmin, cliprct.ymin, cliprct.xmax - cliprct.xmin, cliprct.ymax - cliprct.ymin); + } + else + return 0; + } + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - ED_region_pixelspace(ar); - - /* render result draw */ if (v3d->flag & V3D_DISPBGPICS) - draw_bgpic(scene, ar, v3d, FALSE); + view3d_draw_bgpic(scene, ar, v3d, FALSE, TRUE); else fdrawcheckerboard(0, 0, ar->winx, ar->winy); + /* render result draw */ type = rv3d->render_engine->type; type->view_draw(rv3d->render_engine, C); if (v3d->flag & V3D_DISPBGPICS) - draw_bgpic(scene, ar, v3d, TRUE); + view3d_draw_bgpic(scene, ar, v3d, TRUE, TRUE); + + if (draw_border) { + /* restore scissor as it was before */ + glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); + } return 1; } @@ -2889,7 +2959,7 @@ static void view3d_main_area_draw_objects(const bContext *C, ARegion *ar, const } } - draw_bgpics(scene, ar, v3d, FALSE); + view3d_draw_bgpic_test(scene, ar, v3d, FALSE, TRUE); if (rv3d->rflag & RV3D_CLIPPING) ED_view3d_clipping_set(rv3d); @@ -2948,8 +3018,6 @@ static void view3d_main_area_draw_objects(const bContext *C, ARegion *ar, const } } - draw_bgpics(scene, ar, v3d, TRUE); - // REEB_draw(); if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) { @@ -2969,6 +3037,9 @@ static void view3d_main_area_draw_objects(const bContext *C, ARegion *ar, const if (rv3d->rflag & RV3D_CLIPPING) ED_view3d_clipping_disable(); + /* important to do after clipping */ + view3d_draw_bgpic_test(scene, ar, v3d, TRUE, TRUE); + BIF_draw_manipulator(C); #if 0 @@ -3048,15 +3119,21 @@ static void view3d_main_area_draw_info(const bContext *C, ARegion *ar, const cha void view3d_main_area_draw(const bContext *C, ARegion *ar) { + Scene *scene = CTX_data_scene(C); View3D *v3d = CTX_wm_view3d(C); + RegionView3D *rv3d = CTX_wm_region_view3d(C); const char *grid_unit = NULL; + int draw_border = (rv3d->persp == RV3D_CAMOB && (scene->r.mode & R_BORDER)); - /* draw viewport using external renderer? */ - if (!(v3d->drawtype == OB_RENDER && view3d_main_area_draw_engine(C, ar))) { - /* draw viewport using opengl */ + /* draw viewport using opengl */ + if (v3d->drawtype != OB_RENDER || draw_border) { view3d_main_area_draw_objects(C, ar, &grid_unit); ED_region_pixelspace(ar); } + + /* draw viewport using external renderer */ + if (v3d->drawtype == OB_RENDER) + view3d_main_area_draw_engine(C, ar, draw_border); view3d_main_area_draw_info(C, ar, grid_unit); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 8ba0d75c786..d632314f3ca 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -498,7 +498,7 @@ static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event) static void viewops_data_free(bContext *C, wmOperator *op) { ARegion *ar; - Paint *p = paint_get_active(CTX_data_scene(C)); + Paint *p = paint_get_active_from_context(C); if (op->customdata) { ViewOpsData *vod = op->customdata; diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 29edc0158d6..3c6a0dd4b9f 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -53,13 +53,17 @@ struct wmWindowManager; #define BL_NEAR_CLIP 0.001 /* drawing flags: */ -#define DRAW_PICKING 1 -#define DRAW_CONSTCOLOR 2 -#define DRAW_SCENESET 4 +enum { + DRAW_PICKING = (1 << 0), + DRAW_CONSTCOLOR = (1 << 1), + DRAW_SCENESET = (1 << 2) +}; /* draw_mesh_fancy/draw_mesh_textured draw_flags */ -#define DRAW_MODIFIERS_PREVIEW 1 -#define DRAW_FACE_SELECT 2 +enum { + DRAW_MODIFIERS_PREVIEW = (1 << 0), + DRAW_FACE_SELECT = (1 << 1) +}; /* view3d_header.c */ void VIEW3D_OT_layers(struct wmOperatorType *ot); @@ -112,23 +116,28 @@ void draw_motion_paths_cleanup(View3D *v3d); /* drawobject.c */ -void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, int flag); -int draw_glsl_material(Scene *scene, struct Object *ob, View3D *v3d, int dt); -void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, int dt, int outline); +void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, const short dflag); +int draw_glsl_material(Scene *scene, struct Object *ob, View3D *v3d, const short dt); +void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, const short dt, int outline); void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob); void drawaxes(float size, char drawtype); void view3d_cached_text_draw_begin(void); void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag, const unsigned char col[4]); void view3d_cached_text_draw_end(View3D * v3d, ARegion * ar, int depth_write, float mat[][4]); -#define V3D_CACHE_TEXT_ZBUF (1 << 0) -#define V3D_CACHE_TEXT_WORLDSPACE (1 << 1) -#define V3D_CACHE_TEXT_ASCII (1 << 2) -#define V3D_CACHE_TEXT_GLOBALSPACE (1 << 3) -#define V3D_CACHE_TEXT_LOCALCLIP (1 << 4) + +enum { + V3D_CACHE_TEXT_ZBUF = (1 << 0), + V3D_CACHE_TEXT_WORLDSPACE = (1 << 1), + V3D_CACHE_TEXT_ASCII = (1 << 2), + V3D_CACHE_TEXT_GLOBALSPACE = (1 << 3), + V3D_CACHE_TEXT_LOCALCLIP = (1 << 4) +}; /* drawarmature.c */ -int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag, const short is_outline); +int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, + const short dt, const short dflag, const unsigned char ob_wire_col[4], + const short is_outline); /* drawmesh.c */ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, @@ -140,7 +149,7 @@ void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d, void view3d_main_area_draw(const struct bContext *C, struct ARegion *ar); void draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, int (*func)(void *)); void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d); -void add_view3d_after(ListBase *lb, Base *base, int flag); +void ED_view3d_after_add(ListBase *lb, Base *base, const short dflag); void circf(float x, float y, float rad); void circ(float x, float y, float rad); @@ -211,7 +220,7 @@ void draw_volume(struct ARegion *ar, struct GPUTexture *tex, float min[3], float * any direction it starts to fail */ #define VIEW3D_CAMERA_BORDER_HACK #ifdef VIEW3D_CAMERA_BORDER_HACK -extern float view3d_camera_border_hack_col[4]; +extern unsigned char view3d_camera_border_hack_col[3]; extern short view3d_camera_border_hack_test; #endif diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 18c7e975356..f9ebd4e39c1 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -64,6 +64,7 @@ #include "BKE_context.h" #include "BKE_paint.h" #include "BKE_armature.h" +#include "BKE_depsgraph.h" #include "BKE_tessmesh.h" #include "BKE_movieclip.h" #include "BKE_object.h" @@ -333,7 +334,7 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, int mcords[][2], s int sco1[2], sco2[2]; bArmature *arm = ob->data; - if (ob->type != OB_ARMATURE || ob->pose == NULL) return; + if ((ob->type != OB_ARMATURE) || (ob->pose == NULL)) return; for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { if (PBONE_VISIBLE(arm, pchan->bone) && (pchan->bone->flag & BONE_UNSELECTABLE) == 0) { @@ -348,6 +349,11 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, int mcords[][2], s } } } + + if (arm->flag & ARM_HAS_VIZ_DEPS) { + /* mask modifier ('armature' mode), etc. */ + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); + } } static void object_deselect_all_visible(Scene *scene, View3D *v3d) @@ -1297,11 +1303,11 @@ static void deselect_all_tracks(MovieTracking *tracking) object = tracking->objects.first; while (object) { - ListBase *tracksbase = BKE_tracking_object_tracks(tracking, object); + ListBase *tracksbase = BKE_tracking_object_get_tracks(tracking, object); MovieTrackingTrack *track = tracksbase->first; while (track) { - BKE_tracking_deselect_track(track, TRACK_AREA_ALL); + BKE_tracking_track_deselect(track, TRACK_AREA_ALL); track = track->next; } @@ -1402,18 +1408,18 @@ static int mouse_select(bContext *C, const int mval[2], short extend, short dese ListBase *tracksbase; MovieTrackingTrack *track; - track = BKE_tracking_indexed_track(&clip->tracking, hitresult >> 16, &tracksbase); + track = BKE_tracking_track_get_indexed(&clip->tracking, hitresult >> 16, &tracksbase); if (TRACK_SELECTED(track) && extend) { changed = 0; - BKE_tracking_deselect_track(track, TRACK_AREA_ALL); + BKE_tracking_track_deselect(track, TRACK_AREA_ALL); } else { int oldsel = TRACK_SELECTED(track) ? 1 : 0; if (!extend) deselect_all_tracks(tracking); - BKE_tracking_select_track(tracksbase, track, TRACK_AREA_ALL, extend); + BKE_tracking_track_select(tracksbase, track, TRACK_AREA_ALL, extend); if (oldsel != (TRACK_SELECTED(track) ? 1 : 0)) changed = 1; @@ -1864,7 +1870,6 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, i for (base = vc->scene->base.first; base && hits; base = base->next) { if (BASE_SELECTABLE(vc->v3d, base)) { while (base->selcol == (*col & 0xFFFF)) { /* we got an object */ - if (*col & 0xFFFF0000) { /* we got a bone */ bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY)); if (bone) { @@ -1872,16 +1877,13 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, i if ((bone->flag & BONE_UNSELECTABLE) == 0) { bone->flag |= BONE_SELECTED; bone_selected = 1; -// XXX select_actionchannel_by_name(base->object->action, bone->name, 1); } } else { bArmature *arm = base->object->data; bone->flag &= ~BONE_SELECTED; -// XXX select_actionchannel_by_name(base->object->action, bone->name, 0); if (arm->act_bone == bone) arm->act_bone = NULL; - } } } @@ -1891,7 +1893,7 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, i else ED_base_object_select(base, BA_DESELECT); } - + col += 4; /* next color */ hits--; if (hits == 0) break; @@ -1899,12 +1901,22 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, i } if (bone_selected) { - WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, base->object); + Object *ob = base->object; + + if (ob && (ob->type == OB_ARMATURE)) { + bArmature *arm = ob->data; + + WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob); + + if (arm && (arm->flag & ARM_HAS_VIZ_DEPS)) { + /* mask modifier ('armature' mode), etc. */ + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); + } + } } } - + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, vc->scene); - } MEM_freeN(vbuffer); @@ -2152,9 +2164,8 @@ void VIEW3D_OT_select(wmOperatorType *ot) ot->flag = OPTYPE_UNDO; /* properties */ - RNA_def_boolean(ot->srna, "extend", 0, "Extend", "Extend selection instead of deselecting everything first"); - RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Remove from selection"); - RNA_def_boolean(ot->srna, "toggle", 0, "Toggle Selection", "Toggles selection"); + WM_operator_properties_mouse_select(ot); + RNA_def_boolean(ot->srna, "center", 0, "Center", "Use the object center when selecting, in editmode used to extend object selection"); RNA_def_boolean(ot->srna, "enumerate", 0, "Enumerate", "List objects under the mouse (object mode only)"); RNA_def_boolean(ot->srna, "object", 0, "Object", "Use object selection (editmode only)"); diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 5af1829af5a..1991d4bce4f 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -831,12 +831,12 @@ static void bundle_midpoint(Scene *scene, Object *ob, float vec[3]) copy_m4_m4(cammat, ob->obmat); - BKE_get_tracking_mat(scene, ob, mat); + BKE_tracking_get_camera_object_matrix(scene, ob, mat); INIT_MINMAX(min, max); for (object = tracking->objects.first; object; object = object->next) { - ListBase *tracksbase = BKE_tracking_object_tracks(tracking, object); + ListBase *tracksbase = BKE_tracking_object_get_tracks(tracking, object); MovieTrackingTrack *track = tracksbase->first; float obmat[4][4]; @@ -846,7 +846,7 @@ static void bundle_midpoint(Scene *scene, Object *ob, float vec[3]) else { float imat[4][4]; - BKE_tracking_get_interpolated_camera(tracking, object, scene->r.cfra, imat); + BKE_tracking_camera_get_reconstructed_interpolate(tracking, object, scene->r.cfra, imat); invert_m4(imat); mult_m4_m4m4(obmat, cammat, imat); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 43fdb779470..9e7facf1b6f 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -49,8 +49,9 @@ #include "DNA_constraint_types.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" +#include "DNA_mask_types.h" #include "DNA_movieclip_types.h" -#include "DNA_scene_types.h" /* PET modes */ +#include "DNA_scene_types.h" /* PET modes */ #include "RNA_access.h" @@ -104,7 +105,7 @@ static int doEdgeSlide(TransInfo *t, float perc); void setTransformViewMatrices(TransInfo *t) { - if (t->spacetype==SPACE_VIEW3D && t->ar && t->ar->regiontype == RGN_TYPE_WINDOW) { + if (t->spacetype == SPACE_VIEW3D && t->ar && t->ar->regiontype == RGN_TYPE_WINDOW) { RegionView3D *rv3d = t->ar->regiondata; copy_m4_m4(t->viewmat, rv3d->viewmat); @@ -128,12 +129,12 @@ static void convertViewVec2D(View2D *v2d, float vec[3], int dx, int dy) { float divx, divy; - divx= v2d->mask.xmax - v2d->mask.xmin; - divy= v2d->mask.ymax - v2d->mask.ymin; + divx = v2d->mask.xmax - v2d->mask.xmin; + divy = v2d->mask.ymax - v2d->mask.ymin; - vec[0]= (v2d->cur.xmax - v2d->cur.xmin) * dx / divx; - vec[1]= (v2d->cur.ymax - v2d->cur.ymin) * dy / divy; - vec[2]= 0.0f; + vec[0] = (v2d->cur.xmax - v2d->cur.xmin) * dx / divx; + vec[1] = (v2d->cur.ymax - v2d->cur.ymin) * dy / divy; + vec[2] = 0.0f; } void convertViewVec(TransInfo *t, float r_vec[3], int dx, int dy) @@ -144,7 +145,7 @@ void convertViewVec(TransInfo *t, float r_vec[3], int dx, int dy) mval_f[1] = dy; ED_view3d_win_to_delta(t->ar, mval_f, r_vec); } - else if (t->spacetype==SPACE_IMAGE) { + else if (t->spacetype == SPACE_IMAGE) { float aspx, aspy; convertViewVec2D(t->view, r_vec, dx, dy); @@ -159,16 +160,38 @@ void convertViewVec(TransInfo *t, float r_vec[3], int dx, int dy) else if (ELEM(t->spacetype, SPACE_NODE, SPACE_SEQ)) { convertViewVec2D(&t->ar->v2d, r_vec, dx, dy); } - else if (t->spacetype==SPACE_CLIP) { + else if (t->spacetype == SPACE_CLIP) { View2D *v2d = t->view; float divx, divy; + float mulx, muly; + float aspx = 1.0f, aspy = 1.0f; - divx = v2d->mask.xmax-v2d->mask.xmin; - divy = v2d->mask.ymax-v2d->mask.ymin; + divx = v2d->mask.xmax - v2d->mask.xmin; + divy = v2d->mask.ymax - v2d->mask.ymin; - r_vec[0] = (v2d->cur.xmax-v2d->cur.xmin)*(dx)/divx; - r_vec[1] = (v2d->cur.ymax-v2d->cur.ymin)*(dy)/divy; + mulx = (v2d->cur.xmax - v2d->cur.xmin); + muly = (v2d->cur.ymax - v2d->cur.ymin); + + if (t->options & CTX_MASK) { + /* clamp w/h, mask only */ + divx = divy = maxf(divx, divy); + mulx = muly = minf(mulx, muly); + } + + r_vec[0] = mulx * (dx) / divx; + r_vec[1] = muly * (dy) / divy; r_vec[2] = 0.0f; + + if (t->options & CTX_MOVIECLIP) { + ED_space_clip_aspect_dimension_aware(t->sa->spacedata.first, &aspx, &aspy); + } + else if (t->options & CTX_MASK) { + /* TODO - NOT WORKING, this isnt so bad since its only display aspect */ + ED_space_clip_mask_aspect(t->sa->spacedata.first, &aspx, &aspy); + } + + r_vec[0] *= aspx; + r_vec[1] *= aspy; } else { printf("%s: called in an invalid context\n", __func__); @@ -178,18 +201,18 @@ void convertViewVec(TransInfo *t, float r_vec[3], int dx, int dy) void projectIntView(TransInfo *t, const float vec[3], int adr[2]) { - if (t->spacetype==SPACE_VIEW3D) { + if (t->spacetype == SPACE_VIEW3D) { if (t->ar->regiontype == RGN_TYPE_WINDOW) project_int_noclip(t->ar, vec, adr); } - else if (t->spacetype==SPACE_IMAGE) { + else if (t->spacetype == SPACE_IMAGE) { float aspx, aspy, v[2]; ED_space_image_uv_aspect(t->sa->spacedata.first, &aspx, &aspy); - v[0]= vec[0]/aspx; - v[1]= vec[1]/aspy; + v[0] = vec[0] / aspx; + v[1] = vec[1] / aspy; - UI_view2d_to_region_no_clip(t->view, v[0], v[1], adr, adr+1); + UI_view2d_to_region_no_clip(t->view, v[0], v[1], adr, adr + 1); } else if (t->spacetype == SPACE_ACTION) { int out[2] = {0, 0}; @@ -199,37 +222,46 @@ void projectIntView(TransInfo *t, const float vec[3], int adr[2]) if (sact->flag & SACTION_DRAWTIME) { //vec[0] = vec[0]/((t->scene->r.frs_sec / t->scene->r.frs_sec_base)); /* same as below */ - UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out+1); + UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out + 1); } else #endif { - UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out+1); + UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out + 1); } - adr[0]= out[0]; - adr[1]= out[1]; + adr[0] = out[0]; + adr[1] = out[1]; } else if (ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) { int out[2] = {0, 0}; - UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out+1); - adr[0]= out[0]; - adr[1]= out[1]; + UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out + 1); + adr[0] = out[0]; + adr[1] = out[1]; } - else if (t->spacetype==SPACE_SEQ) { /* XXX not tested yet, but should work */ + else if (t->spacetype == SPACE_SEQ) { /* XXX not tested yet, but should work */ int out[2] = {0, 0}; - UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out+1); - adr[0]= out[0]; - adr[1]= out[1]; + UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out + 1); + adr[0] = out[0]; + adr[1] = out[1]; } - else if (t->spacetype==SPACE_CLIP) { + else if (t->spacetype == SPACE_CLIP) { float v[2]; + float aspx = 1.0f, aspy = 1.0f; copy_v2_v2(v, vec); - UI_view2d_to_region_no_clip(t->view, v[0], v[1], adr, adr+1); + if (t->options & CTX_MOVIECLIP) + ED_space_clip_aspect_dimension_aware(t->sa->spacedata.first, &aspx, &aspy); + else if (t->options & CTX_MASK) + ED_space_clip_mask_aspect(t->sa->spacedata.first, &aspx, &aspy); + + v[0] /= aspx; + v[1] /= aspy; + + UI_view2d_to_region_no_clip(t->view, v[0], v[1], adr, adr + 1); } } @@ -262,11 +294,11 @@ void projectFloatView(TransInfo *t, const float vec[3], float adr[2]) void applyAspectRatio(TransInfo *t, float vec[2]) { - if ((t->spacetype==SPACE_IMAGE) && (t->mode==TFM_TRANSLATION)) { - SpaceImage *sima= t->sa->spacedata.first; + if ((t->spacetype == SPACE_IMAGE) && (t->mode == TFM_TRANSLATION)) { + SpaceImage *sima = t->sa->spacedata.first; float aspx, aspy; - if ((sima->flag & SI_COORDFLOATS)==0) { + if ((sima->flag & SI_COORDFLOATS) == 0) { int width, height; ED_space_image_size(sima, &width, &height); @@ -278,28 +310,35 @@ void applyAspectRatio(TransInfo *t, float vec[2]) vec[0] /= aspx; vec[1] /= aspy; } - else if ((t->spacetype==SPACE_CLIP) && (t->mode==TFM_TRANSLATION)) { - if (t->options & CTX_MOVIECLIP) { + else if ((t->spacetype == SPACE_CLIP) && (t->mode == TFM_TRANSLATION)) { + if (t->options & (CTX_MOVIECLIP | CTX_MASK)) { SpaceClip *sc = t->sa->spacedata.first; float aspx, aspy; - int width, height; - ED_space_clip_size(sc, &width, &height); - ED_space_clip_aspect(sc, &aspx, &aspy); - vec[0] *= width / aspx; - vec[1] *= height / aspy; + if (t->options & CTX_MOVIECLIP) { + ED_space_clip_aspect_dimension_aware(sc, &aspx, &aspy); + + vec[0] /= aspx; + vec[1] /= aspy; + } + else if (t->options & CTX_MASK) { + ED_space_clip_mask_aspect(sc, &aspx, &aspy); + + vec[0] /= aspx; + vec[1] /= aspy; + } } } } void removeAspectRatio(TransInfo *t, float vec[2]) { - if ((t->spacetype==SPACE_IMAGE) && (t->mode==TFM_TRANSLATION)) { - SpaceImage *sima= t->sa->spacedata.first; + if ((t->spacetype == SPACE_IMAGE) && (t->mode == TFM_TRANSLATION)) { + SpaceImage *sima = t->sa->spacedata.first; float aspx, aspy; - if ((sima->flag & SI_COORDFLOATS)==0) { + if ((sima->flag & SI_COORDFLOATS) == 0) { int width, height; ED_space_image_size(sima, &width, &height); @@ -311,17 +350,20 @@ void removeAspectRatio(TransInfo *t, float vec[2]) vec[0] *= aspx; vec[1] *= aspy; } - else if ((t->spacetype==SPACE_CLIP) && (t->mode==TFM_TRANSLATION)) { - if (t->options & CTX_MOVIECLIP) { + else if ((t->spacetype == SPACE_CLIP) && (t->mode == TFM_TRANSLATION)) { + if (t->options & (CTX_MOVIECLIP | CTX_MASK)) { SpaceClip *sc = t->sa->spacedata.first; - float aspx, aspy; - int width, height; + float aspx = 1.0f, aspy = 1.0f; - ED_space_clip_size(sc, &width, &height); - ED_space_clip_aspect(sc, &aspx, &aspy); + if (t->options & CTX_MOVIECLIP) { + ED_space_clip_aspect_dimension_aware(sc, &aspx, &aspy); + } + else if (t->options & CTX_MASK) { + ED_space_clip_mask_aspect(sc, &aspx, &aspy); + } - vec[0] *= aspx / width; - vec[1] *= aspy / height; + vec[0] *= aspx; + vec[1] *= aspy; } } } @@ -331,48 +373,56 @@ static void viewRedrawForce(const bContext *C, TransInfo *t) if (t->spacetype == SPACE_VIEW3D) { /* Do we need more refined tags? */ if (t->flag & T_POSE) - WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL); else - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); /* for realtime animation record - send notifiers recognised by animation editors */ // XXX: is this notifier a lame duck? if ((t->animtimer) && IS_AUTOKEY_ON(t->scene)) - WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, NULL); } else if (t->spacetype == SPACE_ACTION) { //SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; - WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL); + WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL); } else if (t->spacetype == SPACE_IPO) { //SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; - WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL); + WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL); } else if (t->spacetype == SPACE_NLA) { - WM_event_add_notifier(C, NC_ANIMATION|ND_NLA|NA_EDITED, NULL); + WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); } else if (t->spacetype == SPACE_NODE) { //ED_area_tag_redraw(t->sa); - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_NODE_VIEW, NULL); + WM_event_add_notifier(C, NC_SPACE | ND_SPACE_NODE_VIEW, NULL); } else if (t->spacetype == SPACE_SEQ) { - WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, NULL); + WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, NULL); } - else if (t->spacetype==SPACE_IMAGE) { + else if (t->spacetype == SPACE_IMAGE) { // XXX how to deal with lock? - SpaceImage *sima= (SpaceImage*)t->sa->spacedata.first; - if (sima->lock) WM_event_add_notifier(C, NC_GEOM|ND_DATA, t->obedit->data); + SpaceImage *sima = (SpaceImage *)t->sa->spacedata.first; + if (sima->lock) WM_event_add_notifier(C, NC_GEOM | ND_DATA, t->obedit->data); else ED_area_tag_redraw(t->sa); } - else if (t->spacetype==SPACE_CLIP) { - SpaceClip *sc = (SpaceClip*)t->sa->spacedata.first; - MovieClip *clip = ED_space_clip(sc); + else if (t->spacetype == SPACE_CLIP) { + SpaceClip *sc = (SpaceClip *)t->sa->spacedata.first; + + if (ED_space_clip_show_trackedit(sc)) { + MovieClip *clip = ED_space_clip(sc); - /* objects could be parented to tracking data, so send this for viewport refresh */ - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + /* objects could be parented to tracking data, so send this for viewport refresh */ + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); - WM_event_add_notifier(C, NC_MOVIECLIP|NA_EDITED, clip); + WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip); + } + else if (ED_space_clip_show_maskedit(sc)) { + Mask *mask = ED_space_clip_mask(sc); + + WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); + } } } @@ -383,19 +433,19 @@ static void viewRedrawPost(bContext *C, TransInfo *t) if (t->spacetype == SPACE_VIEW3D) { /* if autokeying is enabled, send notifiers that keyframes were added */ if (IS_AUTOKEY_ON(t->scene)) - WM_main_add_notifier(NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL); + WM_main_add_notifier(NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL); /* XXX temp, first hack to get auto-render in compositor work (ton) */ - WM_event_add_notifier(C, NC_SCENE|ND_TRANSFORM_DONE, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_TRANSFORM_DONE, CTX_data_scene(C)); } #if 0 // TRANSFORM_FIX_ME - if (t->spacetype==SPACE_VIEW3D) { + if (t->spacetype == SPACE_VIEW3D) { allqueue(REDRAWBUTSOBJECT, 0); allqueue(REDRAWVIEW3D, 0); } - else if (t->spacetype==SPACE_IMAGE) { + else if (t->spacetype == SPACE_IMAGE) { allqueue(REDRAWIMAGE, 0); allqueue(REDRAWVIEW3D, 0); } @@ -419,7 +469,7 @@ void BIF_selectOrientation(void) #if 0 // TRANSFORM_FIX_ME short val; char *str_menu = BIF_menustringTransformOrientation("Orientation"); - val= pupmenu(str_menu); + val = pupmenu(str_menu); MEM_freeN(str_menu); if (val >= 0) { @@ -447,8 +497,8 @@ static void view_editmove(unsigned short UNUSED(event)) switch (event) { case WHEELUPMOUSE: - if ( G.qual & LR_SHIFTKEY ) { - if ( G.qual & LR_ALTKEY ) { + if (G.qual & LR_SHIFTKEY) { + if (G.qual & LR_ALTKEY) { G.qual &= ~LR_SHIFTKEY; persptoetsen(PAD2); G.qual |= LR_SHIFTKEY; @@ -457,8 +507,8 @@ static void view_editmove(unsigned short UNUSED(event)) persptoetsen(PAD2); } } - else if ( G.qual & LR_CTRLKEY ) { - if ( G.qual & LR_ALTKEY ) { + else if (G.qual & LR_CTRLKEY) { + if (G.qual & LR_ALTKEY) { G.qual &= ~LR_CTRLKEY; persptoetsen(PAD4); G.qual |= LR_CTRLKEY; @@ -475,8 +525,8 @@ static void view_editmove(unsigned short UNUSED(event)) refresh = 1; break; case WHEELDOWNMOUSE: - if ( G.qual & LR_SHIFTKEY ) { - if ( G.qual & LR_ALTKEY ) { + if (G.qual & LR_SHIFTKEY) { + if (G.qual & LR_ALTKEY) { G.qual &= ~LR_SHIFTKEY; persptoetsen(PAD8); G.qual |= LR_SHIFTKEY; @@ -485,8 +535,8 @@ static void view_editmove(unsigned short UNUSED(event)) persptoetsen(PAD8); } } - else if ( G.qual & LR_CTRLKEY ) { - if ( G.qual & LR_ALTKEY ) { + else if (G.qual & LR_CTRLKEY) { + if (G.qual & LR_ALTKEY) { G.qual &= ~LR_CTRLKEY; persptoetsen(PAD6); G.qual |= LR_CTRLKEY; @@ -512,73 +562,71 @@ static void view_editmove(unsigned short UNUSED(event)) /* ************************************************* */ /* NOTE: these defines are saved in keymap files, do not change values but just add new ones */ -#define TFM_MODAL_CANCEL 1 -#define TFM_MODAL_CONFIRM 2 -#define TFM_MODAL_TRANSLATE 3 -#define TFM_MODAL_ROTATE 4 -#define TFM_MODAL_RESIZE 5 -#define TFM_MODAL_SNAP_INV_ON 6 -#define TFM_MODAL_SNAP_INV_OFF 7 -#define TFM_MODAL_SNAP_TOGGLE 8 -#define TFM_MODAL_AXIS_X 9 -#define TFM_MODAL_AXIS_Y 10 -#define TFM_MODAL_AXIS_Z 11 -#define TFM_MODAL_PLANE_X 12 -#define TFM_MODAL_PLANE_Y 13 -#define TFM_MODAL_PLANE_Z 14 -#define TFM_MODAL_CONS_OFF 15 -#define TFM_MODAL_ADD_SNAP 16 -#define TFM_MODAL_REMOVE_SNAP 17 +#define TFM_MODAL_CANCEL 1 +#define TFM_MODAL_CONFIRM 2 +#define TFM_MODAL_TRANSLATE 3 +#define TFM_MODAL_ROTATE 4 +#define TFM_MODAL_RESIZE 5 +#define TFM_MODAL_SNAP_INV_ON 6 +#define TFM_MODAL_SNAP_INV_OFF 7 +#define TFM_MODAL_SNAP_TOGGLE 8 +#define TFM_MODAL_AXIS_X 9 +#define TFM_MODAL_AXIS_Y 10 +#define TFM_MODAL_AXIS_Z 11 +#define TFM_MODAL_PLANE_X 12 +#define TFM_MODAL_PLANE_Y 13 +#define TFM_MODAL_PLANE_Z 14 +#define TFM_MODAL_CONS_OFF 15 +#define TFM_MODAL_ADD_SNAP 16 +#define TFM_MODAL_REMOVE_SNAP 17 /* 18 and 19 used by numinput, defined in transform.h * */ -#define TFM_MODAL_PROPSIZE_UP 20 -#define TFM_MODAL_PROPSIZE_DOWN 21 +#define TFM_MODAL_PROPSIZE_UP 20 +#define TFM_MODAL_PROPSIZE_DOWN 21 #define TFM_MODAL_AUTOIK_LEN_INC 22 #define TFM_MODAL_AUTOIK_LEN_DEC 23 #define TFM_MODAL_EDGESLIDE_UP 24 #define TFM_MODAL_EDGESLIDE_DOWN 25 -#define TFM_WHEEL_DOWN_EVT TFM_MODAL_PROPSIZE_DOWN|TFM_MODAL_EDGESLIDE_DOWN -#define TFM_WHEEL_UP_EVT TFM_MODAL_PROPSIZE_UP|TFM_MODAL_EDGESLIDE_UP - /* called in transform_ops.c, on each regeneration of keymaps */ -wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf) +wmKeyMap *transform_modal_keymap(wmKeyConfig *keyconf) { static EnumPropertyItem modal_items[] = { - {TFM_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, - {TFM_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""}, - {TFM_MODAL_TRANSLATE, "TRANSLATE", 0, "Translate", ""}, - {TFM_MODAL_ROTATE, "ROTATE", 0, "Rotate", ""}, - {TFM_MODAL_RESIZE, "RESIZE", 0, "Resize", ""}, - {TFM_MODAL_SNAP_INV_ON, "SNAP_INV_ON", 0, "Invert Snap On", ""}, - {TFM_MODAL_SNAP_INV_OFF, "SNAP_INV_OFF", 0, "Invert Snap Off", ""}, - {TFM_MODAL_SNAP_TOGGLE, "SNAP_TOGGLE", 0, "Snap Toggle", ""}, - {TFM_MODAL_AXIS_X, "AXIS_X", 0, "Orientation X axis", ""}, - {TFM_MODAL_AXIS_Y, "AXIS_Y", 0, "Orientation Y axis", ""}, - {TFM_MODAL_AXIS_Z, "AXIS_Z", 0, "Orientation Z axis", ""}, - {TFM_MODAL_PLANE_X, "PLANE_X", 0, "Orientation X plane", ""}, - {TFM_MODAL_PLANE_Y, "PLANE_Y", 0, "Orientation Y plane", ""}, - {TFM_MODAL_PLANE_Z, "PLANE_Z", 0, "Orientation Z plane", ""}, - {TFM_MODAL_CONS_OFF, "CONS_OFF", 0, "Remove Constraints", ""}, - {TFM_MODAL_ADD_SNAP, "ADD_SNAP", 0, "Add Snap Point", ""}, - {TFM_MODAL_REMOVE_SNAP, "REMOVE_SNAP", 0, "Remove Last Snap Point", ""}, - {NUM_MODAL_INCREMENT_UP, "INCREMENT_UP", 0, "Numinput Increment Up", ""}, - {NUM_MODAL_INCREMENT_DOWN, "INCREMENT_DOWN", 0, "Numinput Increment Down", ""}, - {TFM_MODAL_PROPSIZE_UP, "PROPORTIONAL_SIZE_UP", 0, "Increase Proportional Influence", ""}, - {TFM_MODAL_PROPSIZE_DOWN, "PROPORTIONAL_SIZE_DOWN", 0, "Decrease Proportional Influence", ""}, - {TFM_MODAL_AUTOIK_LEN_INC, "AUTOIK_CHAIN_LEN_UP", 0, "Increase Max AutoIK Chain Length", ""}, - {TFM_MODAL_AUTOIK_LEN_DEC, "AUTOIK_CHAIN_LEN_DOWN", 0, "Decrease Max AutoIK Chain Length", ""}, - {TFM_MODAL_EDGESLIDE_UP, "EDGESLIDE_EDGE_NEXT", 0, "Select next Edge Slide Edge", ""}, - {TFM_MODAL_EDGESLIDE_DOWN, "EDGESLIDE_PREV_NEXT", 0, "Select previous Edge Slide Edge", ""}, - {0, NULL, 0, NULL, NULL}}; - - wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Transform Modal Map"); + {TFM_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, + {TFM_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""}, + {TFM_MODAL_TRANSLATE, "TRANSLATE", 0, "Translate", ""}, + {TFM_MODAL_ROTATE, "ROTATE", 0, "Rotate", ""}, + {TFM_MODAL_RESIZE, "RESIZE", 0, "Resize", ""}, + {TFM_MODAL_SNAP_INV_ON, "SNAP_INV_ON", 0, "Invert Snap On", ""}, + {TFM_MODAL_SNAP_INV_OFF, "SNAP_INV_OFF", 0, "Invert Snap Off", ""}, + {TFM_MODAL_SNAP_TOGGLE, "SNAP_TOGGLE", 0, "Snap Toggle", ""}, + {TFM_MODAL_AXIS_X, "AXIS_X", 0, "Orientation X axis", ""}, + {TFM_MODAL_AXIS_Y, "AXIS_Y", 0, "Orientation Y axis", ""}, + {TFM_MODAL_AXIS_Z, "AXIS_Z", 0, "Orientation Z axis", ""}, + {TFM_MODAL_PLANE_X, "PLANE_X", 0, "Orientation X plane", ""}, + {TFM_MODAL_PLANE_Y, "PLANE_Y", 0, "Orientation Y plane", ""}, + {TFM_MODAL_PLANE_Z, "PLANE_Z", 0, "Orientation Z plane", ""}, + {TFM_MODAL_CONS_OFF, "CONS_OFF", 0, "Remove Constraints", ""}, + {TFM_MODAL_ADD_SNAP, "ADD_SNAP", 0, "Add Snap Point", ""}, + {TFM_MODAL_REMOVE_SNAP, "REMOVE_SNAP", 0, "Remove Last Snap Point", ""}, + {NUM_MODAL_INCREMENT_UP, "INCREMENT_UP", 0, "Numinput Increment Up", ""}, + {NUM_MODAL_INCREMENT_DOWN, "INCREMENT_DOWN", 0, "Numinput Increment Down", ""}, + {TFM_MODAL_PROPSIZE_UP, "PROPORTIONAL_SIZE_UP", 0, "Increase Proportional Influence", ""}, + {TFM_MODAL_PROPSIZE_DOWN, "PROPORTIONAL_SIZE_DOWN", 0, "Decrease Proportional Influence", ""}, + {TFM_MODAL_AUTOIK_LEN_INC, "AUTOIK_CHAIN_LEN_UP", 0, "Increase Max AutoIK Chain Length", ""}, + {TFM_MODAL_AUTOIK_LEN_DEC, "AUTOIK_CHAIN_LEN_DOWN", 0, "Decrease Max AutoIK Chain Length", ""}, + {TFM_MODAL_EDGESLIDE_UP, "EDGESLIDE_EDGE_NEXT", 0, "Select next Edge Slide Edge", ""}, + {TFM_MODAL_EDGESLIDE_DOWN, "EDGESLIDE_PREV_NEXT", 0, "Select previous Edge Slide Edge", ""}, + {0, NULL, 0, NULL, NULL} + }; + + wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Transform Modal Map"); /* this function is called for each spacetype, only needs to add map once */ if (keymap && keymap->modal_items) return NULL; - keymap= WM_modalkeymap_add(keyconf, "Transform Modal Map", modal_items); + keymap = WM_modalkeymap_add(keyconf, "Transform Modal Map", modal_items); /* items for modal map */ WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CANCEL); @@ -603,8 +651,11 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf) WM_modalkeymap_add_item(keymap, PAGEUPKEY, KM_PRESS, 0, 0, TFM_MODAL_PROPSIZE_UP); WM_modalkeymap_add_item(keymap, PAGEDOWNKEY, KM_PRESS, 0, 0, TFM_MODAL_PROPSIZE_DOWN); - WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, TFM_WHEEL_UP_EVT); - WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, TFM_WHEEL_DOWN_EVT); + WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, TFM_MODAL_PROPSIZE_UP); + WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, TFM_MODAL_PROPSIZE_DOWN); + + WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, KM_ALT, 0, TFM_MODAL_EDGESLIDE_UP); + WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, KM_ALT, 0, TFM_MODAL_EDGESLIDE_DOWN); WM_modalkeymap_add_item(keymap, PAGEUPKEY, KM_PRESS, KM_SHIFT, 0, TFM_MODAL_AUTOIK_LEN_INC); WM_modalkeymap_add_item(keymap, PAGEDOWNKEY, KM_PRESS, KM_SHIFT, 0, TFM_MODAL_AUTOIK_LEN_DEC); @@ -645,8 +696,7 @@ static void transform_event_xyz_constraint(TransInfo *t, short key_type, char cm msg1[sizeof(msg1) - 2] = axis; msg2[sizeof(msg2) - 2] = axis; msg3[sizeof(msg3) - 2] = axis; - constraint_plane = ((CON_AXIS0 | CON_AXIS1 | CON_AXIS2) & - (~constraint_axis)); + constraint_plane = ((CON_AXIS0 | CON_AXIS1 | CON_AXIS2) & (~constraint_axis)); if (edit_2d && (key_type != ZKEY)) { if (cmode == axis) { @@ -663,7 +713,7 @@ static void transform_event_xyz_constraint(TransInfo *t, short key_type, char cm } else { short orientation = (t->current_orientation != V3D_MANIP_GLOBAL ? - t->current_orientation : V3D_MANIP_LOCAL); + t->current_orientation : V3D_MANIP_LOCAL); if (!(t->modifiers & MOD_CONSTRAINT_PLANE)) setUserConstraint(t, orientation, constraint_axis, msg2); else if (t->modifiers & MOD_CONSTRAINT_PLANE) @@ -683,7 +733,7 @@ static void transform_event_xyz_constraint(TransInfo *t, short key_type, char cm int transformEvent(TransInfo *t, wmEvent *event) { - float mati[3][3]= MAT3_UNITY; + float mati[3][3] = MAT3_UNITY; char cmode = constraintModeToChar(t); int handled = 1; @@ -720,7 +770,7 @@ int transformEvent(TransInfo *t, wmEvent *event) break; case TFM_MODAL_TRANSLATE: /* only switch when... */ - if ( ELEM3(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL) ) { + if (ELEM3(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL) ) { resetTransRestrictions(t); restoreTransObjects(t); initTranslation(t); @@ -728,7 +778,7 @@ int transformEvent(TransInfo *t, wmEvent *event) t->redraw |= TREDRAW_HARD; } else if (t->mode == TFM_TRANSLATION) { - if (t->options & CTX_MOVIECLIP) { + if (t->options & (CTX_MOVIECLIP | CTX_MASK)) { restoreTransObjects(t); t->flag ^= T_ALT_TRANSFORM; @@ -738,8 +788,8 @@ int transformEvent(TransInfo *t, wmEvent *event) break; case TFM_MODAL_ROTATE: /* only switch when... */ - if (!(t->options & CTX_TEXTURE) && !(t->options & CTX_MOVIECLIP)) { - if ( ELEM4(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION) ) { + if (!(t->options & CTX_TEXTURE) && !(t->options & (CTX_MOVIECLIP | CTX_MASK))) { + if (ELEM4(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION) ) { resetTransRestrictions(t); @@ -758,13 +808,21 @@ int transformEvent(TransInfo *t, wmEvent *event) break; case TFM_MODAL_RESIZE: /* only switch when... */ - if ( ELEM3(t->mode, TFM_ROTATION, TFM_TRANSLATION, TFM_TRACKBALL) ) { + if (ELEM3(t->mode, TFM_ROTATION, TFM_TRANSLATION, TFM_TRACKBALL) ) { resetTransRestrictions(t); restoreTransObjects(t); initResize(t); initSnapping(t, NULL); // need to reinit after mode change t->redraw |= TREDRAW_HARD; } + else if (t->mode == TFM_RESIZE) { + if (t->options & CTX_MOVIECLIP) { + restoreTransObjects(t); + + t->flag ^= T_ALT_TRANSFORM; + t->redraw |= TREDRAW_HARD; + } + } break; case TFM_MODAL_SNAP_INV_ON: @@ -780,7 +838,7 @@ int transformEvent(TransInfo *t, wmEvent *event) t->redraw |= TREDRAW_HARD; break; case TFM_MODAL_AXIS_X: - if ((t->flag & T_NO_CONSTRAINT)==0) { + if ((t->flag & T_NO_CONSTRAINT) == 0) { if (cmode == 'X') { stopConstraint(t); } @@ -796,7 +854,7 @@ int transformEvent(TransInfo *t, wmEvent *event) } break; case TFM_MODAL_AXIS_Y: - if ((t->flag & T_NO_CONSTRAINT)==0) { + if ((t->flag & T_NO_CONSTRAINT) == 0) { if (cmode == 'Y') { stopConstraint(t); } @@ -812,7 +870,7 @@ int transformEvent(TransInfo *t, wmEvent *event) } break; case TFM_MODAL_AXIS_Z: - if ((t->flag & (T_NO_CONSTRAINT|T_2D_EDIT))== 0) { + if ((t->flag & (T_NO_CONSTRAINT | T_2D_EDIT)) == 0) { if (cmode == 'Z') { stopConstraint(t); } @@ -823,40 +881,40 @@ int transformEvent(TransInfo *t, wmEvent *event) } break; case TFM_MODAL_PLANE_X: - if ((t->flag & (T_NO_CONSTRAINT|T_2D_EDIT))== 0) { + if ((t->flag & (T_NO_CONSTRAINT | T_2D_EDIT)) == 0) { if (cmode == 'X') { stopConstraint(t); } else { - setUserConstraint(t, t->current_orientation, (CON_AXIS1|CON_AXIS2), "locking %s X"); + setUserConstraint(t, t->current_orientation, (CON_AXIS1 | CON_AXIS2), "locking %s X"); } t->redraw |= TREDRAW_HARD; } break; case TFM_MODAL_PLANE_Y: - if ((t->flag & (T_NO_CONSTRAINT|T_2D_EDIT))== 0) { + if ((t->flag & (T_NO_CONSTRAINT | T_2D_EDIT)) == 0) { if (cmode == 'Y') { stopConstraint(t); } else { - setUserConstraint(t, t->current_orientation, (CON_AXIS0|CON_AXIS2), "locking %s Y"); + setUserConstraint(t, t->current_orientation, (CON_AXIS0 | CON_AXIS2), "locking %s Y"); } t->redraw |= TREDRAW_HARD; } break; case TFM_MODAL_PLANE_Z: - if ((t->flag & (T_NO_CONSTRAINT|T_2D_EDIT))== 0) { + if ((t->flag & (T_NO_CONSTRAINT | T_2D_EDIT)) == 0) { if (cmode == 'Z') { stopConstraint(t); } else { - setUserConstraint(t, t->current_orientation, (CON_AXIS0|CON_AXIS1), "locking %s Z"); + setUserConstraint(t, t->current_orientation, (CON_AXIS0 | CON_AXIS1), "locking %s Z"); } t->redraw |= TREDRAW_HARD; } break; case TFM_MODAL_CONS_OFF: - if ((t->flag & T_NO_CONSTRAINT)==0) { + if ((t->flag & T_NO_CONSTRAINT) == 0) { stopConstraint(t); t->redraw |= TREDRAW_HARD; } @@ -869,22 +927,26 @@ int transformEvent(TransInfo *t, wmEvent *event) removeSnapPoint(t); t->redraw |= TREDRAW_HARD; break; - case TFM_WHEEL_UP_EVT: + case TFM_MODAL_PROPSIZE_UP: if (t->flag & T_PROP_EDIT) { - t->prop_size*= 1.1f; - if (t->spacetype==SPACE_VIEW3D && t->persp != RV3D_ORTHO) - t->prop_size= MIN2(t->prop_size, ((View3D *)t->view)->far); + t->prop_size *= 1.1f; + if (t->spacetype == SPACE_VIEW3D && t->persp != RV3D_ORTHO) + t->prop_size = MIN2(t->prop_size, ((View3D *)t->view)->far); calculatePropRatio(t); } t->redraw |= TREDRAW_HARD; break; - case TFM_WHEEL_DOWN_EVT: + case TFM_MODAL_PROPSIZE_DOWN: if (t->flag & T_PROP_EDIT) { - t->prop_size*= 0.90909090f; + t->prop_size *= 0.90909090f; calculatePropRatio(t); } t->redraw |= TREDRAW_HARD; break; + case TFM_MODAL_EDGESLIDE_UP: + case TFM_MODAL_EDGESLIDE_DOWN: + t->redraw |= TREDRAW_HARD; + break; case TFM_MODAL_AUTOIK_LEN_INC: if (t->flag & T_AUTOIK) transform_autoik_update(t, 1); @@ -906,170 +968,170 @@ int transformEvent(TransInfo *t, wmEvent *event) /* else do non-mapped events */ else if (event->val == KM_PRESS) { switch (event->type) { - case RIGHTMOUSE: - t->state = TRANS_CANCEL; - break; - /* enforce redraw of transform when modifiers are used */ - case LEFTSHIFTKEY: - case RIGHTSHIFTKEY: - t->modifiers |= MOD_CONSTRAINT_PLANE; - t->redraw |= TREDRAW_HARD; - break; + case RIGHTMOUSE: + t->state = TRANS_CANCEL; + break; + /* enforce redraw of transform when modifiers are used */ + case LEFTSHIFTKEY: + case RIGHTSHIFTKEY: + t->modifiers |= MOD_CONSTRAINT_PLANE; + t->redraw |= TREDRAW_HARD; + break; - case SPACEKEY: - if ((t->spacetype==SPACE_VIEW3D) && event->alt) { + case SPACEKEY: + if ((t->spacetype == SPACE_VIEW3D) && event->alt) { #if 0 // TRANSFORM_FIX_ME - int mval[2]; + int mval[2]; - getmouseco_sc(mval); - BIF_selectOrientation(); - calc_manipulator_stats(curarea); - copy_m3_m4(t->spacemtx, G.vd->twmat); - warp_pointer(mval[0], mval[1]); + getmouseco_sc(mval); + BIF_selectOrientation(); + calc_manipulator_stats(curarea); + copy_m3_m4(t->spacemtx, G.vd->twmat); + warp_pointer(mval[0], mval[1]); #endif - } - else { - t->state = TRANS_CONFIRM; - } - break; - - case MIDDLEMOUSE: - if ((t->flag & T_NO_CONSTRAINT)==0) { - /* exception for switching to dolly, or trackball, in camera view */ - if (t->flag & T_CAMERA) { - if (t->mode==TFM_TRANSLATION) - setLocalConstraint(t, (CON_AXIS2), "along local Z"); - else if (t->mode==TFM_ROTATION) { - restoreTransObjects(t); - initTrackball(t); - } } else { - t->modifiers |= MOD_CONSTRAINT_SELECT; - if (t->con.mode & CON_APPLY) { - stopConstraint(t); + t->state = TRANS_CONFIRM; + } + break; + + case MIDDLEMOUSE: + if ((t->flag & T_NO_CONSTRAINT) == 0) { + /* exception for switching to dolly, or trackball, in camera view */ + if (t->flag & T_CAMERA) { + if (t->mode == TFM_TRANSLATION) + setLocalConstraint(t, (CON_AXIS2), "along local Z"); + else if (t->mode == TFM_ROTATION) { + restoreTransObjects(t); + initTrackball(t); + } } else { - if (event->shift) { - initSelectConstraint(t, t->spacemtx); + t->modifiers |= MOD_CONSTRAINT_SELECT; + if (t->con.mode & CON_APPLY) { + stopConstraint(t); } else { - /* bit hackish... but it prevents mmb select to print the orientation from menu */ - strcpy(t->spacename, "global"); - initSelectConstraint(t, mati); + if (event->shift) { + initSelectConstraint(t, t->spacemtx); + } + else { + /* bit hackish... but it prevents mmb select to print the orientation from menu */ + strcpy(t->spacename, "global"); + initSelectConstraint(t, mati); + } + postSelectConstraint(t); } - postSelectConstraint(t); } + t->redraw |= TREDRAW_HARD; } - t->redraw |= TREDRAW_HARD; - } - break; - case ESCKEY: - t->state = TRANS_CANCEL; - break; - case PADENTER: - case RETKEY: - t->state = TRANS_CONFIRM; - break; - case GKEY: - /* only switch when... */ - if ( ELEM3(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL) ) { - resetTransRestrictions(t); - restoreTransObjects(t); - initTranslation(t); - initSnapping(t, NULL); // need to reinit after mode change - t->redraw |= TREDRAW_HARD; - } - break; - case SKEY: - /* only switch when... */ - if ( ELEM3(t->mode, TFM_ROTATION, TFM_TRANSLATION, TFM_TRACKBALL) ) { - resetTransRestrictions(t); - restoreTransObjects(t); - initResize(t); - initSnapping(t, NULL); // need to reinit after mode change - t->redraw |= TREDRAW_HARD; - } - break; - case RKEY: - /* only switch when... */ - if (!(t->options & CTX_TEXTURE) && !(t->options & CTX_MOVIECLIP)) { - if ( ELEM4(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION) ) { - + break; + case ESCKEY: + t->state = TRANS_CANCEL; + break; + case PADENTER: + case RETKEY: + t->state = TRANS_CONFIRM; + break; + case GKEY: + /* only switch when... */ + if (ELEM3(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL) ) { + resetTransRestrictions(t); + restoreTransObjects(t); + initTranslation(t); + initSnapping(t, NULL); // need to reinit after mode change + t->redraw |= TREDRAW_HARD; + } + break; + case SKEY: + /* only switch when... */ + if (ELEM3(t->mode, TFM_ROTATION, TFM_TRANSLATION, TFM_TRACKBALL) ) { resetTransRestrictions(t); + restoreTransObjects(t); + initResize(t); + initSnapping(t, NULL); // need to reinit after mode change + t->redraw |= TREDRAW_HARD; + } + break; + case RKEY: + /* only switch when... */ + if (!(t->options & CTX_TEXTURE)) { + if (ELEM4(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION) ) { - if (t->mode == TFM_ROTATION) { - restoreTransObjects(t); - initTrackball(t); - } - else { - restoreTransObjects(t); - initRotation(t); + resetTransRestrictions(t); + + if (t->mode == TFM_ROTATION) { + restoreTransObjects(t); + initTrackball(t); + } + else { + restoreTransObjects(t); + initRotation(t); + } + initSnapping(t, NULL); // need to reinit after mode change + t->redraw |= TREDRAW_HARD; } - initSnapping(t, NULL); // need to reinit after mode change + } + break; + case CKEY: + if (event->alt) { + t->flag ^= T_PROP_CONNECTED; + sort_trans_data_dist(t); + calculatePropRatio(t); + t->redraw = 1; + } + else { + stopConstraint(t); t->redraw |= TREDRAW_HARD; } - } - break; - case CKEY: - if (event->alt) { - t->flag ^= T_PROP_CONNECTED; - sort_trans_data_dist(t); - calculatePropRatio(t); - t->redraw= 1; - } - else { - stopConstraint(t); - t->redraw |= TREDRAW_HARD; - } - break; - case XKEY: - case YKEY: - case ZKEY: - transform_event_xyz_constraint(t, event->type, cmode); - break; - case OKEY: - if (t->flag & T_PROP_EDIT && event->shift) { - t->prop_mode = (t->prop_mode + 1) % PROP_MODE_MAX; - calculatePropRatio(t); - t->redraw |= TREDRAW_HARD; - } - break; - case PADPLUSKEY: - if (event->alt && t->flag & T_PROP_EDIT) { - t->prop_size *= 1.1f; - if (t->spacetype==SPACE_VIEW3D && t->persp != RV3D_ORTHO) - t->prop_size= MIN2(t->prop_size, ((View3D *)t->view)->far); - calculatePropRatio(t); - } - t->redraw= 1; - break; - case PAGEUPKEY: - case WHEELDOWNMOUSE: - if (t->flag & T_AUTOIK) { - transform_autoik_update(t, 1); - } - else view_editmove(event->type); - t->redraw= 1; - break; - case PADMINUS: - if (event->alt && t->flag & T_PROP_EDIT) { - t->prop_size*= 0.90909090f; - calculatePropRatio(t); - } - t->redraw= 1; - break; - case PAGEDOWNKEY: - case WHEELUPMOUSE: - if (t->flag & T_AUTOIK) { - transform_autoik_update(t, -1); - } - else view_editmove(event->type); - t->redraw= 1; - break; - default: - handled = 0; - break; + break; + case XKEY: + case YKEY: + case ZKEY: + transform_event_xyz_constraint(t, event->type, cmode); + break; + case OKEY: + if (t->flag & T_PROP_EDIT && event->shift) { + t->prop_mode = (t->prop_mode + 1) % PROP_MODE_MAX; + calculatePropRatio(t); + t->redraw |= TREDRAW_HARD; + } + break; + case PADPLUSKEY: + if (event->alt && t->flag & T_PROP_EDIT) { + t->prop_size *= 1.1f; + if (t->spacetype == SPACE_VIEW3D && t->persp != RV3D_ORTHO) + t->prop_size = MIN2(t->prop_size, ((View3D *)t->view)->far); + calculatePropRatio(t); + } + t->redraw = 1; + break; + case PAGEUPKEY: + case WHEELDOWNMOUSE: + if (t->flag & T_AUTOIK) { + transform_autoik_update(t, 1); + } + else view_editmove(event->type); + t->redraw = 1; + break; + case PADMINUS: + if (event->alt && t->flag & T_PROP_EDIT) { + t->prop_size *= 0.90909090f; + calculatePropRatio(t); + } + t->redraw = 1; + break; + case PAGEDOWNKEY: + case WHEELUPMOUSE: + if (t->flag & T_AUTOIK) { + transform_autoik_update(t, -1); + } + else view_editmove(event->type); + t->redraw = 1; + break; + default: + handled = 0; + break; } // Numerical input events @@ -1079,30 +1141,30 @@ int transformEvent(TransInfo *t, wmEvent *event) t->redraw |= handleSnapping(t, event); } - else if (event->val==KM_RELEASE) { + else if (event->val == KM_RELEASE) { switch (event->type) { - case LEFTSHIFTKEY: - case RIGHTSHIFTKEY: - t->modifiers &= ~MOD_CONSTRAINT_PLANE; - t->redraw |= TREDRAW_HARD; - break; - - case MIDDLEMOUSE: - if ((t->flag & T_NO_CONSTRAINT)==0) { - t->modifiers &= ~MOD_CONSTRAINT_SELECT; - postSelectConstraint(t); + case LEFTSHIFTKEY: + case RIGHTSHIFTKEY: + t->modifiers &= ~MOD_CONSTRAINT_PLANE; t->redraw |= TREDRAW_HARD; - } - break; + break; + + case MIDDLEMOUSE: + if ((t->flag & T_NO_CONSTRAINT) == 0) { + t->modifiers &= ~MOD_CONSTRAINT_SELECT; + postSelectConstraint(t); + t->redraw |= TREDRAW_HARD; + } + break; // case LEFTMOUSE: // case RIGHTMOUSE: // if (WM_modal_tweak_exit(event, t->event_type)) //// if (t->options & CTX_TWEAK) // t->state = TRANS_CONFIRM; // break; - default: - handled = 0; - break; + default: + handled = 0; + break; } /* confirm transform if launch key is released after mouse move */ @@ -1124,10 +1186,10 @@ int transformEvent(TransInfo *t, wmEvent *event) return OPERATOR_PASS_THROUGH; } -int calculateTransformCenter(bContext *C, int centerMode, float *cent3d, int *cent2d) +int calculateTransformCenter(bContext *C, int centerMode, float cent3d[3], int cent2d[2]) { TransInfo *t = MEM_callocN(sizeof(TransInfo), "TransInfo data"); - int success = 1; + int success; t->state = TRANS_RUNNING; @@ -1135,17 +1197,17 @@ int calculateTransformCenter(bContext *C, int centerMode, float *cent3d, int *ce t->mode = TFM_DUMMY; - initTransInfo(C, t, NULL, NULL); // internal data, mouse, vectors + initTransInfo(C, t, NULL, NULL); // internal data, mouse, vectors - createTransData(C, t); // make TransData structs from selection + createTransData(C, t); // make TransData structs from selection - t->around = centerMode; // override userdefined mode + t->around = centerMode; // override userdefined mode if (t->total == 0) { - success = 0; + success = FALSE; } else { - success = 1; + success = TRUE; calculateCenter(t); @@ -1243,7 +1305,7 @@ static void drawArc(float size, float angle_start, float angle_end, int segments glBegin(GL_LINE_STRIP); - for ( angle = angle_start; angle < angle_end; angle += delta) { + for (angle = angle_start; angle < angle_end; angle += delta) { glVertex2f(cosf(angle) * size, sinf(angle) * size); } glVertex2f(cosf(angle_end) * size, sinf(angle_end) * size); @@ -1253,35 +1315,35 @@ static void drawArc(float size, float angle_start, float angle_end, int segments static int helpline_poll(bContext *C) { - ARegion *ar= CTX_wm_region(C); + ARegion *ar = CTX_wm_region(C); - if (ar && ar->regiontype==RGN_TYPE_WINDOW) + if (ar && ar->regiontype == RGN_TYPE_WINDOW) return 1; return 0; } static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata) { - TransInfo *t = (TransInfo*)customdata; + TransInfo *t = (TransInfo *)customdata; if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) { float vecrot[3], cent[2]; int mval[2]; - mval[0]= x; - mval[1]= y; + mval[0] = x; + mval[1] = y; copy_v3_v3(vecrot, t->center); if (t->flag & T_EDIT) { - Object *ob= t->obedit; + Object *ob = t->obedit; if (ob) mul_m4_v3(ob->obmat, vecrot); } else if (t->flag & T_POSE) { - Object *ob=t->poseobj; + Object *ob = t->poseobj; if (ob) mul_m4_v3(ob->obmat, vecrot); } - projectFloatView(t, vecrot, cent); // no overflow in extreme cases + projectFloatView(t, vecrot, cent); // no overflow in extreme cases glPushMatrix(); @@ -1326,67 +1388,67 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata) glLineWidth(1.0); break; case HLP_ANGLE: - { - float dx = t->mval[0] - cent[0], dy = t->mval[1] - cent[1]; - float angle = atan2f(dy, dx); - float dist = sqrtf(dx*dx + dy*dy); - float delta_angle = MIN2(15.0f / dist, (float)M_PI/4.0f); - float spacing_angle = MIN2(5.0f / dist, (float)M_PI/12.0f); - UI_ThemeColor(TH_WIRE); + { + float dx = t->mval[0] - cent[0], dy = t->mval[1] - cent[1]; + float angle = atan2f(dy, dx); + float dist = sqrtf(dx * dx + dy * dy); + float delta_angle = MIN2(15.0f / dist, (float)M_PI / 4.0f); + float spacing_angle = MIN2(5.0f / dist, (float)M_PI / 12.0f); + UI_ThemeColor(TH_WIRE); - setlinestyle(3); - glBegin(GL_LINE_STRIP); - glVertex2iv(t->mval); - glVertex2fv(cent); - glEnd(); + setlinestyle(3); + glBegin(GL_LINE_STRIP); + glVertex2iv(t->mval); + glVertex2fv(cent); + glEnd(); - glTranslatef(cent[0] - t->mval[0] + mval[0], cent[1] - t->mval[1] + mval[1], 0); + glTranslatef(cent[0] - t->mval[0] + mval[0], cent[1] - t->mval[1] + mval[1], 0); - setlinestyle(0); - glLineWidth(3.0); - drawArc(dist, angle - delta_angle, angle - spacing_angle, 10); - drawArc(dist, angle + spacing_angle, angle + delta_angle, 10); + setlinestyle(0); + glLineWidth(3.0); + drawArc(dist, angle - delta_angle, angle - spacing_angle, 10); + drawArc(dist, angle + spacing_angle, angle + delta_angle, 10); - glPushMatrix(); + glPushMatrix(); - glTranslatef(cosf(angle - delta_angle) * dist, sinf(angle - delta_angle) * dist, 0); - glRotatef(RAD2DEGF(angle - delta_angle), 0, 0, 1); + glTranslatef(cosf(angle - delta_angle) * dist, sinf(angle - delta_angle) * dist, 0); + glRotatef(RAD2DEGF(angle - delta_angle), 0, 0, 1); - drawArrowHead(DOWN, 5); + drawArrowHead(DOWN, 5); - glPopMatrix(); + glPopMatrix(); - glTranslatef(cosf(angle + delta_angle) * dist, sinf(angle + delta_angle) * dist, 0); - glRotatef(RAD2DEGF(angle + delta_angle), 0, 0, 1); + glTranslatef(cosf(angle + delta_angle) * dist, sinf(angle + delta_angle) * dist, 0); + glRotatef(RAD2DEGF(angle + delta_angle), 0, 0, 1); - drawArrowHead(UP, 5); + drawArrowHead(UP, 5); - glLineWidth(1.0); - break; - } - case HLP_TRACKBALL: - { - unsigned char col[3], col2[3]; - UI_GetThemeColor3ubv(TH_GRID, col); + glLineWidth(1.0); + break; + } + case HLP_TRACKBALL: + { + unsigned char col[3], col2[3]; + UI_GetThemeColor3ubv(TH_GRID, col); - glTranslatef(mval[0], mval[1], 0); + glTranslatef(mval[0], mval[1], 0); - glLineWidth(3.0); + glLineWidth(3.0); - UI_make_axis_color(col, col2, 'X'); - glColor3ubv((GLubyte *)col2); + UI_make_axis_color(col, col2, 'X'); + glColor3ubv((GLubyte *)col2); - drawArrow(RIGHT, 5, 10, 5); - drawArrow(LEFT, 5, 10, 5); + drawArrow(RIGHT, 5, 10, 5); + drawArrow(LEFT, 5, 10, 5); - UI_make_axis_color(col, col2, 'Y'); - glColor3ubv((GLubyte *)col2); + UI_make_axis_color(col, col2, 'Y'); + glColor3ubv((GLubyte *)col2); - drawArrow(UP, 5, 10, 5); - drawArrow(DOWN, 5, 10, 5); - glLineWidth(1.0); - break; - } + drawArrow(UP, 5, 10, 5); + drawArrow(DOWN, 5, 10, 5); + glLineWidth(1.0); + break; + } } glPopMatrix(); @@ -1420,12 +1482,12 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) PropertyRNA *prop; // Save back mode in case we're in the generic operator - if ((prop= RNA_struct_find_property(op->ptr, "mode"))) { + if ((prop = RNA_struct_find_property(op->ptr, "mode"))) { RNA_property_enum_set(op->ptr, prop, t->mode); } - if ((prop= RNA_struct_find_property(op->ptr, "value"))) { - float *values= (t->flag & T_AUTOVALUES) ? t->auto_values : t->values; + if ((prop = RNA_struct_find_property(op->ptr, "value"))) { + float *values = (t->flag & T_AUTOVALUES) ? t->auto_values : t->values; if (RNA_property_array_check(prop)) { RNA_property_float_set_array(op->ptr, prop, values); } @@ -1435,8 +1497,8 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) } /* convert flag to enum */ - switch (t->flag & (T_PROP_EDIT|T_PROP_CONNECTED)) { - case (T_PROP_EDIT|T_PROP_CONNECTED): + switch (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) { + case (T_PROP_EDIT | T_PROP_CONNECTED): proportional = PROP_EDIT_CONNECTED; break; case T_PROP_EDIT: @@ -1455,6 +1517,8 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) { if (t->obedit) ts->proportional = proportional; + else if (t->options & CTX_MASK) + ts->proportional_mask = (proportional != PROP_EDIT_OFF); else ts->proportional_objects = (proportional != PROP_EDIT_OFF); } @@ -1543,7 +1607,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int t->state = TRANS_STARTING; - if ( (prop = RNA_struct_find_property(op->ptr, "texture_space")) && RNA_property_is_set(op->ptr, prop)) { + if ((prop = RNA_struct_find_property(op->ptr, "texture_space")) && RNA_property_is_set(op->ptr, prop)) { if (RNA_property_boolean_get(op->ptr, prop)) { options |= CTX_TEXTURE; } @@ -1590,12 +1654,11 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int else if (t->spacetype == SPACE_CLIP) { unit_m3(t->spacemtx); t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); - t->options |= CTX_MOVIECLIP; } else unit_m3(t->spacemtx); - createTransData(C, t); // make TransData structs from selection + createTransData(C, t); // make TransData structs from selection if (t->total == 0) { postTrans(C, t); @@ -1635,111 +1698,114 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int initMouseInput(t, &t->mouse, t->center2d, t->imval); switch (mode) { - case TFM_TRANSLATION: - initTranslation(t); - break; - case TFM_ROTATION: - initRotation(t); - break; - case TFM_RESIZE: - initResize(t); - break; - case TFM_SKIN_RESIZE: - initSkinResize(t); - break; - case TFM_TOSPHERE: - initToSphere(t); - break; - case TFM_SHEAR: - initShear(t); - break; - case TFM_WARP: - initWarp(t); - break; - case TFM_SHRINKFATTEN: - initShrinkFatten(t); - break; - case TFM_TILT: - initTilt(t); - break; - case TFM_CURVE_SHRINKFATTEN: - initCurveShrinkFatten(t); - break; - case TFM_TRACKBALL: - initTrackball(t); - break; - case TFM_PUSHPULL: - initPushPull(t); - break; - case TFM_CREASE: - initCrease(t); - break; - case TFM_BONESIZE: - { /* used for both B-Bone width (bonesize) as for deform-dist (envelope) */ - bArmature *arm= t->poseobj->data; - if (arm->drawtype==ARM_ENVELOPE) + case TFM_TRANSLATION: + initTranslation(t); + break; + case TFM_ROTATION: + initRotation(t); + break; + case TFM_RESIZE: + initResize(t); + break; + case TFM_SKIN_RESIZE: + initSkinResize(t); + break; + case TFM_TOSPHERE: + initToSphere(t); + break; + case TFM_SHEAR: + initShear(t); + break; + case TFM_WARP: + initWarp(t); + break; + case TFM_SHRINKFATTEN: + initShrinkFatten(t); + break; + case TFM_TILT: + initTilt(t); + break; + case TFM_CURVE_SHRINKFATTEN: + initCurveShrinkFatten(t); + break; + case TFM_MASK_SHRINKFATTEN: + initMaskShrinkFatten(t); + break; + case TFM_TRACKBALL: + initTrackball(t); + break; + case TFM_PUSHPULL: + initPushPull(t); + break; + case TFM_CREASE: + initCrease(t); + break; + case TFM_BONESIZE: + { /* used for both B-Bone width (bonesize) as for deform-dist (envelope) */ + bArmature *arm = t->poseobj->data; + if (arm->drawtype == ARM_ENVELOPE) initBoneEnvelope(t); else initBoneSize(t); } break; - case TFM_BONE_ENVELOPE: - initBoneEnvelope(t); - break; - case TFM_EDGE_SLIDE: - initEdgeSlide(t); - break; - case TFM_BONE_ROLL: - initBoneRoll(t); - break; - case TFM_TIME_TRANSLATE: - initTimeTranslate(t); - break; - case TFM_TIME_SLIDE: - initTimeSlide(t); - break; - case TFM_TIME_SCALE: - initTimeScale(t); - break; - case TFM_TIME_DUPLICATE: - /* same as TFM_TIME_EXTEND, but we need the mode info for later - * so that duplicate-culling will work properly - */ - if (ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) - initTranslation(t); - else - initTimeTranslate(t); - t->mode = mode; - break; - case TFM_TIME_EXTEND: - /* now that transdata has been made, do like for TFM_TIME_TRANSLATE (for most Animation - * Editors because they have only 1D transforms for time values) or TFM_TRANSLATION - * (for Graph/NLA Editors only since they uses 'standard' transforms to get 2D movement) - * depending on which editor this was called from - */ - if (ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) - initTranslation(t); - else + case TFM_BONE_ENVELOPE: + initBoneEnvelope(t); + break; + case TFM_EDGE_SLIDE: + initEdgeSlide(t); + break; + case TFM_BONE_ROLL: + initBoneRoll(t); + break; + case TFM_TIME_TRANSLATE: initTimeTranslate(t); - break; - case TFM_BAKE_TIME: - initBakeTime(t); - break; - case TFM_MIRROR: - initMirror(t); - break; - case TFM_BEVEL: - initBevel(t); - break; - case TFM_BWEIGHT: - initBevelWeight(t); - break; - case TFM_ALIGN: - initAlign(t); - break; - case TFM_SEQ_SLIDE: - initSeqSlide(t); - break; + break; + case TFM_TIME_SLIDE: + initTimeSlide(t); + break; + case TFM_TIME_SCALE: + initTimeScale(t); + break; + case TFM_TIME_DUPLICATE: + /* same as TFM_TIME_EXTEND, but we need the mode info for later + * so that duplicate-culling will work properly + */ + if (ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) + initTranslation(t); + else + initTimeTranslate(t); + t->mode = mode; + break; + case TFM_TIME_EXTEND: + /* now that transdata has been made, do like for TFM_TIME_TRANSLATE (for most Animation + * Editors because they have only 1D transforms for time values) or TFM_TRANSLATION + * (for Graph/NLA Editors only since they uses 'standard' transforms to get 2D movement) + * depending on which editor this was called from + */ + if (ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) + initTranslation(t); + else + initTimeTranslate(t); + break; + case TFM_BAKE_TIME: + initBakeTime(t); + break; + case TFM_MIRROR: + initMirror(t); + break; + case TFM_BEVEL: + initBevel(t); + break; + case TFM_BWEIGHT: + initBevelWeight(t); + break; + case TFM_ALIGN: + initAlign(t); + break; + case TFM_SEQ_SLIDE: + initSeqSlide(t); + break; } if (t->state == TRANS_CANCEL) { @@ -1750,13 +1816,13 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int /* overwrite initial values if operator supplied a non-null vector */ if ((prop = RNA_struct_find_property(op->ptr, "value")) && RNA_property_is_set(op->ptr, prop)) { - float values[4]= {0}; /* in case value isn't length 4, avoid uninitialized memory */ + float values[4] = {0}; /* in case value isn't length 4, avoid uninitialized memory */ if (RNA_property_array_check(prop)) { RNA_float_get_array(op->ptr, "value", values); } else { - values[0]= RNA_float_get(op->ptr, "value"); + values[0] = RNA_float_get(op->ptr, "value"); } copy_v4_v4(t->values, values); @@ -1849,11 +1915,11 @@ int transformEnd(bContext *C, TransInfo *t) /* handle restoring objects */ if (t->state == TRANS_CANCEL) { /* exception, edge slide transformed UVs too */ - if (t->mode==TFM_EDGE_SLIDE) + if (t->mode == TFM_EDGE_SLIDE) doEdgeSlide(t, 0.0f); exit_code = OPERATOR_CANCELLED; - restoreTransObjects(t); // calls recalcData() + restoreTransObjects(t); // calls recalcData() } else { exit_code = OPERATOR_FINISHED; @@ -1877,7 +1943,7 @@ int transformEnd(bContext *C, TransInfo *t) // if (t->undostr) ED_undo_push(C, t->undostr); // else ED_undo_push(C, transform_to_undostr(t)); } - t->undostr= NULL; + t->undostr = NULL; viewRedrawForce(C, t); } @@ -1892,31 +1958,31 @@ int transformEnd(bContext *C, TransInfo *t) static void protectedTransBits(short protectflag, float *vec) { if (protectflag & OB_LOCK_LOCX) - vec[0]= 0.0f; + vec[0] = 0.0f; if (protectflag & OB_LOCK_LOCY) - vec[1]= 0.0f; + vec[1] = 0.0f; if (protectflag & OB_LOCK_LOCZ) - vec[2]= 0.0f; + vec[2] = 0.0f; } static void protectedSizeBits(short protectflag, float *size) { if (protectflag & OB_LOCK_SCALEX) - size[0]= 1.0f; + size[0] = 1.0f; if (protectflag & OB_LOCK_SCALEY) - size[1]= 1.0f; + size[1] = 1.0f; if (protectflag & OB_LOCK_SCALEZ) - size[2]= 1.0f; + size[2] = 1.0f; } static void protectedRotateBits(short protectflag, float *eul, float *oldeul) { if (protectflag & OB_LOCK_ROTX) - eul[0]= oldeul[0]; + eul[0] = oldeul[0]; if (protectflag & OB_LOCK_ROTY) - eul[1]= oldeul[1]; + eul[1] = oldeul[1]; if (protectflag & OB_LOCK_ROTZ) - eul[2]= oldeul[2]; + eul[2] = oldeul[2]; } @@ -1925,19 +1991,19 @@ static void protectedRotateBits(short protectflag, float *eul, float *oldeul) static void protectedAxisAngleBits(short protectflag, float axis[3], float *angle, float oldAxis[3], float oldAngle) { /* check that protection flags are set */ - if ((protectflag & (OB_LOCK_ROTX|OB_LOCK_ROTY|OB_LOCK_ROTZ|OB_LOCK_ROTW)) == 0) + if ((protectflag & (OB_LOCK_ROTX | OB_LOCK_ROTY | OB_LOCK_ROTZ | OB_LOCK_ROTW)) == 0) return; if (protectflag & OB_LOCK_ROT4D) { /* axis-angle getting limited as 4D entities that they are... */ if (protectflag & OB_LOCK_ROTW) - *angle= oldAngle; + *angle = oldAngle; if (protectflag & OB_LOCK_ROTX) - axis[0]= oldAxis[0]; + axis[0] = oldAxis[0]; if (protectflag & OB_LOCK_ROTY) - axis[1]= oldAxis[1]; + axis[1] = oldAxis[1]; if (protectflag & OB_LOCK_ROTZ) - axis[2]= oldAxis[2]; + axis[2] = oldAxis[2]; } else { /* axis-angle get limited with euler... */ @@ -1947,18 +2013,18 @@ static void protectedAxisAngleBits(short protectflag, float axis[3], float *angl axis_angle_to_eulO(oldeul, EULER_ORDER_DEFAULT, oldAxis, oldAngle); if (protectflag & OB_LOCK_ROTX) - eul[0]= oldeul[0]; + eul[0] = oldeul[0]; if (protectflag & OB_LOCK_ROTY) - eul[1]= oldeul[1]; + eul[1] = oldeul[1]; if (protectflag & OB_LOCK_ROTZ) - eul[2]= oldeul[2]; + eul[2] = oldeul[2]; eulO_to_axis_angle(axis, angle, eul, EULER_ORDER_DEFAULT); /* when converting to axis-angle, we need a special exception for the case when there is no axis */ if (IS_EQF(axis[0], axis[1]) && IS_EQF(axis[1], axis[2])) { /* for now, rotate around y-axis then (so that it simply becomes the roll) */ - axis[1]= 1.0f; + axis[1] = 1.0f; } } } @@ -1967,37 +2033,37 @@ static void protectedAxisAngleBits(short protectflag, float axis[3], float *angl static void protectedQuaternionBits(short protectflag, float *quat, float *oldquat) { /* check that protection flags are set */ - if ((protectflag & (OB_LOCK_ROTX|OB_LOCK_ROTY|OB_LOCK_ROTZ|OB_LOCK_ROTW)) == 0) + if ((protectflag & (OB_LOCK_ROTX | OB_LOCK_ROTY | OB_LOCK_ROTZ | OB_LOCK_ROTW)) == 0) return; if (protectflag & OB_LOCK_ROT4D) { /* quaternions getting limited as 4D entities that they are... */ if (protectflag & OB_LOCK_ROTW) - quat[0]= oldquat[0]; + quat[0] = oldquat[0]; if (protectflag & OB_LOCK_ROTX) - quat[1]= oldquat[1]; + quat[1] = oldquat[1]; if (protectflag & OB_LOCK_ROTY) - quat[2]= oldquat[2]; + quat[2] = oldquat[2]; if (protectflag & OB_LOCK_ROTZ) - quat[3]= oldquat[3]; + quat[3] = oldquat[3]; } else { /* quaternions get limited with euler... (compatibility mode) */ float eul[3], oldeul[3], nquat[4], noldquat[4]; float qlen; - qlen= normalize_qt_qt(nquat, quat); + qlen = normalize_qt_qt(nquat, quat); normalize_qt_qt(noldquat, oldquat); quat_to_eul(eul, nquat); quat_to_eul(oldeul, noldquat); if (protectflag & OB_LOCK_ROTX) - eul[0]= oldeul[0]; + eul[0] = oldeul[0]; if (protectflag & OB_LOCK_ROTY) - eul[1]= oldeul[1]; + eul[1] = oldeul[1]; if (protectflag & OB_LOCK_ROTZ) - eul[2]= oldeul[2]; + eul[2] = oldeul[2]; eul_to_quat(quat, eul); @@ -2005,7 +2071,9 @@ static void protectedQuaternionBits(short protectflag, float *quat, float *oldqu mul_qt_fl(quat, qlen); /* quaternions flip w sign to accumulate rotations correctly */ - if ( (nquat[0]<0.0f && quat[0]>0.0f) || (nquat[0]>0.0f && quat[0]<0.0f) ) { + if ((nquat[0] < 0.0f && quat[0] > 0.0f) || + (nquat[0] > 0.0f && quat[0] < 0.0f)) + { mul_qt_fl(quat, -1.0f); } } @@ -2016,22 +2084,22 @@ static void protectedQuaternionBits(short protectflag, float *quat, float *oldqu static void constraintTransLim(TransInfo *t, TransData *td) { if (td->con) { - bConstraintTypeInfo *ctiLoc= get_constraint_typeinfo(CONSTRAINT_TYPE_LOCLIMIT); - bConstraintTypeInfo *ctiDist= get_constraint_typeinfo(CONSTRAINT_TYPE_DISTLIMIT); + bConstraintTypeInfo *ctiLoc = get_constraint_typeinfo(CONSTRAINT_TYPE_LOCLIMIT); + bConstraintTypeInfo *ctiDist = get_constraint_typeinfo(CONSTRAINT_TYPE_DISTLIMIT); - bConstraintOb cob= {NULL}; + bConstraintOb cob = {NULL}; bConstraint *con; float ctime = (float)(t->scene->r.cfra); /* Make a temporary bConstraintOb for using these limit constraints - * - they only care that cob->matrix is correctly set ;-) + * - they only care that cob->matrix is correctly set ;-) * - current space should be local */ unit_m4(cob.matrix); copy_v3_v3(cob.matrix[3], td->loc); /* Evaluate valid constraints */ - for (con= td->con; con; con= con->next) { + for (con = td->con; con; con = con->next) { bConstraintTypeInfo *cti = NULL; ListBase targets = {NULL, NULL}; float tmat[4][4]; @@ -2042,16 +2110,16 @@ static void constraintTransLim(TransInfo *t, TransData *td) /* only use it if it's tagged for this purpose (and the right type) */ if (con->type == CONSTRAINT_TYPE_LOCLIMIT) { - bLocLimitConstraint *data= con->data; + bLocLimitConstraint *data = con->data; - if ((data->flag2 & LIMIT_TRANSFORM)==0) + if ((data->flag2 & LIMIT_TRANSFORM) == 0) continue; cti = ctiLoc; } else if (con->type == CONSTRAINT_TYPE_DISTLIMIT) { - bDistLimitConstraint *data= con->data; + bDistLimitConstraint *data = con->data; - if ((data->flag & LIMITDIST_TRANSFORM)==0) + if ((data->flag & LIMITDIST_TRANSFORM) == 0) continue; cti = ctiDist; } @@ -2094,7 +2162,7 @@ static void constraintTransLim(TransInfo *t, TransData *td) static void constraintob_from_transdata(bConstraintOb *cob, TransData *td) { /* Make a temporary bConstraintOb for use by limit constraints - * - they only care that cob->matrix is correctly set ;-) + * - they only care that cob->matrix is correctly set ;-) * - current space should be local */ memset(cob, 0, sizeof(bConstraintOb)); @@ -2102,8 +2170,8 @@ static void constraintob_from_transdata(bConstraintOb *cob, TransData *td) if (td->ext->rotOrder == ROT_MODE_QUAT) { /* quats */ /* objects and bones do normalization first too, otherwise - * we don't necessarily end up with a rotation matrix, and - * then conversion back to quat gives a different result */ + * we don't necessarily end up with a rotation matrix, and + * then conversion back to quat gives a different result */ float quat[4]; normalize_qt_qt(quat, td->ext->quat); quat_to_mat4(cob->matrix, quat); @@ -2122,24 +2190,24 @@ static void constraintob_from_transdata(bConstraintOb *cob, TransData *td) static void constraintRotLim(TransInfo *UNUSED(t), TransData *td) { if (td->con) { - bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_ROTLIMIT); + bConstraintTypeInfo *cti = get_constraint_typeinfo(CONSTRAINT_TYPE_ROTLIMIT); bConstraintOb cob; bConstraint *con; int do_limit = FALSE; /* Evaluate valid constraints */ - for (con= td->con; con; con= con->next) { + for (con = td->con; con; con = con->next) { /* only consider constraint if enabled */ if (con->flag & CONSTRAINT_DISABLE) continue; if (con->enforce == 0.0f) continue; /* we're only interested in Limit-Rotation constraints */ if (con->type == CONSTRAINT_TYPE_ROTLIMIT) { - bRotLimitConstraint *data= con->data; + bRotLimitConstraint *data = con->data; float tmat[4][4]; /* only use it if it's tagged for this purpose */ - if ((data->flag2 & LIMIT_TRANSFORM)==0) + if ((data->flag2 & LIMIT_TRANSFORM) == 0) continue; /* skip incompatable spacetypes */ @@ -2192,12 +2260,12 @@ static void constraintRotLim(TransInfo *UNUSED(t), TransData *td) static void constraintSizeLim(TransInfo *t, TransData *td) { if (td->con && td->ext) { - bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_SIZELIMIT); - bConstraintOb cob= {NULL}; + bConstraintTypeInfo *cti = get_constraint_typeinfo(CONSTRAINT_TYPE_SIZELIMIT); + bConstraintOb cob = {NULL}; bConstraint *con; /* Make a temporary bConstraintOb for using these limit constraints - * - they only care that cob->matrix is correctly set ;-) + * - they only care that cob->matrix is correctly set ;-) * - current space should be local */ if ((td->flag & TD_SINGLESIZE) && !(t->con.mode & CON_APPLY)) { @@ -2213,18 +2281,18 @@ static void constraintSizeLim(TransInfo *t, TransData *td) } /* Evaluate valid constraints */ - for (con= td->con; con; con= con->next) { + for (con = td->con; con; con = con->next) { /* only consider constraint if enabled */ if (con->flag & CONSTRAINT_DISABLE) continue; if (con->enforce == 0.0f) continue; /* we're only interested in Limit-Scale constraints */ if (con->type == CONSTRAINT_TYPE_SIZELIMIT) { - bSizeLimitConstraint *data= con->data; + bSizeLimitConstraint *data = con->data; float tmat[4][4]; /* only use it if it's tagged for this purpose */ - if ((data->flag2 & LIMIT_TRANSFORM)==0) + if ((data->flag2 & LIMIT_TRANSFORM) == 0) continue; /* do space conversions */ @@ -2315,8 +2383,8 @@ void initWarp(TransInfo *t) mid_v3_v3v3(t->center, min, max); - if (max[0] == min[0]) max[0] += 0.1f; /* not optimal, but flipping is better than invalid garbage (i.e. division by zero!) */ - t->val= (max[0]-min[0])/2.0f; /* t->val is X dimension projected boundbox */ + if (max[0] == min[0]) max[0] += 0.1f; /* not optimal, but flipping is better than invalid garbage (i.e. division by zero!) */ + t->val = (max[0] - min[0]) / 2.0f; /* t->val is X dimension projected boundbox */ } int handleEventWarp(TransInfo *t, wmEvent *event) @@ -2343,7 +2411,7 @@ int Warp(TransInfo *t, const int UNUSED(mval[2])) int i; char str[50]; - curs= give_cursor(t->scene, t->view); + curs = give_cursor(t->scene, t->view); /* * gcursor is the one used for helpline. * It has to be in the same space as the drawing loop @@ -2403,18 +2471,18 @@ int Warp(TransInfo *t, const int UNUSED(mval[2])) mul_m4_v3(t->viewmat, vec); sub_v3_v3(vec, t->viewmat[3]); - dist= vec[0]-cursor[0]; + dist = vec[0] - cursor[0]; /* t->val is X dimension projected boundbox */ - phi0= (circumfac*dist/t->val); + phi0 = (circumfac * dist / t->val); - vec[1]= (vec[1]-cursor[1]); + vec[1] = (vec[1] - cursor[1]); - co= (float)cos(phi0); - si= (float)sin(phi0); - loc[0]= -si*vec[1]+cursor[0]; - loc[1]= co*vec[1]+cursor[1]; - loc[2]= vec[2]; + co = (float)cos(phi0); + si = (float)sin(phi0); + loc[0] = -si * vec[1] + cursor[0]; + loc[1] = co * vec[1] + cursor[1]; + loc[2] = vec[2]; mul_m4_v3(t->viewinv, loc); sub_v3_v3(loc, t->viewinv[3]); @@ -2467,7 +2535,7 @@ int handleEventShear(TransInfo *t, wmEvent *event) // Use customData pointer to signal Shear direction if (t->customData == NULL) { initMouseInputMode(t, &t->mouse, INPUT_VERTICAL_ABSOLUTE); - t->customData = (void*)1; + t->customData = (void *)1; } else { initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_ABSOLUTE); @@ -2525,7 +2593,7 @@ int Shear(TransInfo *t, const int UNUSED(mval[2])) mul_m3_m3m3(tmat, smat, persmat); mul_m3_m3m3(totmat, persinv, tmat); - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -2588,7 +2656,7 @@ void initResize(TransInfo *t) static void headerResize(TransInfo *t, float vec[3], char *str) { char tvec[60]; - char *spos= str; + char *spos = str; if (hasNumInput(&t->num)) { outputNumInput(&(t->num), tvec); } @@ -2600,14 +2668,14 @@ static void headerResize(TransInfo *t, float vec[3], char *str) if (t->con.mode & CON_APPLY) { switch (t->num.idx_max) { - case 0: - spos += sprintf(spos, "Scale: %s%s %s", &tvec[0], t->con.text, t->proptext); - break; - case 1: - spos += sprintf(spos, "Scale: %s : %s%s %s", &tvec[0], &tvec[20], t->con.text, t->proptext); - break; - case 2: - spos += sprintf(spos, "Scale: %s : %s : %s%s %s", &tvec[0], &tvec[20], &tvec[40], t->con.text, t->proptext); + case 0: + spos += sprintf(spos, "Scale: %s%s %s", &tvec[0], t->con.text, t->proptext); + break; + case 1: + spos += sprintf(spos, "Scale: %s : %s%s %s", &tvec[0], &tvec[20], t->con.text, t->proptext); + break; + case 2: + spos += sprintf(spos, "Scale: %s : %s : %s%s %s", &tvec[0], &tvec[20], &tvec[40], t->con.text, t->proptext); } } else { @@ -2617,15 +2685,15 @@ static void headerResize(TransInfo *t, float vec[3], char *str) spos += sprintf(spos, "Scale X: %s Y: %s Z: %s%s %s", &tvec[0], &tvec[20], &tvec[40], t->con.text, t->proptext); } - if (t->flag & (T_PROP_EDIT|T_PROP_CONNECTED)) { + if (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) { spos += sprintf(spos, " Proportional size: %.2f", t->prop_size); } (void)spos; } -#define SIGN(a) (a<-FLT_EPSILON?1:a>FLT_EPSILON?2:3) -#define VECSIGNFLIP(a, b) ((SIGN(a[0]) & SIGN(b[0]))==0 || (SIGN(a[1]) & SIGN(b[1]))==0 || (SIGN(a[2]) & SIGN(b[2]))==0) +#define SIGN(a) (a<-FLT_EPSILON ? 1 : a>FLT_EPSILON ? 2 : 3) +#define VECSIGNFLIP(a, b) ((SIGN(a[0]) & SIGN(b[0])) == 0 || (SIGN(a[1]) & SIGN(b[1])) == 0 || (SIGN(a[2]) & SIGN(b[2])) == 0) /* smat is reference matrix, only scaled */ static void TransMat3ToSize(float mat[][3], float smat[][3], float *size) @@ -2633,16 +2701,16 @@ static void TransMat3ToSize(float mat[][3], float smat[][3], float *size) float vec[3]; copy_v3_v3(vec, mat[0]); - size[0]= normalize_v3(vec); + size[0] = normalize_v3(vec); copy_v3_v3(vec, mat[1]); - size[1]= normalize_v3(vec); + size[1] = normalize_v3(vec); copy_v3_v3(vec, mat[2]); - size[2]= normalize_v3(vec); + size[2] = normalize_v3(vec); /* first tried with dotproduct... but the sign flip is crucial */ - if ( VECSIGNFLIP(mat[0], smat[0]) ) size[0]= -size[0]; - if ( VECSIGNFLIP(mat[1], smat[1]) ) size[1]= -size[1]; - if ( VECSIGNFLIP(mat[2], smat[2]) ) size[2]= -size[2]; + if (VECSIGNFLIP(mat[0], smat[0]) ) size[0] = -size[0]; + if (VECSIGNFLIP(mat[1], smat[1]) ) size[1] = -size[1]; + if (VECSIGNFLIP(mat[2], smat[2]) ) size[2] = -size[2]; } @@ -2665,13 +2733,16 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) /* local constraint shouldn't alter center */ if ((t->around == V3D_LOCAL) && - ( (t->flag & (T_OBJECT|T_POSE)) || - ((t->flag & T_EDIT) && (t->settings->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE))) || - (t->obedit && t->obedit->type == OB_ARMATURE)) - ) + ( (t->flag & (T_OBJECT | T_POSE)) || + ((t->flag & T_EDIT) && (t->settings->selectmode & (SCE_SELECT_EDGE | SCE_SELECT_FACE))) || + (t->obedit && t->obedit->type == OB_ARMATURE)) + ) { copy_v3_v3(center, td->center); } + else if (t->options & CTX_MOVIECLIP) { + copy_v3_v3(center, td->center); + } else { copy_v3_v3(center, t->center); } @@ -2679,7 +2750,7 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) if (td->ext) { float fsize[3]; - if (t->flag & (T_OBJECT|T_TEXTURE|T_POSE)) { + if (t->flag & (T_OBJECT | T_TEXTURE | T_POSE)) { float obsizemat[3][3]; // Reorient the size mat to fit the oriented object. mul_m3_m3m3(obsizemat, tmat, td->axismtx); @@ -2693,19 +2764,19 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) protectedSizeBits(td->protectflag, fsize); - if ((t->flag & T_V3D_ALIGN)==0) { // align mode doesn't resize objects itself + if ((t->flag & T_V3D_ALIGN) == 0) { // align mode doesn't resize objects itself if ((td->flag & TD_SINGLESIZE) && !(t->con.mode & CON_APPLY)) { /* scale val and reset size */ - *td->val = td->ival * (1 + (fsize[0] - 1) * td->factor); + *td->val = td->ival * (1 + (fsize[0] - 1) * td->factor); td->ext->size[0] = td->ext->isize[0]; td->ext->size[1] = td->ext->isize[1]; td->ext->size[2] = td->ext->isize[2]; - } + } else { /* Reset val if SINGLESIZE but using a constraint */ if (td->flag & TD_SINGLESIZE) - *td->val = td->ival; + *td->val = td->ival; td->ext->size[0] = td->ext->isize[0] * (1 + (fsize[0] - 1) * td->factor); td->ext->size[1] = td->ext->isize[1] * (1 + (fsize[1] - 1) * td->factor); @@ -2732,7 +2803,7 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) mul_v3_fl(vec, td->factor); - if (t->flag & (T_OBJECT|T_POSE)) { + if (t->flag & (T_OBJECT | T_POSE)) { mul_m3_v3(td->smtx, vec); } @@ -2749,10 +2820,10 @@ int Resize(TransInfo *t, const int mval[2]) float ratio; int i; char str[200]; - + /* for manipulator, center handle, the scaling can't be done relative to center */ - if ( (t->flag & T_USES_MANIPULATOR) && t->con.mode==0) { - ratio = 1.0f - ((t->imval[0] - mval[0]) + (t->imval[1] - mval[1]))/100.0f; + if ((t->flag & T_USES_MANIPULATOR) && t->con.mode == 0) { + ratio = 1.0f - ((t->imval[0] - mval[0]) + (t->imval[1] - mval[1])) / 100.0f; } else { ratio = t->values[0]; @@ -2781,11 +2852,11 @@ int Resize(TransInfo *t, const int mval[2]) t->con.applySize(t, NULL, mat); } - copy_m3_m3(t->mat, mat); // used in manipulator + copy_m3_m3(t->mat, mat); // used in manipulator headerResize(t, size, str); - for (i = 0, td=t->data; i < t->total; i++, td++) { + for (i = 0, td = t->data; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -2802,7 +2873,7 @@ int Resize(TransInfo *t, const int mval[2]) if (t->con.applySize) t->con.applySize(t, NULL, mat); - for (i = 0, td=t->data; i < t->total; i++, td++) + for (i = 0, td = t->data; i < t->total; i++, td++) ElementResize(t, td, mat); } @@ -2927,7 +2998,7 @@ void initToSphere(TransInfo *t) t->flag |= T_NO_CONSTRAINT; // Calculate average radius - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { t->val += len_v3v3(t->center, td->iloc); } @@ -2969,7 +3040,7 @@ int ToSphere(TransInfo *t, const int UNUSED(mval[2])) } - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { float tratio; if (td->flag & TD_NOACTION) break; @@ -3017,7 +3088,7 @@ void initRotation(TransInfo *t) t->idx_max = 0; t->num.idx_max = 0; t->snap[0] = 0.0f; - t->snap[1] = (float)((5.0/180)*M_PI); + t->snap[1] = (float)((5.0 / 180) * M_PI); t->snap[2] = t->snap[1] * 0.2f; t->num.increment = 1.0f; @@ -3039,12 +3110,16 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short /* local constraint shouldn't alter center */ if (around == V3D_LOCAL) { - if ( (t->flag & (T_OBJECT|T_POSE)) || - (t->settings->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE)) || + if ( (t->flag & (T_OBJECT | T_POSE)) || + (t->settings->selectmode & (SCE_SELECT_EDGE | SCE_SELECT_FACE)) || (t->obedit && t->obedit->type == OB_ARMATURE)) { center = td->center; } + + if (t->options & CTX_MOVIECLIP) { + center = td->center; + } } if (t->flag & T_POINTS) { @@ -3063,7 +3138,7 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short if (td->flag & TD_USEQUAT) { mul_serie_m3(fmat, td->mtx, mat, td->smtx, NULL, NULL, NULL, NULL, NULL); - mat3_to_quat(quat, fmat); // Actual transform + mat3_to_quat(quat, fmat); // Actual transform if (td->ext->quat) { mul_qt_qtqt(td->ext->quat, quat, td->ext->iquat); @@ -3095,9 +3170,9 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short if ((td->flag & TD_NO_LOC) == 0) { sub_v3_v3v3(vec, td->center, center); - mul_m3_v3(pmtx, vec); // To Global space - mul_m3_v3(mat, vec); // Applying rotation - mul_m3_v3(imtx, vec); // To Local space + mul_m3_v3(pmtx, vec); // To Global space + mul_m3_v3(mat, vec); // Applying rotation + mul_m3_v3(imtx, vec); // To Local space add_v3_v3(vec, center); /* vec now is the location where the object has to be */ @@ -3109,12 +3184,12 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short /* do nothing */ } else if (td->flag & TD_PBONE_LOCAL_MTX_C) { - mul_m3_v3(pmtx, vec); // To Global space - mul_m3_v3(td->ext->l_smtx, vec);// To Pose space (Local Location) + mul_m3_v3(pmtx, vec); // To Global space + mul_m3_v3(td->ext->l_smtx, vec); // To Pose space (Local Location) } else { - mul_m3_v3(pmtx, vec); // To Global space - mul_m3_v3(td->smtx, vec);// To Pose space + mul_m3_v3(pmtx, vec); // To Global space + mul_m3_v3(td->smtx, vec); // To Pose space } protectedTransBits(td->protectflag, vec); @@ -3129,7 +3204,7 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short * and ElementRotation() might be called in Translation context (with align snapping), * we need to be sure to actually use the *rotation* matrix here... * So no other way than storing it in some dedicated members of td->ext! */ - if ((t->flag & T_V3D_ALIGN)==0) { /* align mode doesn't rotate objects itself */ + if ((t->flag & T_V3D_ALIGN) == 0) { /* align mode doesn't rotate objects itself */ /* euler or quaternion/axis-angle? */ if (td->ext->rotOrder == ROT_MODE_QUAT) { mul_serie_m3(fmat, td->ext->r_mtx, mat, td->ext->r_smtx, NULL, NULL, NULL, NULL, NULL); @@ -3198,11 +3273,11 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short constraintTransLim(t, td); /* rotation */ - if ((t->flag & T_V3D_ALIGN)==0) { // align mode doesn't rotate objects itself + if ((t->flag & T_V3D_ALIGN) == 0) { // align mode doesn't rotate objects itself /* euler or quaternion? */ if ((td->ext->rotOrder == ROT_MODE_QUAT) || (td->flag & TD_USEQUAT)) { mul_serie_m3(fmat, td->mtx, mat, td->smtx, NULL, NULL, NULL, NULL, NULL); - mat3_to_quat(quat, fmat); // Actual transform + mat3_to_quat(quat, fmat); // Actual transform mul_qt_qtqt(td->ext->quat, quat, td->ext->iquat); /* this function works on end result */ @@ -3215,7 +3290,7 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short axis_angle_to_quat(iquat, td->ext->irotAxis, td->ext->irotAngle); mul_serie_m3(fmat, td->mtx, mat, td->smtx, NULL, NULL, NULL, NULL, NULL); - mat3_to_quat(quat, fmat); // Actual transform + mat3_to_quat(quat, fmat); // Actual transform mul_qt_qtqt(tquat, quat, iquat); quat_to_axis_angle(td->ext->rotAxis, td->ext->rotAngle, tquat); @@ -3258,7 +3333,7 @@ static void applyRotation(TransInfo *t, float angle, float axis[3]) vec_rot_to_mat3(mat, axis, angle); - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3280,7 +3355,7 @@ static void applyRotation(TransInfo *t, float angle, float axis[3]) int Rotation(TransInfo *t, const int UNUSED(mval[2])) { - char str[128], *spos= str; + char str[128], *spos = str; float final; @@ -3305,16 +3380,16 @@ int Rotation(TransInfo *t, const int UNUSED(mval[2])) outputNumInput(&(t->num), c); - spos+= sprintf(spos, "Rot: %s %s %s", &c[0], t->con.text, t->proptext); + spos += sprintf(spos, "Rot: %s %s %s", &c[0], t->con.text, t->proptext); /* Clamp between -180 and 180 */ - final= angle_wrap_rad(DEG2RADF(final)); + final = angle_wrap_rad(DEG2RADF(final)); } else { spos += sprintf(spos, "Rot: %.2f%s %s", RAD2DEGF(final), t->con.text, t->proptext); } - if (t->flag & (T_PROP_EDIT|T_PROP_CONNECTED)) { + if (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) { spos += sprintf(spos, " Proportional size: %.2f", t->prop_size); } (void)spos; @@ -3343,7 +3418,7 @@ void initTrackball(TransInfo *t) t->idx_max = 1; t->num.idx_max = 1; t->snap[0] = 0.0f; - t->snap[1] = (float)((5.0/180)*M_PI); + t->snap[1] = (float)((5.0 / 180) * M_PI); t->snap[2] = t->snap[1] * 0.2f; t->num.increment = 1.0f; @@ -3362,7 +3437,7 @@ static void applyTrackball(TransInfo *t, float axis1[3], float axis2[3], float a mul_m3_m3m3(mat, smat, totmat); - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3382,7 +3457,7 @@ static void applyTrackball(TransInfo *t, float axis1[3], float axis2[3], float a int Trackball(TransInfo *t, const int UNUSED(mval[2])) { - char str[128], *spos= str; + char str[128], *spos = str; float axis1[3], axis2[3]; float mat[3][3], totmat[3][3], smat[3][3]; float phi[2]; @@ -3413,7 +3488,7 @@ int Trackball(TransInfo *t, const int UNUSED(mval[2])) spos += sprintf(spos, "Trackball: %.2f %.2f %s", RAD2DEGF(phi[0]), RAD2DEGF(phi[1]), t->proptext); } - if (t->flag & (T_PROP_EDIT|T_PROP_CONNECTED)) { + if (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) { spos += sprintf(spos, " Proportional size: %.2f", t->prop_size); } (void)spos; @@ -3449,7 +3524,7 @@ void initTranslation(TransInfo *t) initMouseInputMode(t, &t->mouse, INPUT_VECTOR); - t->idx_max = (t->flag & T_2D_EDIT)? 1: 2; + t->idx_max = (t->flag & T_2D_EDIT) ? 1 : 2; t->num.flag = 0; t->num.idx_max = t->idx_max; @@ -3477,7 +3552,7 @@ void initTranslation(TransInfo *t) static void headerTranslation(TransInfo *t, float vec[3], char *str) { - char *spos= str; + char *spos = str; char tvec[60]; char distvec[20]; char autoik[20]; @@ -3495,10 +3570,10 @@ static void headerTranslation(TransInfo *t, float vec[3], char *str) dist = len_v3(vec); if (!(t->flag & T_2D_EDIT) && t->scene->unit.system) { - int i, do_split= t->scene->unit.flag & USER_UNIT_OPT_SPLIT ? 1:0; + int i, do_split = t->scene->unit.flag & USER_UNIT_OPT_SPLIT ? 1 : 0; - for (i=0; i<3; i++) - bUnit_AsString(&tvec[i*20], 20, dvec[i]*t->scene->unit.scale_length, 4, t->scene->unit.system, B_UNIT_LENGTH, do_split, 1); + for (i = 0; i < 3; i++) + bUnit_AsString(&tvec[i * 20], 20, dvec[i] * t->scene->unit.scale_length, 4, t->scene->unit.system, B_UNIT_LENGTH, do_split, 1); } else { sprintf(&tvec[0], "%.4f", dvec[0]); @@ -3508,33 +3583,33 @@ static void headerTranslation(TransInfo *t, float vec[3], char *str) } if (!(t->flag & T_2D_EDIT) && t->scene->unit.system) - bUnit_AsString(distvec, sizeof(distvec), dist*t->scene->unit.scale_length, 4, t->scene->unit.system, B_UNIT_LENGTH, t->scene->unit.flag & USER_UNIT_OPT_SPLIT, 0); - else if ( dist > 1e10f || dist < -1e10f ) /* prevent string buffer overflow */ + bUnit_AsString(distvec, sizeof(distvec), dist * t->scene->unit.scale_length, 4, t->scene->unit.system, B_UNIT_LENGTH, t->scene->unit.flag & USER_UNIT_OPT_SPLIT, 0); + else if (dist > 1e10f || dist < -1e10f) /* prevent string buffer overflow */ sprintf(distvec, "%.4e", dist); else sprintf(distvec, "%.4f", dist); if (t->flag & T_AUTOIK) { - short chainlen= t->settings->autoik_chainlen; + short chainlen = t->settings->autoik_chainlen; if (chainlen) sprintf(autoik, "AutoIK-Len: %d", chainlen); else - autoik[0]= '\0'; + autoik[0] = '\0'; } else - autoik[0]= '\0'; + autoik[0] = '\0'; if (t->con.mode & CON_APPLY) { switch (t->num.idx_max) { - case 0: - spos += sprintf(spos, "D: %s (%s)%s %s %s", &tvec[0], distvec, t->con.text, t->proptext, &autoik[0]); - break; - case 1: - spos += sprintf(spos, "D: %s D: %s (%s)%s %s %s", &tvec[0], &tvec[20], distvec, t->con.text, t->proptext, &autoik[0]); - break; - case 2: - spos += sprintf(spos, "D: %s D: %s D: %s (%s)%s %s %s", &tvec[0], &tvec[20], &tvec[40], distvec, t->con.text, t->proptext, &autoik[0]); + case 0: + spos += sprintf(spos, "D: %s (%s)%s %s %s", &tvec[0], distvec, t->con.text, t->proptext, &autoik[0]); + break; + case 1: + spos += sprintf(spos, "D: %s D: %s (%s)%s %s %s", &tvec[0], &tvec[20], distvec, t->con.text, t->proptext, &autoik[0]); + break; + case 2: + spos += sprintf(spos, "D: %s D: %s D: %s (%s)%s %s %s", &tvec[0], &tvec[20], &tvec[40], distvec, t->con.text, t->proptext, &autoik[0]); } } else { @@ -3544,7 +3619,7 @@ static void headerTranslation(TransInfo *t, float vec[3], char *str) spos += sprintf(spos, "Dx: %s Dy: %s Dz: %s (%s)%s %s %s", &tvec[0], &tvec[20], &tvec[40], distvec, t->con.text, t->proptext, &autoik[0]); } - if (t->flag & (T_PROP_EDIT|T_PROP_CONNECTED)) { + if (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) { spos += sprintf(spos, " Proportional size: %.2f", t->prop_size); } (void)spos; @@ -3556,7 +3631,7 @@ static void applyTranslation(TransInfo *t, float vec[3]) float tvec[3]; int i; - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3660,7 +3735,7 @@ int Translation(TransInfo *t, const int UNUSED(mval[2])) void initShrinkFatten(TransInfo *t) { // If not in mesh edit mode, fallback to Resize - if (t->obedit==NULL || t->obedit->type != OB_MESH) { + if (t->obedit == NULL || t->obedit->type != OB_MESH) { initResize(t); } else { @@ -3712,7 +3787,7 @@ int ShrinkFatten(TransInfo *t, const int UNUSED(mval[2])) t->values[0] = distance; - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3745,12 +3820,12 @@ void initTilt(TransInfo *t) t->idx_max = 0; t->num.idx_max = 0; t->snap[0] = 0.0f; - t->snap[1] = (float)((5.0/180)*M_PI); + t->snap[1] = (float)((5.0 / 180) * M_PI); t->snap[2] = t->snap[1] * 0.2f; t->num.increment = t->snap[1]; - t->flag |= T_NO_CONSTRAINT|T_NO_PROJECT; + t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT; } @@ -3782,7 +3857,7 @@ int Tilt(TransInfo *t, const int UNUSED(mval[2])) sprintf(str, "Tilt: %.2f %s", RAD2DEGF(final), t->proptext); } - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3849,7 +3924,75 @@ int CurveShrinkFatten(TransInfo *t, const int UNUSED(mval[2])) sprintf(str, "Shrink/Fatten: %3f", ratio); } - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { + if (td->flag & TD_NOACTION) + break; + + if (td->flag & TD_SKIP) + continue; + + if (td->val) { + *td->val = td->ival * ratio; + /* apply PET */ + *td->val = (*td->val * td->factor) + ((1.0f - td->factor) * td->ival); + if (*td->val <= 0.0f) *td->val = 0.001f; + } + } + + recalcData(t); + + ED_area_headerprint(t->sa, str); + + return 1; +} + + +void initMaskShrinkFatten(TransInfo *t) +{ + t->mode = TFM_MASK_SHRINKFATTEN; + t->transform = MaskShrinkFatten; + + initMouseInputMode(t, &t->mouse, INPUT_SPRING); + + t->idx_max = 0; + t->num.idx_max = 0; + t->snap[0] = 0.0f; + t->snap[1] = 0.1f; + t->snap[2] = t->snap[1] * 0.1f; + + t->num.increment = t->snap[1]; + + t->flag |= T_NO_ZERO; + t->num.flag |= NUM_NO_ZERO; + + t->flag |= T_NO_CONSTRAINT; +} + +int MaskShrinkFatten(TransInfo *t, const int UNUSED(mval[2])) +{ + TransData *td = t->data; + float ratio; + int i; + char str[50]; + + ratio = t->values[0]; + + snapGrid(t, &ratio); + + applyNumInput(&t->num, &ratio); + + /* header print for NumInput */ + if (hasNumInput(&t->num)) { + char c[20]; + + outputNumInput(&(t->num), c); + sprintf(str, "Shrink/Fatten: %s", c); + } + else { + sprintf(str, "Shrink/Fatten: %3f", ratio); + } + + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3857,8 +4000,9 @@ int CurveShrinkFatten(TransInfo *t, const int UNUSED(mval[2])) continue; if (td->val) { - // *td->val= ratio; - *td->val= td->ival*ratio; + *td->val = td->ival * ratio; + /* apply PET */ + *td->val = (*td->val * td->factor) + ((1.0f - td->factor) * td->ival); if (*td->val <= 0.0f) *td->val = 0.001f; } } @@ -3922,7 +4066,7 @@ int PushPull(TransInfo *t, const int UNUSED(mval[2])) t->con.applyRot(t, NULL, axis, NULL); } - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -3995,28 +4139,28 @@ int handleEventBevel(TransInfo *t, wmEvent *event) if (!G.editBMesh) return 0; switch (event->type) { - case MIDDLEMOUSE: - G.editBMesh->options ^= BME_BEVEL_VERT; - t->state = TRANS_CANCEL; - return 1; - //case PADPLUSKEY: - // G.editBMesh->options ^= BME_BEVEL_RES; - // G.editBMesh->res += 1; - // if (G.editBMesh->res > 4) { - // G.editBMesh->res = 4; - // } - // t->state = TRANS_CANCEL; - // return 1; - //case PADMINUS: - // G.editBMesh->options ^= BME_BEVEL_RES; - // G.editBMesh->res -= 1; - // if (G.editBMesh->res < 0) { - // G.editBMesh->res = 0; - // } - // t->state = TRANS_CANCEL; - // return 1; - default: - return 0; + case MIDDLEMOUSE: + G.editBMesh->options ^= BME_BEVEL_VERT; + t->state = TRANS_CANCEL; + return 1; + //case PADPLUSKEY: + // G.editBMesh->options ^= BME_BEVEL_RES; + // G.editBMesh->res += 1; + // if (G.editBMesh->res > 4) { + // G.editBMesh->res = 4; + // } + // t->state = TRANS_CANCEL; + // return 1; + //case PADMINUS: + // G.editBMesh->options ^= BME_BEVEL_RES; + // G.editBMesh->res -= 1; + // if (G.editBMesh->res < 0) { + // G.editBMesh->res = 0; + // } + // t->state = TRANS_CANCEL; + // return 1; + default: + return 0; } } return 0; @@ -4053,7 +4197,7 @@ int Bevel(TransInfo *t, const int UNUSED(mval[2])) } if (distance < 0) distance = -distance; - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->axismtx[1][0] > 0 && distance > td->axismtx[1][0]) { d = td->axismtx[1][0]; } @@ -4087,7 +4231,7 @@ void initBevelWeight(TransInfo *t) t->num.increment = t->snap[1]; - t->flag |= T_NO_CONSTRAINT|T_NO_PROJECT; + t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT; } int BevelWeight(TransInfo *t, const int UNUSED(mval[2])) @@ -4125,7 +4269,7 @@ int BevelWeight(TransInfo *t, const int UNUSED(mval[2])) sprintf(str, "Bevel Weight: %.3f %s", weight, t->proptext); } - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -4160,7 +4304,7 @@ void initCrease(TransInfo *t) t->num.increment = t->snap[1]; - t->flag |= T_NO_CONSTRAINT|T_NO_PROJECT; + t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT; } int Crease(TransInfo *t, const int UNUSED(mval[2])) @@ -4198,7 +4342,7 @@ int Crease(TransInfo *t, const int UNUSED(mval[2])) sprintf(str, "Crease: %.3f %s", crease, t->proptext); } - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -4276,11 +4420,11 @@ static void ElementBoneSize(TransInfo *t, TransData *td, float mat[3][3]) } /* we've tucked the scale in loc */ - oldy= td->iloc[1]; + oldy = td->iloc[1]; size_to_mat3(sizemat, td->iloc); mul_m3_m3m3(tmat, tmat, sizemat); mat3_to_size(td->loc, tmat); - td->loc[1]= oldy; + td->loc[1] = oldy; } int BoneSize(TransInfo *t, const int mval[2]) @@ -4293,8 +4437,8 @@ int BoneSize(TransInfo *t, const int mval[2]) // TRANSFORM_FIX_ME MOVE TO MOUSE INPUT /* for manipulator, center handle, the scaling can't be done relative to center */ - if ((t->flag & T_USES_MANIPULATOR) && t->con.mode==0) { - ratio = 1.0f - ((t->imval[0] - mval[0]) + (t->imval[1] - mval[1]))/100.0f; + if ((t->flag & T_USES_MANIPULATOR) && t->con.mode == 0) { + ratio = 1.0f - ((t->imval[0] - mval[0]) + (t->imval[1] - mval[1])) / 100.0f; } else { ratio = t->values[0]; @@ -4315,11 +4459,11 @@ int BoneSize(TransInfo *t, const int mval[2]) t->con.applySize(t, NULL, mat); } - copy_m3_m3(t->mat, mat); // used in manipulator + copy_m3_m3(t->mat, mat); // used in manipulator headerBoneSize(t, size, str); - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -4354,7 +4498,7 @@ void initBoneEnvelope(TransInfo *t) t->num.increment = t->snap[1]; - t->flag |= T_NO_CONSTRAINT|T_NO_PROJECT; + t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT; } int BoneEnvelope(TransInfo *t, const int UNUSED(mval[2])) @@ -4381,7 +4525,7 @@ int BoneEnvelope(TransInfo *t, const int UNUSED(mval[2])) sprintf(str, "Envelope: %3f", ratio); } - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -4391,9 +4535,9 @@ int BoneEnvelope(TransInfo *t, const int UNUSED(mval[2])) if (td->val) { /* if the old/original value was 0.0f, then just use ratio */ if (td->ival) - *td->val= td->ival*ratio; + *td->val = td->ival * ratio; else - *td->val= ratio; + *td->val = ratio; } } @@ -4423,7 +4567,7 @@ static BMLoop *get_next_loop(BMVert *v, BMLoop *l, { BMLoop *firstl; float a[3] = {0.0f, 0.0f, 0.0f}, n[3] = {0.0f, 0.0f, 0.0f}; - int i=0; + int i = 0; firstl = l; do { @@ -4525,8 +4669,8 @@ static int createSlideVerts(TransInfo *t) BMBVHTree *btree = BMBVH_NewBVH(em, BMBVH_RESPECT_HIDDEN, NULL, NULL); SmallHash table; SlideData *sld = MEM_callocN(sizeof(*sld), "sld"); - View3D *v3d = t->sa ? t->sa->spacedata.first : NULL; - RegionView3D *rv3d = t->ar ? t->ar->regiondata : NULL; /* background mode support */ + View3D *v3d = NULL; + RegionView3D *rv3d = NULL; ARegion *ar = t->ar; float projectMat[4][4]; float mval[2] = {(float)t->mval[0], (float)t->mval[1]}; @@ -4534,11 +4678,17 @@ static int createSlideVerts(TransInfo *t) float vec[3], vec2[3], lastvec[3] /*, size, dis=0.0, z */ /* UNUSED */; int numsel, i, j; + if (t->spacetype == SPACE_VIEW3D) { + /* background mode support */ + v3d = t->sa ? t->sa->spacedata.first : NULL; + rv3d = t->ar ? t->ar->regiondata : NULL; + } + sld->is_proportional = TRUE; sld->curr_sv_index = 0; sld->flipped_vtx = FALSE; - if (!v3d) { + if (!rv3d) { /* ok, let's try to survive this */ unit_m4(projectMat); } @@ -4675,7 +4825,7 @@ static int createSlideVerts(TransInfo *t) sv->down = BM_edge_other_vert(l->e, v); } - v2=v, v = BM_edge_other_vert(e, v); + v2 = v, v = BM_edge_other_vert(e, v); e1 = e; e = get_other_edge(v, e); @@ -4732,13 +4882,13 @@ static int createSlideVerts(TransInfo *t) /* search cross edges for visible edge to the mouse cursor, * then use the shared vertex to calculate screen vector*/ dis2 = -1.0f; - for (i=0; i<2; i++) { - v = i?e->v1:e->v2; + for (i = 0; i < 2; i++) { + v = i ? e->v1 : e->v2; BM_ITER_ELEM (e2, &iter2, v, BM_EDGES_OF_VERT) { if (BM_elem_flag_test(e2, BM_ELEM_SELECT)) continue; - if (!BMBVH_EdgeVisible(btree, e2, ar, v3d, t->obedit)) + if (v3d && !BMBVH_EdgeVisible(btree, e2, ar, v3d, t->obedit)) continue; j = GET_INT_FROM_POINTER(BLI_smallhash_lookup(&table, (uintptr_t)v)); @@ -4775,7 +4925,7 @@ static int createSlideVerts(TransInfo *t) /*create copies of faces for customdata projection*/ sv_array = sld->sv; - for (i=0; i<sld->totsv; i++, sv_array++) { + for (i = 0; i < sld->totsv; i++, sv_array++) { BMIter fiter, liter; BMFace *f; BMLoop *l; @@ -4801,8 +4951,8 @@ static int createSlideVerts(TransInfo *t) BLI_smallhash_insert(&sld->vhash, (uintptr_t)sv_array->v, sv_array); } - calcNonProportionalEdgeSlide(t, sld, mval); - + if (rv3d) + calcNonProportionalEdgeSlide(t, sld, mval); sld->origfaces_init = TRUE; sld->em = em; @@ -4851,7 +5001,7 @@ void projectSVData(TransInfo *t, int final) BLI_smallhash_init(&visit); - for (i=0, sv = sld->sv; i < sld->totsv; sv++, i++) { + for (i = 0, sv = sld->sv; i < sld->totsv; sv++, i++) { BMIter fiter; BMFace *f; @@ -4917,7 +5067,7 @@ void projectSVData(TransInfo *t, int final) BMEdge *e_sel; BM_ITER_ELEM (e_sel, &eiter, l->v, BM_EDGES_OF_VERT) { - if (BM_elem_flag_test(e_sel, BM_ELEM_SELECT)) {; + if (BM_elem_flag_test(e_sel, BM_ELEM_SELECT)) { break; } } @@ -4983,7 +5133,7 @@ void freeSlideTempFaces(SlideData *sld) BMFace *copyf; copyf = BLI_smallhash_iternew(&sld->origfaces, &hiter, NULL); - for (; copyf; copyf=BLI_smallhash_iternext(&hiter, NULL)) { + for (; copyf; copyf = BLI_smallhash_iternext(&hiter, NULL)) { BM_face_verts_kill(sld->em->bm, copyf); } @@ -5004,7 +5154,7 @@ void freeSlideVerts(TransInfo *t) LinkNode *look = sld->vertlist; GHash *vertgh = sld->vhash; while (look) { - sv = BLI_ghash_lookup(vertgh, (EditVert*)look->link); + sv = BLI_ghash_lookup(vertgh, (EditVert *)look->link); if (sv != NULL) { sv->up->f &= !SELECT; sv->down->f &= !SELECT; @@ -5040,7 +5190,7 @@ void initEdgeSlide(TransInfo *t) t->handleEvent = handleEventEdgeSlide; if (!createSlideVerts(t)) { - t->state= TRANS_CANCEL; + t->state = TRANS_CANCEL; return; } @@ -5063,12 +5213,12 @@ void initEdgeSlide(TransInfo *t) t->num.increment = t->snap[1]; - t->flag |= T_NO_CONSTRAINT|T_NO_PROJECT; + t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT; } int handleEventEdgeSlide(struct TransInfo *t, struct wmEvent *event) { - if (t->flag & TFM_EDGE_SLIDE) { + if (t->mode == TFM_EDGE_SLIDE) { SlideData *sld = t->customData; if (sld) { @@ -5090,11 +5240,11 @@ int handleEventEdgeSlide(struct TransInfo *t, struct wmEvent *event) } case EVT_MODAL_MAP: { switch (event->val) { - case TFM_WHEEL_DOWN_EVT: { + case TFM_MODAL_EDGESLIDE_DOWN: { sld->curr_sv_index = ((sld->curr_sv_index - 1) + sld->totsv) % sld->totsv; break; } - case TFM_WHEEL_UP_EVT: { + case TFM_MODAL_EDGESLIDE_UP: { sld->curr_sv_index = (sld->curr_sv_index + 1) % sld->totsv; break; } @@ -5110,7 +5260,7 @@ int handleEventEdgeSlide(struct TransInfo *t, struct wmEvent *event) void drawNonPropEdge(const struct bContext *C, TransInfo *t) { - if (t->flag & TFM_EDGE_SLIDE) { + if (t->mode == TFM_EDGE_SLIDE) { SlideData *sld = (SlideData *)t->customData; /* Non-Prop mode */ if (sld && sld->is_proportional == FALSE) { @@ -5192,7 +5342,7 @@ static int doEdgeSlide(TransInfo *t, float perc) sld->perc = perc; sv = svlist; - for (i=0; i<sld->totsv; i++, sv++) { + for (i = 0; i < sld->totsv; i++, sv++) { if (sld->is_proportional == FALSE) { TransDataSlideVert *curr_sv = &sld->sv[sld->curr_sv_index]; float cur_sel = curr_sv->edge_len; @@ -5257,11 +5407,11 @@ int EdgeSlide(TransInfo *t, const int UNUSED(mval[2])) outputNumInput(&(t->num), c); BLI_snprintf(str, sizeof(str), "Edge Slide: %s (E)ven: %s, (F)lipped: %s", - &c[0], !is_proportional ? "ON" : "OFF", flipped ? "ON" : "OFF" ); + &c[0], !is_proportional ? "ON" : "OFF", flipped ? "ON" : "OFF"); } else { BLI_snprintf(str, sizeof(str), "Edge Slide: %.2f (E)ven: %s, (F)lipped: %s", - final, !is_proportional ? "ON" : "OFF", flipped ? "ON" : "OFF" ); + final, !is_proportional ? "ON" : "OFF", flipped ? "ON" : "OFF"); } CLAMP(final, -1.0f, 1.0f); @@ -5295,12 +5445,12 @@ void initBoneRoll(TransInfo *t) t->idx_max = 0; t->num.idx_max = 0; t->snap[0] = 0.0f; - t->snap[1] = (float)((5.0/180)*M_PI); + t->snap[1] = (float)((5.0 / 180) * M_PI); t->snap[2] = t->snap[1] * 0.2f; t->num.increment = 1.0f; - t->flag |= T_NO_CONSTRAINT|T_NO_PROJECT; + t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT; } int BoneRoll(TransInfo *t, const int UNUSED(mval[2])) @@ -5375,11 +5525,11 @@ int BakeTime(TransInfo *t, const int mval[2]) if (t->mouse.precision) { /* calculate ratio for shiftkey pos, and for total, and blend these for precision */ - time= (float)(t->center2d[0] - t->mouse.precision_mval[0]) * fac; - time+= 0.1f*((float)(t->center2d[0]*fac - mval[0]) -time); + time = (float)(t->center2d[0] - t->mouse.precision_mval[0]) * fac; + time += 0.1f * ((float)(t->center2d[0] * fac - mval[0]) - time); } else { - time = (float)(t->center2d[0] - mval[0])*fac; + time = (float)(t->center2d[0] - mval[0]) * fac; } snapGrid(t, &time); @@ -5405,7 +5555,7 @@ int BakeTime(TransInfo *t, const int mval[2]) sprintf(str, "Time: %.3f %s", time, t->proptext); } - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -5464,7 +5614,7 @@ int Mirror(TransInfo *t, const int UNUSED(mval[2])) sprintf(str, "Mirror%s", t->con.text); - for (i = 0, td=t->data; i < t->total; i++, td++) { + for (i = 0, td = t->data; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -5483,7 +5633,7 @@ int Mirror(TransInfo *t, const int UNUSED(mval[2])) size_to_mat3(mat, size); - for (i = 0, td=t->data; i < t->total; i++, td++) { + for (i = 0, td = t->data; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; @@ -5524,7 +5674,7 @@ int Align(TransInfo *t, const int UNUSED(mval[2])) /* saving original center */ copy_v3_v3(center, t->center); - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { float mat[3][3], invmat[3][3]; if (td->flag & TD_NOACTION) @@ -5534,7 +5684,7 @@ int Align(TransInfo *t, const int UNUSED(mval[2])) continue; /* around local centers */ - if (t->flag & (T_OBJECT|T_POSE)) { + if (t->flag & (T_OBJECT | T_POSE)) { copy_v3_v3(t->center, td->center); } else { @@ -5598,7 +5748,7 @@ static void applySeqSlide(TransInfo *t, float val[2]) TransData *td = t->data; int i; - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { float tvec[2]; if (td->flag & TD_NOACTION) @@ -5655,38 +5805,38 @@ int SeqSlide(TransInfo *t, const int UNUSED(mval[2])) // XXX these modifier checks should be keymappable static short getAnimEdit_SnapMode(TransInfo *t) { - short autosnap= SACTSNAP_OFF; + short autosnap = SACTSNAP_OFF; if (t->spacetype == SPACE_ACTION) { - SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; + SpaceAction *saction = (SpaceAction *)t->sa->spacedata.first; if (saction) - autosnap= saction->autosnap; + autosnap = saction->autosnap; } else if (t->spacetype == SPACE_IPO) { - SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; + SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first; if (sipo) - autosnap= sipo->autosnap; + autosnap = sipo->autosnap; } else if (t->spacetype == SPACE_NLA) { - SpaceNla *snla= (SpaceNla *)t->sa->spacedata.first; + SpaceNla *snla = (SpaceNla *)t->sa->spacedata.first; if (snla) - autosnap= snla->autosnap; + autosnap = snla->autosnap; } else { - autosnap= SACTSNAP_OFF; + autosnap = SACTSNAP_OFF; } /* toggle autosnap on/off - * - when toggling on, prefer nearest frame over 1.0 frame increments + * - when toggling on, prefer nearest frame over 1.0 frame increments */ if (t->modifiers & MOD_SNAP_INVERT) { if (autosnap) - autosnap= SACTSNAP_OFF; + autosnap = SACTSNAP_OFF; else - autosnap= SACTSNAP_FRAME; + autosnap = SACTSNAP_FRAME; } return autosnap; @@ -5701,19 +5851,19 @@ static short getAnimEdit_DrawTime(TransInfo *t) short drawtime; if (t->spacetype == SPACE_ACTION) { - SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; + SpaceAction *saction = (SpaceAction *)t->sa->spacedata.first; - drawtime = (saction->flag & SACTION_DRAWTIME)? 1 : 0; + drawtime = (saction->flag & SACTION_DRAWTIME) ? 1 : 0; } else if (t->spacetype == SPACE_NLA) { - SpaceNla *snla= (SpaceNla *)t->sa->spacedata.first; + SpaceNla *snla = (SpaceNla *)t->sa->spacedata.first; - drawtime = (snla->flag & SNLA_DRAWTIME)? 1 : 0; + drawtime = (snla->flag & SNLA_DRAWTIME) ? 1 : 0; } else if (t->spacetype == SPACE_IPO) { - SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; + SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first; - drawtime = (sipo->flag & SIPO_DRAWTIME)? 1 : 0; + drawtime = (sipo->flag & SIPO_DRAWTIME) ? 1 : 0; } else { drawtime = 0; @@ -5733,23 +5883,23 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, TransData2D *td2d, #if 0 /* 'do_time' disabled for now */ - const Scene *scene= t->scene; - const short do_time= 0; //getAnimEdit_DrawTime(t); // NOTE: this works, but may be confusing behavior given the option's label, hence disabled - const double secf= FPS; + const Scene *scene = t->scene; + const short do_time = 0; //getAnimEdit_DrawTime(t); // NOTE: this works, but may be confusing behavior given the option's label, hence disabled + const double secf = FPS; #endif double val; /* convert frame to nla-action time (if needed) */ if (adt) - val= BKE_nla_tweakedit_remap(adt, *(td->val), NLATIME_CONVERT_MAP); + val = BKE_nla_tweakedit_remap(adt, *(td->val), NLATIME_CONVERT_MAP); else - val= *(td->val); + val = *(td->val); -#if 0 /* 'do_time' disabled for now */ +#if 0 /* 'do_time' disabled for now */ /* do the snapping to nearest frame/second */ if (do_time) { - val= (float)(floor((val/secf) + 0.5f) * secf); + val = (float)(floor((val / secf) + 0.5f) * secf); } else #endif @@ -5759,9 +5909,9 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, TransData2D *td2d, /* convert frame out of nla-action time */ if (adt) - *(td->val)= BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP); + *(td->val) = BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP); else - *(td->val)= val; + *(td->val) = val; } /* snap key to nearest marker? */ else if (autosnap == SACTSNAP_MARKER) { @@ -5769,19 +5919,19 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, TransData2D *td2d, /* convert frame to nla-action time (if needed) */ if (adt) - val= BKE_nla_tweakedit_remap(adt, *(td->val), NLATIME_CONVERT_MAP); + val = BKE_nla_tweakedit_remap(adt, *(td->val), NLATIME_CONVERT_MAP); else - val= *(td->val); + val = *(td->val); /* snap to nearest marker */ // TODO: need some more careful checks for where data comes from - val= (float)ED_markers_find_nearest_marker_time(&t->scene->markers, val); + val = (float)ED_markers_find_nearest_marker_time(&t->scene->markers, val); /* convert frame out of nla-action time */ if (adt) - *(td->val)= BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP); + *(td->val) = BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP); else - *(td->val)= val; + *(td->val) = val; } /* if the handles are to be moved too (as side-effect of keyframes moving, to keep the general effect) @@ -5832,21 +5982,21 @@ static void headerTimeTranslate(TransInfo *t, char *str) } else { const Scene *scene = t->scene; - const short autosnap= getAnimEdit_SnapMode(t); + const short autosnap = getAnimEdit_SnapMode(t); const short do_time = getAnimEdit_DrawTime(t); - const double secf= FPS; + const double secf = FPS; float val = t->values[0]; /* apply snapping + frame->seconds conversions */ if (autosnap == SACTSNAP_STEP) { if (do_time) - val= floorf((double)val / secf + 0.5); + val = floorf((double)val / secf + 0.5); else - val= floorf(val + 0.5f); + val = floorf(val + 0.5f); } else { if (do_time) - val= (float)((double)val / secf); + val = (float)((double)val / secf); } if (autosnap == SACTSNAP_FRAME) @@ -5865,20 +6015,20 @@ static void applyTimeTranslate(TransInfo *t, float UNUSED(sval)) Scene *scene = t->scene; int i; - const short do_time= getAnimEdit_DrawTime(t); - const double secf= FPS; + const short do_time = getAnimEdit_DrawTime(t); + const double secf = FPS; - const short autosnap= getAnimEdit_SnapMode(t); + const short autosnap = getAnimEdit_SnapMode(t); float deltax, val /* , valprev */; /* it doesn't matter whether we apply to t->data or t->data2d, but t->data2d is more convenient */ - for (i = 0 ; i < t->total; i++, td++, td2d++) { + for (i = 0; i < t->total; i++, td++, td2d++) { /* it is assumed that td->extra is a pointer to the AnimData, * whose active action is where this keyframe comes from * (this is only valid when not in NLA) */ - AnimData *adt= (t->spacetype != SPACE_NLA) ? td->extra : NULL; + AnimData *adt = (t->spacetype != SPACE_NLA) ? td->extra : NULL; /* valprev = *td->val; */ /* UNUSED */ @@ -5949,7 +6099,7 @@ void initTimeSlide(TransInfo *t) { /* this tool is only really available in the Action Editor... */ if (t->spacetype == SPACE_ACTION) { - SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; + SpaceAction *saction = (SpaceAction *)t->sa->spacedata.first; /* set flag for drawing stuff */ saction->flag |= SACTION_MOVING; @@ -5985,12 +6135,12 @@ static void headerTimeSlide(TransInfo *t, float sval, char *str) outputNumInput(&(t->num), tvec); } else { - float minx= *((float *)(t->customData)); - float maxx= *((float *)(t->customData) + 1); - float cval= t->values[0]; + float minx = *((float *)(t->customData)); + float maxx = *((float *)(t->customData) + 1); + float cval = t->values[0]; float val; - val= 2.0f*(cval-sval) / (maxx-minx); + val = 2.0f * (cval - sval) / (maxx - minx); CLAMP(val, -1.0f, 1.0f); sprintf(&tvec[0], "%.4f", val); @@ -6004,43 +6154,43 @@ static void applyTimeSlide(TransInfo *t, float sval) TransData *td = t->data; int i; - float minx= *((float *)(t->customData)); - float maxx= *((float *)(t->customData) + 1); + float minx = *((float *)(t->customData)); + float maxx = *((float *)(t->customData) + 1); /* set value for drawing black line */ if (t->spacetype == SPACE_ACTION) { - SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; + SpaceAction *saction = (SpaceAction *)t->sa->spacedata.first; float cvalf = t->values[0]; - saction->timeslide= cvalf; + saction->timeslide = cvalf; } /* it doesn't matter whether we apply to t->data or t->data2d, but t->data2d is more convenient */ - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { /* it is assumed that td->extra is a pointer to the AnimData, * whose active action is where this keyframe comes from * (this is only valid when not in NLA) */ - AnimData *adt= (t->spacetype != SPACE_NLA) ? td->extra : NULL; + AnimData *adt = (t->spacetype != SPACE_NLA) ? td->extra : NULL; float cval = t->values[0]; /* apply NLA-mapping to necessary values */ if (adt) - cval= BKE_nla_tweakedit_remap(adt, cval, NLATIME_CONVERT_UNMAP); + cval = BKE_nla_tweakedit_remap(adt, cval, NLATIME_CONVERT_UNMAP); /* only apply to data if in range */ if ((sval > minx) && (sval < maxx)) { - float cvalc= CLAMPIS(cval, minx, maxx); + float cvalc = CLAMPIS(cval, minx, maxx); float timefac; /* left half? */ if (td->ival < sval) { - timefac= (sval - td->ival) / (sval - minx); - *(td->val)= cvalc - timefac * (cvalc - minx); + timefac = (sval - td->ival) / (sval - minx); + *(td->val) = cvalc - timefac * (cvalc - minx); } else { - timefac= (td->ival - sval) / (maxx - sval); - *(td->val)= cvalc + timefac * (maxx - cvalc); + timefac = (td->ival - sval) / (maxx - sval); + *(td->val) = cvalc + timefac * (maxx - cvalc); } } } @@ -6050,8 +6200,8 @@ int TimeSlide(TransInfo *t, const int mval[2]) { View2D *v2d = (View2D *)t->view; float cval[2], sval[2]; - float minx= *((float *)(t->customData)); - float maxx= *((float *)(t->customData) + 1); + float minx = *((float *)(t->customData)); + float maxx = *((float *)(t->customData) + 1); char str[200]; /* calculate mouse co-ordinates */ @@ -6063,9 +6213,9 @@ int TimeSlide(TransInfo *t, const int mval[2]) t->values[0] = cval[0]; /* handle numeric-input stuff */ - t->vec[0] = 2.0f*(cval[0]-sval[0]) / (maxx-minx); + t->vec[0] = 2.0f * (cval[0] - sval[0]) / (maxx - minx); applyNumInput(&t->num, &t->vec[0]); - t->values[0] = (maxx-minx) * t->vec[0] / 2.0f + sval[0]; + t->values[0] = (maxx - minx) * t->vec[0] / 2.0f + sval[0]; headerTimeSlide(t, sval[0], str); applyTimeSlide(t, sval[0]); @@ -6138,19 +6288,19 @@ static void applyTimeScale(TransInfo *t) TransData2D *td2d = t->data2d; int i; - const short autosnap= getAnimEdit_SnapMode(t); - const short do_time= getAnimEdit_DrawTime(t); - const double secf= FPS; + const short autosnap = getAnimEdit_SnapMode(t); + const short do_time = getAnimEdit_DrawTime(t); + const double secf = FPS; - for (i = 0 ; i < t->total; i++, td++, td2d++) { + for (i = 0; i < t->total; i++, td++, td2d++) { /* it is assumed that td->extra is a pointer to the AnimData, * whose active action is where this keyframe comes from * (this is only valid when not in NLA) */ - AnimData *adt= (t->spacetype != SPACE_NLA) ? td->extra : NULL; - float startx= CFRA; - float fac= t->values[0]; + AnimData *adt = (t->spacetype != SPACE_NLA) ? td->extra : NULL; + float startx = CFRA; + float fac = t->values[0]; if (autosnap == SACTSNAP_STEP) { if (do_time) @@ -6161,7 +6311,7 @@ static void applyTimeScale(TransInfo *t) /* check if any need to apply nla-mapping */ if (adt) - startx= BKE_nla_tweakedit_remap(adt, startx, NLATIME_CONVERT_UNMAP); + startx = BKE_nla_tweakedit_remap(adt, startx, NLATIME_CONVERT_UNMAP); /* now, calculate the new value */ *(td->val) = ((td->ival - startx) * fac) + startx; diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 6051fd2577b..fdc09c1bed0 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -494,6 +494,9 @@ int Tilt(TransInfo *t, const int mval[2]); void initCurveShrinkFatten(TransInfo *t); int CurveShrinkFatten(TransInfo *t, const int mval[2]); +void initMaskShrinkFatten(TransInfo *t); +int MaskShrinkFatten(TransInfo *t, const int mval[2]); + void initTrackball(TransInfo *t); int Trackball(TransInfo *t, const int mval[2]); @@ -552,7 +555,7 @@ struct wmKeyMap *transform_modal_keymap(struct wmKeyConfig *keyconf); /*********************** transform_conversions.c ********** */ struct ListBase; -void flushTransGPactionData(TransInfo *t); +void flushTransIntFrameActionData(TransInfo *t); void flushTransGraphData(TransInfo *t); void remake_graph_transdata(TransInfo *t, struct ListBase *anim_data); void flushTransUVs(TransInfo *t); @@ -561,6 +564,7 @@ int clipUVTransform(TransInfo *t, float *vec, int resize); void flushTransNodes(TransInfo *t); void flushTransSeq(TransInfo *t); void flushTransTracking(TransInfo *t); +void flushTransMasking(TransInfo *t); /*********************** exported from transform_manipulator.c ********** */ int gimbal_axis(struct Object *ob, float gmat[][3]); /* return 0 when no gimbal for selection */ diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index b18d132f8df..d2910c5b602 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -77,7 +77,7 @@ static void constraintAutoValues(TransInfo *t, float vec[3]) { int mode = t->con.mode; if (mode & CON_APPLY) { - float nval = (t->flag & T_NULL_ONE)?1.0f:0.0f; + float nval = (t->flag & T_NULL_ONE) ? 1.0f : 0.0f; if ((mode & CON_AXIS0) == 0) { vec[0] = nval; @@ -95,21 +95,21 @@ void constraintNumInput(TransInfo *t, float vec[3]) { int mode = t->con.mode; if (mode & CON_APPLY) { - float nval = (t->flag & T_NULL_ONE)?1.0f:0.0f; + float nval = (t->flag & T_NULL_ONE) ? 1.0f : 0.0f; if (getConstraintSpaceDimension(t) == 2) { - int axis = mode & (CON_AXIS0|CON_AXIS1|CON_AXIS2); - if (axis == (CON_AXIS0|CON_AXIS1)) { + int axis = mode & (CON_AXIS0 | CON_AXIS1 | CON_AXIS2); + if (axis == (CON_AXIS0 | CON_AXIS1)) { /* vec[0] = vec[0]; */ /* same */ /* vec[1] = vec[1]; */ /* same */ vec[2] = nval; } - else if (axis == (CON_AXIS1|CON_AXIS2)) { + else if (axis == (CON_AXIS1 | CON_AXIS2)) { vec[2] = vec[1]; vec[1] = vec[0]; vec[0] = nval; } - else if (axis == (CON_AXIS0|CON_AXIS2)) { + else if (axis == (CON_AXIS0 | CON_AXIS2)) { /* vec[0] = vec[0]; */ /* same */ vec[2] = vec[1]; vec[1] = nval; @@ -184,7 +184,7 @@ static void viewAxisCorrectCenter(TransInfo *t, float t_con_center[3]) { if (t->spacetype == SPACE_VIEW3D) { // View3D *v3d = t->sa->spacedata.first; - const float min_dist= 1.0f; // v3d->near; + const float min_dist = 1.0f; /* v3d->near; */ float dir[3]; float l; @@ -194,7 +194,7 @@ static void viewAxisCorrectCenter(TransInfo *t, float t_con_center[3]) } project_v3_v3v3(dir, dir, t->viewinv[2]); - l= len_v3(dir); + l = len_v3(dir); if (l < min_dist) { float diff[3]; @@ -211,7 +211,7 @@ static void axisProjection(TransInfo *t, float axis[3], float in[3], float out[3 float norm[3], vec[3], factor, angle; float t_con_center[3]; - if (in[0]==0.0f && in[1]==0.0f && in[2]==0.0f) + if (in[0] == 0.0f && in[1] == 0.0f && in[2] == 0.0f) return; copy_v3_v3(t_con_center, t->con.center); @@ -232,12 +232,12 @@ static void axisProjection(TransInfo *t, float axis[3], float in[3], float out[3 project_v3_v3v3(vec, in, t->viewinv[1]); factor = dot_v3v3(t->viewinv[1], vec) * 2.0f; /* since camera distance is quite relative, use quadratic relationship. holding shift can compensate */ - if (factor<0.0f) factor*= -factor; - else factor*= factor; + if (factor < 0.0f) factor *= -factor; + else factor *= factor; copy_v3_v3(out, axis); normalize_v3(out); - mul_v3_fl(out, -factor); /* -factor makes move down going backwards */ + mul_v3_fl(out, -factor); /* -factor makes move down going backwards */ } else { float v[3], i1[3], i2[3]; @@ -276,10 +276,10 @@ static void axisProjection(TransInfo *t, float axis[3], float in[3], float out[3 sub_v3_v3v3(out, i1, t_con_center); /* possible some values become nan when - * viewpoint and object are both zero */ - if (!finite(out[0])) out[0]= 0.0f; - if (!finite(out[1])) out[1]= 0.0f; - if (!finite(out[2])) out[2]= 0.0f; + * viewpoint and object are both zero */ + if (!finite(out[0])) out[0] = 0.0f; + if (!finite(out[1])) out[1] = 0.0f; + if (!finite(out[2])) out[2] = 0.0f; } } } @@ -386,7 +386,7 @@ static void applyObjectConstraintVec(TransInfo *t, TransData *td, float in[3], f copy_v3_v3(out, pvec); } else { - int i=0; + int i = 0; out[0] = out[1] = out[2] = 0.0f; if (t->con.mode & CON_AXIS0) { @@ -475,21 +475,21 @@ static void applyObjectConstraintSize(TransInfo *t, TransData *td, float smat[3] static void applyAxisConstraintRot(TransInfo *t, TransData *td, float vec[3], float *angle) { if (!td && t->con.mode & CON_APPLY) { - int mode = t->con.mode & (CON_AXIS0|CON_AXIS1|CON_AXIS2); + int mode = t->con.mode & (CON_AXIS0 | CON_AXIS1 | CON_AXIS2); switch (mode) { - case CON_AXIS0: - case (CON_AXIS1|CON_AXIS2): - copy_v3_v3(vec, t->con.mtx[0]); - break; - case CON_AXIS1: - case (CON_AXIS0|CON_AXIS2): - copy_v3_v3(vec, t->con.mtx[1]); - break; - case CON_AXIS2: - case (CON_AXIS0|CON_AXIS1): - copy_v3_v3(vec, t->con.mtx[2]); - break; + case CON_AXIS0: + case (CON_AXIS1 | CON_AXIS2): + copy_v3_v3(vec, t->con.mtx[0]); + break; + case CON_AXIS1: + case (CON_AXIS0 | CON_AXIS2): + copy_v3_v3(vec, t->con.mtx[1]); + break; + case CON_AXIS2: + case (CON_AXIS0 | CON_AXIS1): + copy_v3_v3(vec, t->con.mtx[2]); + break; } /* don't flip axis if asked to or if num input */ if (angle && (mode & CON_NOFLIP) == 0 && hasNumInput(&t->num) == 0) { @@ -517,26 +517,26 @@ static void applyAxisConstraintRot(TransInfo *t, TransData *td, float vec[3], fl static void applyObjectConstraintRot(TransInfo *t, TransData *td, float vec[3], float *angle) { if (t->con.mode & CON_APPLY) { - int mode = t->con.mode & (CON_AXIS0|CON_AXIS1|CON_AXIS2); + int mode = t->con.mode & (CON_AXIS0 | CON_AXIS1 | CON_AXIS2); /* on setup call, use first object */ if (td == NULL) { - td= t->data; + td = t->data; } switch (mode) { - case CON_AXIS0: - case (CON_AXIS1|CON_AXIS2): - copy_v3_v3(vec, td->axismtx[0]); - break; - case CON_AXIS1: - case (CON_AXIS0|CON_AXIS2): - copy_v3_v3(vec, td->axismtx[1]); - break; - case CON_AXIS2: - case (CON_AXIS0|CON_AXIS1): - copy_v3_v3(vec, td->axismtx[2]); - break; + case CON_AXIS0: + case (CON_AXIS1 | CON_AXIS2): + copy_v3_v3(vec, td->axismtx[0]); + break; + case CON_AXIS1: + case (CON_AXIS0 | CON_AXIS2): + copy_v3_v3(vec, td->axismtx[1]); + break; + case CON_AXIS2: + case (CON_AXIS0 | CON_AXIS1): + copy_v3_v3(vec, td->axismtx[2]); + break; } if (angle && (mode & CON_NOFLIP) == 0 && hasNumInput(&t->num) == 0) { if (dot_v3v3(vec, t->viewinv[2]) > 0.0f) { @@ -604,33 +604,33 @@ void setUserConstraint(TransInfo *t, short orientation, int mode, const char fte char text[40]; switch (orientation) { - case V3D_MANIP_GLOBAL: + case V3D_MANIP_GLOBAL: { - float mtx[3][3]= MAT3_UNITY; + float mtx[3][3] = MAT3_UNITY; BLI_snprintf(text, sizeof(text), ftext, "global"); setConstraint(t, mtx, mode, text); } break; - case V3D_MANIP_LOCAL: - BLI_snprintf(text, sizeof(text), ftext, "local"); - setLocalConstraint(t, mode, text); - break; - case V3D_MANIP_NORMAL: - BLI_snprintf(text, sizeof(text), ftext, "normal"); - setConstraint(t, t->spacemtx, mode, text); - break; - case V3D_MANIP_VIEW: - BLI_snprintf(text, sizeof(text), ftext, "view"); - setConstraint(t, t->spacemtx, mode, text); - break; - case V3D_MANIP_GIMBAL: - BLI_snprintf(text, sizeof(text), ftext, "gimbal"); - setConstraint(t, t->spacemtx, mode, text); - break; - default: /* V3D_MANIP_CUSTOM */ - BLI_snprintf(text, sizeof(text), ftext, t->spacename); - setConstraint(t, t->spacemtx, mode, text); - break; + case V3D_MANIP_LOCAL: + BLI_snprintf(text, sizeof(text), ftext, "local"); + setLocalConstraint(t, mode, text); + break; + case V3D_MANIP_NORMAL: + BLI_snprintf(text, sizeof(text), ftext, "normal"); + setConstraint(t, t->spacemtx, mode, text); + break; + case V3D_MANIP_VIEW: + BLI_snprintf(text, sizeof(text), ftext, "view"); + setConstraint(t, t->spacemtx, mode, text); + break; + case V3D_MANIP_GIMBAL: + BLI_snprintf(text, sizeof(text), ftext, "gimbal"); + setConstraint(t, t->spacemtx, mode, text); + break; + default: /* V3D_MANIP_CUSTOM */ + BLI_snprintf(text, sizeof(text), ftext, t->spacename); + setConstraint(t, t->spacemtx, mode, text); + break; } t->con.orientation = orientation; @@ -682,8 +682,8 @@ void drawConstraint(TransInfo *t) setlinestyle(1); glBegin(GL_LINE_STRIP); - glVertex3fv(tc->center); - glVertex3fv(vec); + glVertex3fv(tc->center); + glVertex3fv(vec); glEnd(); setlinestyle(0); @@ -733,7 +733,7 @@ void drawPropCircle(const struct bContext *C, TransInfo *t) float aspx, aspy; ED_space_image_uv_aspect(t->sa->spacedata.first, &aspx, &aspy); - glScalef(1.0f/aspx, 1.0f/aspy, 1.0); + glScalef(1.0f / aspx, 1.0f / aspy, 1.0); } set_inverted_drawing(1); @@ -747,7 +747,7 @@ void drawPropCircle(const struct bContext *C, TransInfo *t) static void drawObjectConstraint(TransInfo *t) { int i; - TransData * td = t->data; + TransData *td = t->data; /* Draw the first one lighter because that's the one who controls the others. * Meaning the transformation is projected on that one and just copied on the others @@ -767,7 +767,7 @@ static void drawObjectConstraint(TransInfo *t) td++; - for (i=1; i < t->total; i++, td++) { + for (i = 1; i < t->total; i++, td++) { if (t->con.mode & CON_AXIS0) { drawLine(t, td->ob->obmat[3], td->axismtx[0], 'X', 0); } @@ -791,7 +791,7 @@ void startConstraint(TransInfo *t) void stopConstraint(TransInfo *t) { - t->con.mode &= ~(CON_APPLY|CON_SELECT); + t->con.mode &= ~(CON_APPLY | CON_SELECT); *t->con.text = '\0'; t->num.idx_max = t->idx_max; } @@ -803,21 +803,21 @@ void getConstraintMatrix(TransInfo *t) unit_m3(t->con.pmtx); if (!(t->con.mode & CON_AXIS0)) { - t->con.pmtx[0][0] = - t->con.pmtx[0][1] = - t->con.pmtx[0][2] = 0.0f; + t->con.pmtx[0][0] = + t->con.pmtx[0][1] = + t->con.pmtx[0][2] = 0.0f; } if (!(t->con.mode & CON_AXIS1)) { - t->con.pmtx[1][0] = - t->con.pmtx[1][1] = - t->con.pmtx[1][2] = 0.0f; + t->con.pmtx[1][0] = + t->con.pmtx[1][1] = + t->con.pmtx[1][2] = 0.0f; } if (!(t->con.mode & CON_AXIS2)) { - t->con.pmtx[2][0] = - t->con.pmtx[2][1] = - t->con.pmtx[2][2] = 0.0f; + t->con.pmtx[2][0] = + t->con.pmtx[2][1] = + t->con.pmtx[2][2] = 0.0f; } mul_m3_m3m3(mat, t->con.pmtx, t->con.imtx); @@ -866,7 +866,7 @@ void postSelectConstraint(TransInfo *t) static void setNearestAxis2d(TransInfo *t) { /* no correction needed... just use whichever one is lower */ - if ( abs(t->mval[0]-t->con.imval[0]) < abs(t->mval[1]-t->con.imval[1]) ) { + if (abs(t->mval[0] - t->con.imval[0]) < abs(t->mval[1] - t->con.imval[1]) ) { t->con.mode |= CON_AXIS1; BLI_snprintf(t->con.text, sizeof(t->con.text), " along Y axis"); } @@ -895,10 +895,10 @@ static void setNearestAxis3d(TransInfo *t) * of two 2D points 30 pixels apart (that's the last factor in the formula) after * projecting them with window_to_3d_delta and then get the length of that vector. */ - zfac= t->persmat[0][3]*t->center[0]+ t->persmat[1][3]*t->center[1]+ t->persmat[2][3]*t->center[2]+ t->persmat[3][3]; - zfac = len_v3(t->persinv[0]) * 2.0f/t->ar->winx * zfac * 30.0f; + zfac = t->persmat[0][3] * t->center[0] + t->persmat[1][3] * t->center[1] + t->persmat[2][3] * t->center[2] + t->persmat[3][3]; + zfac = len_v3(t->persinv[0]) * 2.0f / t->ar->winx * zfac * 30.0f; - for (i = 0; i<3; i++) { + for (i = 0; i < 3; i++) { copy_v3_v3(axis, t->con.mtx[i]); mul_v3_fl(axis, zfac); @@ -922,7 +922,7 @@ static void setNearestAxis3d(TransInfo *t) if (len[0] <= len[1] && len[0] <= len[2]) { if (t->modifiers & MOD_CONSTRAINT_PLANE) { - t->con.mode |= (CON_AXIS1|CON_AXIS2); + t->con.mode |= (CON_AXIS1 | CON_AXIS2); BLI_snprintf(t->con.text, sizeof(t->con.text), " locking %s X axis", t->spacename); } else { @@ -932,7 +932,7 @@ static void setNearestAxis3d(TransInfo *t) } else if (len[1] <= len[0] && len[1] <= len[2]) { if (t->modifiers & MOD_CONSTRAINT_PLANE) { - t->con.mode |= (CON_AXIS0|CON_AXIS2); + t->con.mode |= (CON_AXIS0 | CON_AXIS2); BLI_snprintf(t->con.text, sizeof(t->con.text), " locking %s Y axis", t->spacename); } else { @@ -942,7 +942,7 @@ static void setNearestAxis3d(TransInfo *t) } else if (len[2] <= len[1] && len[2] <= len[0]) { if (t->modifiers & MOD_CONSTRAINT_PLANE) { - t->con.mode |= (CON_AXIS0|CON_AXIS1); + t->con.mode |= (CON_AXIS0 | CON_AXIS1); BLI_snprintf(t->con.text, sizeof(t->con.text), " locking %s Z axis", t->spacename); } else { @@ -976,21 +976,21 @@ void setNearestAxis(TransInfo *t) char constraintModeToChar(TransInfo *t) { - if ((t->con.mode & CON_APPLY)==0) { + if ((t->con.mode & CON_APPLY) == 0) { return '\0'; } - switch (t->con.mode & (CON_AXIS0|CON_AXIS1|CON_AXIS2)) { - case (CON_AXIS0): - case (CON_AXIS1|CON_AXIS2): - return 'X'; - case (CON_AXIS1): - case (CON_AXIS0|CON_AXIS2): - return 'Y'; - case (CON_AXIS2): - case (CON_AXIS0|CON_AXIS1): - return 'Z'; - default: - return '\0'; + switch (t->con.mode & (CON_AXIS0 | CON_AXIS1 | CON_AXIS2)) { + case (CON_AXIS0): + case (CON_AXIS1 | CON_AXIS2): + return 'X'; + case (CON_AXIS1): + case (CON_AXIS0 | CON_AXIS2): + return 'Y'; + case (CON_AXIS2): + case (CON_AXIS0 | CON_AXIS1): + return 'Z'; + default: + return '\0'; } } @@ -999,13 +999,13 @@ int isLockConstraint(TransInfo *t) { int mode = t->con.mode; - if ( (mode & (CON_AXIS0|CON_AXIS1)) == (CON_AXIS0|CON_AXIS1)) + if ((mode & (CON_AXIS0 | CON_AXIS1)) == (CON_AXIS0 | CON_AXIS1)) return 1; - if ( (mode & (CON_AXIS1|CON_AXIS2)) == (CON_AXIS1|CON_AXIS2)) + if ((mode & (CON_AXIS1 | CON_AXIS2)) == (CON_AXIS1 | CON_AXIS2)) return 1; - if ( (mode & (CON_AXIS0|CON_AXIS2)) == (CON_AXIS0|CON_AXIS2)) + if ((mode & (CON_AXIS0 | CON_AXIS2)) == (CON_AXIS0 | CON_AXIS2)) return 1; return 0; diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 1b06f42fd2c..fbc59f4c2cb 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -53,6 +53,7 @@ #include "DNA_meshdata_types.h" #include "DNA_gpencil_types.h" #include "DNA_movieclip_types.h" +#include "DNA_mask_types.h" #include "MEM_guardedalloc.h" @@ -87,6 +88,7 @@ #include "BKE_sequencer.h" #include "BKE_tessmesh.h" #include "BKE_tracking.h" +#include "BKE_mask.h" #include "ED_anim_api.h" @@ -102,9 +104,10 @@ #include "ED_types.h" #include "ED_uvedit.h" #include "ED_clip.h" +#include "ED_mask.h" #include "ED_util.h" /* for crazyspace correction */ -#include "WM_api.h" /* for WM_event_add_notifier to deal with stabilization nodes */ +#include "WM_api.h" /* for WM_event_add_notifier to deal with stabilization nodes */ #include "WM_types.h" #include "UI_view2d.h" @@ -159,10 +162,10 @@ static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail, Tra *head = *temp; if (ihead < head) { - qsort_trans_data(t, ihead, head-1, temp); + qsort_trans_data(t, ihead, head - 1, temp); } if (itail > head) { - qsort_trans_data(t, head+1, itail, temp); + qsort_trans_data(t, head + 1, itail, temp); } } @@ -214,18 +217,18 @@ static void set_prop_dist(TransInfo *t, short with_dist) TransData *tob; int a; - for (a=0, tob= t->data; a<t->total; a++, tob++) { + for (a = 0, tob = t->data; a < t->total; a++, tob++) { - tob->rdist= 0.0f; // init, it was mallocced + tob->rdist = 0.0f; // init, it was mallocced - if ((tob->flag & TD_SELECTED)==0) { + if ((tob->flag & TD_SELECTED) == 0) { TransData *td; int i; float dist, vec[3]; tob->rdist = -1.0f; // signal for next loop - for (i = 0, td= t->data; i < t->total; i++, td++) { + for (i = 0, td = t->data; i < t->total; i++, td++) { if (td->flag & TD_SELECTED) { sub_v3_v3v3(vec, tob->center, td->center); mul_m3_v3(tob->mtx, vec); @@ -237,7 +240,7 @@ static void set_prop_dist(TransInfo *t, short with_dist) tob->rdist = dist; } } - else break; // by definition transdata has selected items in beginning + else break; // by definition transdata has selected items in beginning } if (with_dist) { tob->dist = tob->rdist; @@ -266,16 +269,16 @@ static void createTransTexspace(TransInfo *t) } id = ob->data; - if (id == NULL || !ELEM3(GS(id->name), ID_ME, ID_CU, ID_MB )) { + if (id == NULL || !ELEM3(GS(id->name), ID_ME, ID_CU, ID_MB)) { t->total = 0; return; } t->total = 1; - td= t->data= MEM_callocN(sizeof(TransData), "TransTexspace"); - td->ext= t->ext= MEM_callocN(sizeof(TransDataExtension), "TransTexspace"); + td = t->data = MEM_callocN(sizeof(TransData), "TransTexspace"); + td->ext = t->ext = MEM_callocN(sizeof(TransDataExtension), "TransTexspace"); - td->flag= TD_SELECTED; + td->flag = TD_SELECTED; copy_v3_v3(td->center, ob->obmat[3]); td->ob = ob; @@ -303,7 +306,7 @@ static void createTransEdge(TransInfo *t) BMEdge *eed; BMIter iter; float mtx[3][3], smtx[3][3]; - int count=0, countsel=0; + int count = 0, countsel = 0; int propmode = t->flag & T_PROP_EDIT; BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) { @@ -323,7 +326,7 @@ static void createTransEdge(TransInfo *t) t->total = countsel; } - td= t->data= MEM_callocN(t->total * sizeof(TransData), "TransCrease"); + td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransCrease"); copy_m3_m4(mtx, t->obedit->obmat); invert_m3_m3(smtx, mtx); @@ -337,11 +340,11 @@ static void createTransEdge(TransInfo *t) add_v3_v3v3(td->center, eed->v1->co, eed->v2->co); mul_v3_fl(td->center, 0.5f); - td->loc= NULL; + td->loc = NULL; if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) - td->flag= TD_SELECTED; + td->flag = TD_SELECTED; else - td->flag= 0; + td->flag = 0; copy_m3_m3(td->smtx, smtx); @@ -366,15 +369,15 @@ static void createTransEdge(TransInfo *t) static bKinematicConstraint *has_targetless_ik(bPoseChannel *pchan) { - bConstraint *con= pchan->constraints.first; + bConstraint *con = pchan->constraints.first; - for (;con; con= con->next) { - if (con->type==CONSTRAINT_TYPE_KINEMATIC && (con->enforce!=0.0f)) { - bKinematicConstraint *data= con->data; + for (; con; con = con->next) { + if (con->type == CONSTRAINT_TYPE_KINEMATIC && (con->enforce != 0.0f)) { + bKinematicConstraint *data = con->data; - if (data->tar==NULL) + if (data->tar == NULL) return data; - if (data->tar->type==OB_ARMATURE && data->subtarget[0]==0) + if (data->tar->type == OB_ARMATURE && data->subtarget[0] == 0) return data; } } @@ -385,44 +388,44 @@ static short apply_targetless_ik(Object *ob) { bPoseChannel *pchan, *parchan, *chanlist[256]; bKinematicConstraint *data; - int segcount, apply= 0; + int segcount, apply = 0; /* now we got a difficult situation... we have to find the * target-less IK pchans, and apply transformation to the all * pchans that were in the chain */ - for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) { - data= has_targetless_ik(pchan); + for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { + data = has_targetless_ik(pchan); if (data && (data->flag & CONSTRAINT_IK_AUTO)) { /* fill the array with the bones of the chain (armature.c does same, keep it synced) */ - segcount= 0; + segcount = 0; /* exclude tip from chain? */ if (!(data->flag & CONSTRAINT_IK_TIP)) - parchan= pchan->parent; + parchan = pchan->parent; else - parchan= pchan; + parchan = pchan; /* Find the chain's root & count the segments needed */ - for (; parchan; parchan=parchan->parent) { - chanlist[segcount]= parchan; + for (; parchan; parchan = parchan->parent) { + chanlist[segcount] = parchan; segcount++; - if (segcount==data->rootbone || segcount>255) break; // 255 is weak + if (segcount == data->rootbone || segcount > 255) break; // 255 is weak } - for (;segcount;segcount--) { + for (; segcount; segcount--) { Bone *bone; - float rmat[4][4]/*, tmat[4][4], imat[4][4]*/; + float rmat[4][4] /*, tmat[4][4], imat[4][4]*/; /* pose_mat(b) = pose_mat(b-1) * offs_bone * channel * constraint * IK */ /* we put in channel the entire result of rmat= (channel * constraint * IK) */ /* pose_mat(b) = pose_mat(b-1) * offs_bone * rmat */ /* rmat = pose_mat(b) * inv(pose_mat(b-1) * offs_bone ) */ - parchan= chanlist[segcount-1]; - bone= parchan->bone; - bone->flag |= BONE_TRANSFORM; /* ensures it gets an auto key inserted */ + parchan = chanlist[segcount - 1]; + bone = parchan->bone; + bone->flag |= BONE_TRANSFORM; /* ensures it gets an auto key inserted */ BKE_armature_mat_pose_to_bone(parchan, parchan->pose_mat, rmat); @@ -433,11 +436,11 @@ static short apply_targetless_ik(Object *ob) copy_m3_m4(rmat3, rmat); /* rotation */ - /* [#22409] is partially caused by this, as slight numeric error introduced during - * the solving process leads to locked-axis values changing. However, we cannot modify - * the values here, or else there are huge discreptancies between IK-solver (interactive) - * and applied poses. - */ + /* [#22409] is partially caused by this, as slight numeric error introduced during + * the solving process leads to locked-axis values changing. However, we cannot modify + * the values here, or else there are huge discreptancies between IK-solver (interactive) + * and applied poses. + */ if (parchan->rotmode > 0) mat3_to_eulO(parchan->eul, parchan->rotmode, rmat3); else if (parchan->rotmode == ROT_MODE_AXISANGLE) @@ -467,7 +470,7 @@ static short apply_targetless_ik(Object *ob) } - apply= 1; + apply = 1; data->flag &= ~CONSTRAINT_IK_AUTO; } } @@ -477,7 +480,7 @@ static short apply_targetless_ik(Object *ob) static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, TransData *td) { - Bone *bone= pchan->bone; + Bone *bone = pchan->bone; float pmat[3][3], omat[3][3]; float cmat[3][3], tmat[3][3]; float vec[3]; @@ -496,40 +499,40 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr td->flag |= TD_NO_LOC; } - td->protectflag= pchan->protectflag; + td->protectflag = pchan->protectflag; td->loc = pchan->loc; copy_v3_v3(td->iloc, pchan->loc); - td->ext->size= pchan->size; + td->ext->size = pchan->size; copy_v3_v3(td->ext->isize, pchan->size); if (pchan->rotmode > 0) { - td->ext->rot= pchan->eul; - td->ext->rotAxis= NULL; - td->ext->rotAngle= NULL; - td->ext->quat= NULL; + td->ext->rot = pchan->eul; + td->ext->rotAxis = NULL; + td->ext->rotAngle = NULL; + td->ext->quat = NULL; copy_v3_v3(td->ext->irot, pchan->eul); } else if (pchan->rotmode == ROT_MODE_AXISANGLE) { - td->ext->rot= NULL; - td->ext->rotAxis= pchan->rotAxis; - td->ext->rotAngle= &pchan->rotAngle; - td->ext->quat= NULL; + td->ext->rot = NULL; + td->ext->rotAxis = pchan->rotAxis; + td->ext->rotAngle = &pchan->rotAngle; + td->ext->quat = NULL; - td->ext->irotAngle= pchan->rotAngle; + td->ext->irotAngle = pchan->rotAngle; copy_v3_v3(td->ext->irotAxis, pchan->rotAxis); } else { - td->ext->rot= NULL; - td->ext->rotAxis= NULL; - td->ext->rotAngle= NULL; - td->ext->quat= pchan->quat; + td->ext->rot = NULL; + td->ext->rotAxis = NULL; + td->ext->rotAngle = NULL; + td->ext->quat = pchan->quat; copy_qt_qt(td->ext->iquat, pchan->quat); } - td->ext->rotOrder= pchan->rotmode; + td->ext->rotOrder = pchan->rotmode; /* proper way to get parent transform + own transform + constraints transform */ @@ -556,11 +559,11 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr copy_m3_m4(tmat, pchan->constinv); invert_m3_m3(cmat, tmat); mul_serie_m3(td->mtx, pmat, omat, cmat, NULL, NULL, NULL, NULL, NULL); - mul_serie_m3(td->ext->r_mtx, rpmat, omat, cmat, NULL,NULL,NULL,NULL,NULL); + mul_serie_m3(td->ext->r_mtx, rpmat, omat, cmat, NULL, NULL, NULL, NULL, NULL); } else { - mul_serie_m3(td->mtx, pmat, omat, NULL, NULL,NULL,NULL,NULL,NULL); - mul_serie_m3(td->ext->r_mtx, rpmat, omat, NULL, NULL,NULL,NULL,NULL,NULL); + mul_serie_m3(td->mtx, pmat, omat, NULL, NULL, NULL, NULL, NULL, NULL); + mul_serie_m3(td->ext->r_mtx, rpmat, omat, NULL, NULL, NULL, NULL, NULL, NULL); } invert_m3_m3(td->ext->r_smtx, td->ext->r_mtx); } @@ -585,25 +588,25 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr mul_m3_m3m3(td->axismtx, omat, pmat); normalize_m3(td->axismtx); - if (t->mode==TFM_BONESIZE) { - bArmature *arm= t->poseobj->data; + if (t->mode == TFM_BONESIZE) { + bArmature *arm = t->poseobj->data; - if (arm->drawtype==ARM_ENVELOPE) { - td->loc= NULL; - td->val= &bone->dist; - td->ival= bone->dist; + if (arm->drawtype == ARM_ENVELOPE) { + td->loc = NULL; + td->val = &bone->dist; + td->ival = bone->dist; } else { // abusive storage of scale in the loc pointer :) - td->loc= &bone->xwidth; + td->loc = &bone->xwidth; copy_v3_v3(td->iloc, td->loc); - td->val= NULL; + td->val = NULL; } } /* in this case we can do target-less IK grabbing */ - if (t->mode==TFM_TRANSLATION) { - bKinematicConstraint *data= has_targetless_ik(pchan); + if (t->mode == TFM_TRANSLATION) { + bKinematicConstraint *data = has_targetless_ik(pchan); if (data) { if (data->flag & CONSTRAINT_IK_TIP) { copy_v3_v3(data->grabtarget, pchan->pose_tail); @@ -622,14 +625,14 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr } /* store reference to first constraint */ - td->con= pchan->constraints.first; + td->con = pchan->constraints.first; } static void bone_children_clear_transflag(int mode, short around, ListBase *lb) { - Bone *bone= lb->first; + Bone *bone = lb->first; - for ( ; bone;bone= bone->next) { + for (; bone; bone = bone->next) { if ((bone->flag & BONE_HINGE) && (bone->flag & BONE_CONNECTED)) { bone->flag |= BONE_HINGE_CHILD_TRANSFORM; } @@ -651,7 +654,7 @@ static void bone_children_clear_transflag(int mode, short around, ListBase *lb) * returns total number of bones with BONE_TRANSFORM */ int count_set_pose_transflags(int *out_mode, short around, Object *ob) { - bArmature *arm= ob->data; + bArmature *arm = ob->data; bPoseChannel *pchan; Bone *bone; int mode = *out_mode; @@ -696,7 +699,7 @@ int count_set_pose_transflags(int *out_mode, short around, Object *ob) if (pchan->bone->flag & BONE_HINGE_CHILD_TRANSFORM) hastranslation = 1; } - else if ((pchan->protectflag & OB_LOCK_LOC)!=OB_LOCK_LOC) + else if ((pchan->protectflag & OB_LOCK_LOC) != OB_LOCK_LOC) hastranslation = 1; } else @@ -717,26 +720,26 @@ int count_set_pose_transflags(int *out_mode, short around, Object *ob) /* -------- Auto-IK ---------- */ /* adjust pose-channel's auto-ik chainlen */ -static void pchan_autoik_adjust (bPoseChannel *pchan, short chainlen) +static void pchan_autoik_adjust(bPoseChannel *pchan, short chainlen) { bConstraint *con; /* don't bother to search if no valid constraints */ - if ((pchan->constflag & (PCHAN_HAS_IK|PCHAN_HAS_TARGET))==0) + if ((pchan->constflag & (PCHAN_HAS_IK | PCHAN_HAS_TARGET)) == 0) return; /* check if pchan has ik-constraint */ - for (con= pchan->constraints.first; con; con= con->next) { - if (con->type == CONSTRAINT_TYPE_KINEMATIC && (con->enforce!=0.0f)) { - bKinematicConstraint *data= con->data; + for (con = pchan->constraints.first; con; con = con->next) { + if (con->type == CONSTRAINT_TYPE_KINEMATIC && (con->enforce != 0.0f)) { + bKinematicConstraint *data = con->data; /* only accept if a temporary one (for auto-ik) */ if (data->flag & CONSTRAINT_IK_TEMP) { /* chainlen is new chainlen, but is limited by maximum chainlen */ - if ((chainlen==0) || (chainlen > data->max_rootbone)) - data->rootbone= data->max_rootbone; + if ((chainlen == 0) || (chainlen > data->max_rootbone)) + data->rootbone = data->max_rootbone; else - data->rootbone= chainlen; + data->rootbone = chainlen; } } } @@ -745,7 +748,7 @@ static void pchan_autoik_adjust (bPoseChannel *pchan, short chainlen) /* change the chain-length of auto-ik */ void transform_autoik_update(TransInfo *t, short mode) { - short *chainlen= &t->settings->autoik_chainlen; + short *chainlen = &t->settings->autoik_chainlen; bPoseChannel *pchan; /* mode determines what change to apply to chainlen */ @@ -763,7 +766,7 @@ void transform_autoik_update(TransInfo *t, short mode) return; /* apply to all pose-channels */ - for (pchan=t->poseobj->pose->chanbase.first; pchan; pchan=pchan->next) { + for (pchan = t->poseobj->pose->chanbase.first; pchan; pchan = pchan->next) { pchan_autoik_adjust(pchan, *chainlen); } } @@ -775,17 +778,17 @@ static void pose_grab_with_ik_clear(Object *ob) bPoseChannel *pchan; bConstraint *con, *next; - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { /* clear all temporary lock flags */ - pchan->ikflag &= ~(BONE_IK_NO_XDOF_TEMP|BONE_IK_NO_YDOF_TEMP|BONE_IK_NO_ZDOF_TEMP); + pchan->ikflag &= ~(BONE_IK_NO_XDOF_TEMP | BONE_IK_NO_YDOF_TEMP | BONE_IK_NO_ZDOF_TEMP); - pchan->constflag &= ~(PCHAN_HAS_IK|PCHAN_HAS_TARGET); + pchan->constflag &= ~(PCHAN_HAS_IK | PCHAN_HAS_TARGET); /* remove all temporary IK-constraints added */ - for (con= pchan->constraints.first; con; con= next) { - next= con->next; - if (con->type==CONSTRAINT_TYPE_KINEMATIC) { - data= con->data; + for (con = pchan->constraints.first; con; con = next) { + next = con->next; + if (con->type == CONSTRAINT_TYPE_KINEMATIC) { + data = con->data; if (data->flag & CONSTRAINT_IK_TEMP) { BLI_remlink(&pchan->constraints, con); MEM_freeN(con->data); @@ -793,7 +796,7 @@ static void pose_grab_with_ik_clear(Object *ob) continue; } pchan->constflag |= PCHAN_HAS_IK; - if (data->tar==NULL || (data->tar->type==OB_ARMATURE && data->subtarget[0]==0)) + if (data->tar == NULL || (data->tar->type == OB_ARMATURE && data->subtarget[0] == 0)) pchan->constflag |= PCHAN_HAS_TARGET; } } @@ -812,21 +815,21 @@ static short pose_grab_with_ik_add(bPoseChannel *pchan) return 0; /* Rule: not if there's already an IK on this channel */ - for (con= pchan->constraints.first; con; con= con->next) { - if (con->type==CONSTRAINT_TYPE_KINEMATIC) { - data= con->data; + for (con = pchan->constraints.first; con; con = con->next) { + if (con->type == CONSTRAINT_TYPE_KINEMATIC) { + data = con->data; - if (data->tar==NULL || (data->tar->type==OB_ARMATURE && data->subtarget[0]=='\0')) { + if (data->tar == NULL || (data->tar->type == OB_ARMATURE && data->subtarget[0] == '\0')) { /* make reference to constraint to base things off later (if it's the last targetless constraint encountered) */ targetless = (bKinematicConstraint *)con->data; /* but, if this is a targetless IK, we make it auto anyway (for the children loop) */ - if (con->enforce!=0.0f) { + if (con->enforce != 0.0f) { data->flag |= CONSTRAINT_IK_AUTO; /* if no chain length has been specified, just make things obey standard rotation locks too */ if (data->rootbone == 0) { - for (; pchan; pchan=pchan->parent) { + for (; pchan; pchan = pchan->parent) { /* here, we set ik-settings for bone from pchan->protectflag */ // XXX: careful with quats/axis-angle rotations where we're locking 4d components if (pchan->protectflag & OB_LOCK_ROTX) pchan->ikflag |= BONE_IK_NO_XDOF_TEMP; @@ -839,23 +842,23 @@ static short pose_grab_with_ik_add(bPoseChannel *pchan) } } - if ((con->flag & CONSTRAINT_DISABLE)==0 && (con->enforce!=0.0f)) + if ((con->flag & CONSTRAINT_DISABLE) == 0 && (con->enforce != 0.0f)) return 0; } } con = add_pose_constraint(NULL, pchan, "TempConstraint", CONSTRAINT_TYPE_KINEMATIC); - pchan->constflag |= (PCHAN_HAS_IK|PCHAN_HAS_TARGET); /* for draw, but also for detecting while pose solving */ - data= con->data; + pchan->constflag |= (PCHAN_HAS_IK | PCHAN_HAS_TARGET); /* for draw, but also for detecting while pose solving */ + data = con->data; if (targetless) { /* if exists, use values from last targetless (but disabled) IK-constraint as base */ *data = *targetless; } else - data->flag= CONSTRAINT_IK_TIP; - data->flag |= CONSTRAINT_IK_TEMP|CONSTRAINT_IK_AUTO; + data->flag = CONSTRAINT_IK_TIP; + data->flag |= CONSTRAINT_IK_TEMP | CONSTRAINT_IK_AUTO; copy_v3_v3(data->grabtarget, pchan->pose_tail); - data->rootbone= 0; /* watch-it! has to be 0 here, since we're still on the same bone for the first time through the loop [#25885] */ + data->rootbone = 0; /* watch-it! has to be 0 here, since we're still on the same bone for the first time through the loop [#25885] */ /* we only include bones that are part of a continual connected chain */ while (pchan) { @@ -876,7 +879,7 @@ static short pose_grab_with_ik_add(bPoseChannel *pchan) } /* make a copy of maximum chain-length */ - data->max_rootbone= data->rootbone; + data->max_rootbone = data->rootbone; return 1; } @@ -885,19 +888,19 @@ static short pose_grab_with_ik_add(bPoseChannel *pchan) static short pose_grab_with_ik_children(bPose *pose, Bone *bone) { Bone *bonec; - short wentdeeper=0, added=0; + short wentdeeper = 0, added = 0; /* go deeper if children & children are connected */ - for (bonec= bone->childbase.first; bonec; bonec= bonec->next) { + for (bonec = bone->childbase.first; bonec; bonec = bonec->next) { if (bonec->flag & BONE_CONNECTED) { - wentdeeper= 1; - added+= pose_grab_with_ik_children(pose, bonec); + wentdeeper = 1; + added += pose_grab_with_ik_children(pose, bonec); } } - if (wentdeeper==0) { - bPoseChannel *pchan= BKE_pose_channel_find_name(pose, bone->name); + if (wentdeeper == 0) { + bPoseChannel *pchan = BKE_pose_channel_find_name(pose, bone->name); if (pchan) - added+= pose_grab_with_ik_add(pchan); + added += pose_grab_with_ik_add(pchan); } return added; @@ -909,30 +912,30 @@ static short pose_grab_with_ik(Object *ob) bArmature *arm; bPoseChannel *pchan, *parent; Bone *bonec; - short tot_ik= 0; + short tot_ik = 0; - if ((ob==NULL) || (ob->pose==NULL) || (ob->mode & OB_MODE_POSE)==0) + if ((ob == NULL) || (ob->pose == NULL) || (ob->mode & OB_MODE_POSE) == 0) return 0; arm = ob->data; /* Rule: allow multiple Bones (but they must be selected, and only one ik-solver per chain should get added) */ - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { if (pchan->bone->layer & arm->layer) { if (pchan->bone->flag & BONE_SELECTED) { /* Rule: no IK for solitatry (unconnected) bones */ - for (bonec=pchan->bone->childbase.first; bonec; bonec=bonec->next) { + for (bonec = pchan->bone->childbase.first; bonec; bonec = bonec->next) { if (bonec->flag & BONE_CONNECTED) { break; } } - if ((pchan->bone->flag & BONE_CONNECTED)==0 && (bonec == NULL)) + if ((pchan->bone->flag & BONE_CONNECTED) == 0 && (bonec == NULL)) continue; /* rule: if selected Bone is not a root bone, it gets a temporal IK */ if (pchan->parent) { /* only adds if there's no IK yet (and no parent bone was selected) */ - for (parent= pchan->parent; parent; parent= parent->parent) { + for (parent = pchan->parent; parent; parent = parent->parent) { if (parent->bone->flag & BONE_SELECTED) break; } @@ -958,17 +961,17 @@ static void createTransPose(TransInfo *t, Object *ob) bPoseChannel *pchan; TransData *td; TransDataExtension *tdx; - short ik_on= 0; + short ik_on = 0; int i; - t->total= 0; + t->total = 0; /* check validity of state */ - arm= BKE_armature_from_object(ob); - if ((arm==NULL) || (ob->pose==NULL)) return; + arm = BKE_armature_from_object(ob); + if ((arm == NULL) || (ob->pose == NULL)) return; if (arm->flag & ARM_RESTPOS) { - if (ELEM(t->mode, TFM_DUMMY, TFM_BONESIZE)==0) { + if (ELEM(t->mode, TFM_DUMMY, TFM_BONESIZE) == 0) { // XXX use transform operator reports // BKE_report(op->reports, RPT_ERROR, "Can't select linked when sync selection is enabled"); return; @@ -976,8 +979,8 @@ static void createTransPose(TransInfo *t, Object *ob) } /* do we need to add temporal IK chains? */ - if ((arm->flag & ARM_AUTO_IK) && t->mode==TFM_TRANSLATION) { - ik_on= pose_grab_with_ik(ob); + if ((arm->flag & ARM_AUTO_IK) && t->mode == TFM_TRANSLATION) { + ik_on = pose_grab_with_ik(ob); if (ik_on) t->flag |= T_AUTOIK; } @@ -987,26 +990,26 @@ static void createTransPose(TransInfo *t, Object *ob) if (t->total == 0) return; t->flag |= T_POSE; - t->poseobj= ob; /* we also allow non-active objects to be transformed, in weightpaint */ + t->poseobj = ob; /* we also allow non-active objects to be transformed, in weightpaint */ /* init trans data */ - td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransPoseBone"); - tdx = t->ext = MEM_callocN(t->total*sizeof(TransDataExtension), "TransPoseBoneExt"); - for (i=0; i<t->total; i++, td++, tdx++) { - td->ext= tdx; + td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransPoseBone"); + tdx = t->ext = MEM_callocN(t->total * sizeof(TransDataExtension), "TransPoseBoneExt"); + for (i = 0; i < t->total; i++, td++, tdx++) { + td->ext = tdx; td->val = NULL; } /* use pose channels to fill trans data */ - td= t->data; - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + td = t->data; + for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { if (pchan->bone->flag & BONE_TRANSFORM) { add_pose_transdata(t, pchan, ob, td); td++; } } - if (td != (t->data+t->total)) { + if (td != (t->data + t->total)) { // XXX use transform operator reports // BKE_report(op->reports, RPT_DEBUG, "Bone selection count error"); } @@ -1020,18 +1023,18 @@ static void createTransPose(TransInfo *t, Object *ob) static void createTransArmatureVerts(TransInfo *t) { EditBone *ebo; - bArmature *arm= t->obedit->data; + bArmature *arm = t->obedit->data; ListBase *edbo = arm->edbo; TransData *td; float mtx[3][3], smtx[3][3], delta[3], bonemat[3][3]; /* special hack for envelope drawmode and scaling: - * to allow scaling the size of the envelope around single points, + * to allow scaling the size of the envelope around single points, * mode should become TFM_BONE_ENVELOPE in this case */ // TODO: maybe we need a separate hotkey for it, but this is consistent with 2.4x for now - if ((t->mode == TFM_RESIZE) && (arm->drawtype==ARM_ENVELOPE)) - t->mode= TFM_BONE_ENVELOPE; + if ((t->mode == TFM_RESIZE) && (arm->drawtype == ARM_ENVELOPE)) + t->mode = TFM_BONE_ENVELOPE; t->total = 0; for (ebo = edbo->first; ebo; ebo = ebo->next) { @@ -1058,19 +1061,19 @@ static void createTransArmatureVerts(TransInfo *t) copy_m3_m4(mtx, t->obedit->obmat); invert_m3_m3(smtx, mtx); - td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransEditBone"); + td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransEditBone"); for (ebo = edbo->first; ebo; ebo = ebo->next) { - ebo->oldlength = ebo->length; // length==0.0 on extrude, used for scaling radius of bone points + ebo->oldlength = ebo->length; // length==0.0 on extrude, used for scaling radius of bone points if (EBONE_VISIBLE(arm, ebo) && !(ebo->flag & BONE_EDITMODE_LOCKED)) { - if (t->mode==TFM_BONE_ENVELOPE) { + if (t->mode == TFM_BONE_ENVELOPE) { if (ebo->flag & BONE_ROOTSEL) { - td->val= &ebo->rad_head; - td->ival= *td->val; + td->val = &ebo->rad_head; + td->ival = *td->val; copy_v3_v3(td->center, ebo->head); - td->flag= TD_SELECTED; + td->flag = TD_SELECTED; copy_m3_m3(td->smtx, smtx); copy_m3_m3(td->mtx, mtx); @@ -1082,10 +1085,10 @@ static void createTransArmatureVerts(TransInfo *t) td++; } if (ebo->flag & BONE_TIPSEL) { - td->val= &ebo->rad_tail; - td->ival= *td->val; + td->val = &ebo->rad_tail; + td->ival = *td->val; copy_v3_v3(td->center, ebo->tail); - td->flag= TD_SELECTED; + td->flag = TD_SELECTED; copy_m3_m3(td->smtx, smtx); copy_m3_m3(td->mtx, mtx); @@ -1098,21 +1101,21 @@ static void createTransArmatureVerts(TransInfo *t) } } - else if (t->mode==TFM_BONESIZE) { + else if (t->mode == TFM_BONESIZE) { if (ebo->flag & BONE_SELECTED) { - if (arm->drawtype==ARM_ENVELOPE) { - td->loc= NULL; - td->val= &ebo->dist; - td->ival= ebo->dist; + if (arm->drawtype == ARM_ENVELOPE) { + td->loc = NULL; + td->val = &ebo->dist; + td->ival = ebo->dist; } else { // abusive storage of scale in the loc pointer :) - td->loc= &ebo->xwidth; + td->loc = &ebo->xwidth; copy_v3_v3(td->iloc, td->loc); - td->val= NULL; + td->val = NULL; } copy_v3_v3(td->center, ebo->head); - td->flag= TD_SELECTED; + td->flag = TD_SELECTED; /* use local bone matrix */ sub_v3_v3v3(delta, ebo->tail, ebo->head); @@ -1129,14 +1132,14 @@ static void createTransArmatureVerts(TransInfo *t) td++; } } - else if (t->mode==TFM_BONE_ROLL) { + else if (t->mode == TFM_BONE_ROLL) { if (ebo->flag & BONE_SELECTED) { - td->loc= NULL; - td->val= &(ebo->roll); - td->ival= ebo->roll; + td->loc = NULL; + td->val = &(ebo->roll); + td->ival = ebo->roll; copy_v3_v3(td->center, ebo->head); - td->flag= TD_SELECTED; + td->flag = TD_SELECTED; td->ext = NULL; td->ob = t->obedit; @@ -1147,11 +1150,11 @@ static void createTransArmatureVerts(TransInfo *t) else { if (ebo->flag & BONE_TIPSEL) { copy_v3_v3(td->iloc, ebo->tail); - copy_v3_v3(td->center, (t->around==V3D_LOCAL) ? ebo->head : td->iloc); - td->loc= ebo->tail; - td->flag= TD_SELECTED; + copy_v3_v3(td->center, (t->around == V3D_LOCAL) ? ebo->head : td->iloc); + td->loc = ebo->tail; + td->flag = TD_SELECTED; if (ebo->flag & BONE_EDITMODE_LOCKED) - td->protectflag = OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE; + td->protectflag = OB_LOCK_LOC | OB_LOCK_ROT | OB_LOCK_SCALE; copy_m3_m3(td->smtx, smtx); copy_m3_m3(td->mtx, mtx); @@ -1172,10 +1175,10 @@ static void createTransArmatureVerts(TransInfo *t) if (ebo->flag & BONE_ROOTSEL) { copy_v3_v3(td->iloc, ebo->head); copy_v3_v3(td->center, td->iloc); - td->loc= ebo->head; - td->flag= TD_SELECTED; + td->loc = ebo->head; + td->flag = TD_SELECTED; if (ebo->flag & BONE_EDITMODE_LOCKED) - td->protectflag = OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE; + td->protectflag = OB_LOCK_LOC | OB_LOCK_ROT | OB_LOCK_SCALE; copy_m3_m3(td->smtx, smtx); copy_m3_m3(td->mtx, mtx); @@ -1200,40 +1203,40 @@ static void createTransArmatureVerts(TransInfo *t) static void createTransMBallVerts(TransInfo *t) { - MetaBall *mb = (MetaBall*)t->obedit->data; + MetaBall *mb = (MetaBall *)t->obedit->data; MetaElem *ml; TransData *td; TransDataExtension *tx; float mtx[3][3], smtx[3][3]; - int count=0, countsel=0; + int count = 0, countsel = 0; int propmode = t->flag & T_PROP_EDIT; /* count totals */ - for (ml= mb->editelems->first; ml; ml= ml->next) { + for (ml = mb->editelems->first; ml; ml = ml->next) { if (ml->flag & SELECT) countsel++; if (propmode) count++; } /* note: in prop mode we need at least 1 selected */ - if (countsel==0) return; + if (countsel == 0) return; if (propmode) t->total = count; else t->total = countsel; - td = t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(MBall EditMode)"); - tx = t->ext = MEM_callocN(t->total*sizeof(TransDataExtension), "MetaElement_TransExtension"); + td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransObData(MBall EditMode)"); + tx = t->ext = MEM_callocN(t->total * sizeof(TransDataExtension), "MetaElement_TransExtension"); copy_m3_m4(mtx, t->obedit->obmat); invert_m3_m3(smtx, mtx); - for (ml= mb->editelems->first; ml; ml= ml->next) { + for (ml = mb->editelems->first; ml; ml = ml->next) { if (propmode || (ml->flag & SELECT)) { - td->loc= &ml->x; + td->loc = &ml->x; copy_v3_v3(td->iloc, td->loc); copy_v3_v3(td->center, td->loc); - if (ml->flag & SELECT) td->flag= TD_SELECTED | TD_USEQUAT | TD_SINGLESIZE; - else td->flag= TD_USEQUAT; + if (ml->flag & SELECT) td->flag = TD_SELECTED | TD_USEQUAT | TD_SINGLESIZE; + else td->flag = TD_USEQUAT; copy_m3_m3(td->smtx, smtx); copy_m3_m3(td->mtx, mtx); @@ -1273,7 +1276,7 @@ static void createTransMBallVerts(TransInfo *t) static void calc_distanceCurveVerts(TransData *head, TransData *tail) { TransData *td, *td_near = NULL; - for (td = head; td<=tail; td++) { + for (td = head; td <= tail; td++) { if (td->flag & TD_SELECTED) { td_near = td; td->dist = 0.0f; @@ -1281,8 +1284,8 @@ static void calc_distanceCurveVerts(TransData *head, TransData *tail) else if (td_near) { float dist; dist = len_v3v3(td_near->center, td->center); - if (dist < (td-1)->dist) { - td->dist = (td-1)->dist; + if (dist < (td - 1)->dist) { + td->dist = (td - 1)->dist; } else { td->dist = dist; @@ -1294,7 +1297,7 @@ static void calc_distanceCurveVerts(TransData *head, TransData *tail) } } td_near = NULL; - for (td = tail; td>=head; td--) { + for (td = tail; td >= head; td--) { if (td->flag & TD_SELECTED) { td_near = td; td->dist = 0.0f; @@ -1302,10 +1305,10 @@ static void calc_distanceCurveVerts(TransData *head, TransData *tail) else if (td_near) { float dist; dist = len_v3v3(td_near->center, td->center); - if (td->flag & TD_NOTCONNECTED || dist < td->dist || (td+1)->dist < td->dist) { + if (td->flag & TD_NOTCONNECTED || dist < td->dist || (td + 1)->dist < td->dist) { td->flag &= ~TD_NOTCONNECTED; - if (dist < (td+1)->dist) { - td->dist = (td+1)->dist; + if (dist < (td + 1)->dist) { + td->dist = (td + 1)->dist; } else { td->dist = dist; @@ -1330,44 +1333,44 @@ static TransDataCurveHandleFlags *initTransDataCurveHandles(TransData *td, struc static void createTransCurveVerts(bContext *C, TransInfo *t) { - Object *obedit= CTX_data_edit_object(C); - Curve *cu= obedit->data; + Object *obedit = CTX_data_edit_object(C); + Curve *cu = obedit->data; TransData *td = NULL; - Nurb *nu; + Nurb *nu; BezTriple *bezt; BPoint *bp; float mtx[3][3], smtx[3][3]; int a; - int count=0, countsel=0; + int count = 0, countsel = 0; int propmode = t->flag & T_PROP_EDIT; short hide_handles = (cu->drawflag & CU_HIDE_HANDLES); ListBase *nurbs; /* to be sure */ - if (cu->editnurb==NULL) return; + if (cu->editnurb == NULL) return; /* count total of vertices, check identical as in 2nd loop for making transdata! */ - nurbs= BKE_curve_editNurbs_get(cu); - for (nu= nurbs->first; nu; nu= nu->next) { + nurbs = BKE_curve_editNurbs_get(cu); + for (nu = nurbs->first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) { - for (a=0, bezt= nu->bezt; a<nu->pntsu; a++, bezt++) { - if (bezt->hide==0) { + for (a = 0, bezt = nu->bezt; a < nu->pntsu; a++, bezt++) { + if (bezt->hide == 0) { if (hide_handles) { - if (bezt->f2 & SELECT) countsel+=3; - if (propmode) count+= 3; + if (bezt->f2 & SELECT) countsel += 3; + if (propmode) count += 3; } else { if (bezt->f1 & SELECT) countsel++; if (bezt->f2 & SELECT) countsel++; if (bezt->f3 & SELECT) countsel++; - if (propmode) count+= 3; + if (propmode) count += 3; } } } } else { - for (a= nu->pntsu*nu->pntsv, bp= nu->bp; a>0; a--, bp++) { - if (bp->hide==0) { + for (a = nu->pntsu * nu->pntsv, bp = nu->bp; a > 0; a--, bp++) { + if (bp->hide == 0) { if (propmode) count++; if (bp->f1 & SELECT) countsel++; } @@ -1375,22 +1378,22 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) } } /* note: in prop mode we need at least 1 selected */ - if (countsel==0) return; + if (countsel == 0) return; if (propmode) t->total = count; else t->total = countsel; - t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(Curve EditMode)"); + t->data = MEM_callocN(t->total * sizeof(TransData), "TransObData(Curve EditMode)"); copy_m3_m4(mtx, t->obedit->obmat); invert_m3_m3(smtx, mtx); td = t->data; - for (nu= nurbs->first; nu; nu= nu->next) { + for (nu = nurbs->first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) { TransData *head, *tail; head = tail = td; - for (a=0, bezt= nu->bezt; a<nu->pntsu; a++, bezt++) { - if (bezt->hide==0) { + for (a = 0, bezt = nu->bezt; a < nu->pntsu; a++, bezt++) { + if (bezt->hide == 0) { TransDataCurveHandleFlags *hdata = NULL; if (propmode || @@ -1398,15 +1401,15 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) ((bezt->f1 & SELECT) && hide_handles == 0)) { copy_v3_v3(td->iloc, bezt->vec[0]); - td->loc= bezt->vec[0]; - copy_v3_v3(td->center, bezt->vec[(hide_handles || bezt->f2 & SELECT) ? 1:0]); + td->loc = bezt->vec[0]; + copy_v3_v3(td->center, bezt->vec[(hide_handles || bezt->f2 & SELECT) ? 1 : 0]); if (hide_handles) { - if (bezt->f2 & SELECT) td->flag= TD_SELECTED; - else td->flag= 0; + if (bezt->f2 & SELECT) td->flag = TD_SELECTED; + else td->flag = 0; } else { - if (bezt->f1 & SELECT) td->flag= TD_SELECTED; - else td->flag= 0; + if (bezt->f1 & SELECT) td->flag = TD_SELECTED; + else td->flag = 0; } td->ext = NULL; td->val = NULL; @@ -1424,17 +1427,17 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) /* This is the Curve Point, the other two are handles */ if (propmode || (bezt->f2 & SELECT)) { copy_v3_v3(td->iloc, bezt->vec[1]); - td->loc= bezt->vec[1]; + td->loc = bezt->vec[1]; copy_v3_v3(td->center, td->loc); - if (bezt->f2 & SELECT) td->flag= TD_SELECTED; - else td->flag= 0; + if (bezt->f2 & SELECT) td->flag = TD_SELECTED; + else td->flag = 0; td->ext = NULL; - if (t->mode==TFM_CURVE_SHRINKFATTEN) { /* || t->mode==TFM_RESIZE) {*/ /* TODO - make points scale */ + if (t->mode == TFM_CURVE_SHRINKFATTEN) { /* || t->mode==TFM_RESIZE) {*/ /* TODO - make points scale */ td->val = &(bezt->radius); td->ival = bezt->radius; } - else if (t->mode==TFM_TILT) { + else if (t->mode == TFM_TILT) { td->val = &(bezt->alfa); td->ival = bezt->alfa; } @@ -1445,11 +1448,11 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) copy_m3_m3(td->smtx, smtx); copy_m3_m3(td->mtx, mtx); - if ((bezt->f1&SELECT)==0 && (bezt->f3&SELECT)==0) - /* If the middle is selected but the sides arnt, this is needed */ - if (hdata==NULL) { /* if the handle was not saved by the previous handle */ - hdata = initTransDataCurveHandles(td, bezt); - } + if ((bezt->f1 & SELECT) == 0 && (bezt->f3 & SELECT) == 0) + /* If the middle is selected but the sides arnt, this is needed */ + if (hdata == NULL) { /* if the handle was not saved by the previous handle */ + hdata = initTransDataCurveHandles(td, bezt); + } td++; count++; @@ -1460,20 +1463,20 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) ((bezt->f3 & SELECT) && hide_handles == 0)) { copy_v3_v3(td->iloc, bezt->vec[2]); - td->loc= bezt->vec[2]; - copy_v3_v3(td->center, bezt->vec[(hide_handles || bezt->f2 & SELECT) ? 1:2]); + td->loc = bezt->vec[2]; + copy_v3_v3(td->center, bezt->vec[(hide_handles || bezt->f2 & SELECT) ? 1 : 2]); if (hide_handles) { - if (bezt->f2 & SELECT) td->flag= TD_SELECTED; - else td->flag= 0; + if (bezt->f2 & SELECT) td->flag = TD_SELECTED; + else td->flag = 0; } else { - if (bezt->f3 & SELECT) td->flag= TD_SELECTED; - else td->flag= 0; + if (bezt->f3 & SELECT) td->flag = TD_SELECTED; + else td->flag = 0; } td->ext = NULL; td->val = NULL; - if (hdata==NULL) { /* if the handle was not saved by the previous handle */ + if (hdata == NULL) { /* if the handle was not saved by the previous handle */ hdata = initTransDataCurveHandles(td, bezt); } @@ -1486,12 +1489,12 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) } } else if (propmode && head != tail) { - calc_distanceCurveVerts(head, tail-1); + calc_distanceCurveVerts(head, tail - 1); head = tail; } } if (propmode && head != tail) - calc_distanceCurveVerts(head, tail-1); + calc_distanceCurveVerts(head, tail - 1); /* TODO - in the case of tilt and radius we can also avoid allocating the initTransDataCurveHandles * but for now just don't change handle types */ @@ -1503,17 +1506,17 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) else { TransData *head, *tail; head = tail = td; - for (a= nu->pntsu*nu->pntsv, bp= nu->bp; a>0; a--, bp++) { - if (bp->hide==0) { + for (a = nu->pntsu * nu->pntsv, bp = nu->bp; a > 0; a--, bp++) { + if (bp->hide == 0) { if (propmode || (bp->f1 & SELECT)) { copy_v3_v3(td->iloc, bp->vec); - td->loc= bp->vec; + td->loc = bp->vec; copy_v3_v3(td->center, td->loc); - if (bp->f1 & SELECT) td->flag= TD_SELECTED; - else td->flag= 0; + if (bp->f1 & SELECT) td->flag = TD_SELECTED; + else td->flag = 0; td->ext = NULL; - if (t->mode==TFM_CURVE_SHRINKFATTEN || t->mode==TFM_RESIZE) { + if (t->mode == TFM_CURVE_SHRINKFATTEN || t->mode == TFM_RESIZE) { td->val = &(bp->radius); td->ival = bp->radius; } @@ -1531,12 +1534,12 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) } } else if (propmode && head != tail) { - calc_distanceCurveVerts(head, tail-1); + calc_distanceCurveVerts(head, tail - 1); head = tail; } } if (propmode && head != tail) - calc_distanceCurveVerts(head, tail-1); + calc_distanceCurveVerts(head, tail - 1); } } } @@ -1545,30 +1548,30 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) static void createTransLatticeVerts(TransInfo *t) { - Lattice *latt = ((Lattice*)t->obedit->data)->editlatt->latt; + Lattice *latt = ((Lattice *)t->obedit->data)->editlatt->latt; TransData *td = NULL; BPoint *bp; float mtx[3][3], smtx[3][3]; int a; - int count=0, countsel=0; + int count = 0, countsel = 0; int propmode = t->flag & T_PROP_EDIT; bp = latt->def; a = latt->pntsu * latt->pntsv * latt->pntsw; while (a--) { - if (bp->hide==0) { + if (bp->hide == 0) { if (bp->f1 & SELECT) countsel++; if (propmode) count++; } bp++; } - /* note: in prop mode we need at least 1 selected */ - if (countsel==0) return; + /* note: in prop mode we need at least 1 selected */ + if (countsel == 0) return; if (propmode) t->total = count; else t->total = countsel; - t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(Lattice EditMode)"); + t->data = MEM_callocN(t->total * sizeof(TransData), "TransObData(Lattice EditMode)"); copy_m3_m4(mtx, t->obedit->obmat); invert_m3_m3(smtx, mtx); @@ -1578,12 +1581,12 @@ static void createTransLatticeVerts(TransInfo *t) a = latt->pntsu * latt->pntsv * latt->pntsw; while (a--) { if (propmode || (bp->f1 & SELECT)) { - if (bp->hide==0) { + if (bp->hide == 0) { copy_v3_v3(td->iloc, bp->vec); - td->loc= bp->vec; + td->loc = bp->vec; copy_v3_v3(td->center, td->loc); - if (bp->f1 & SELECT) td->flag= TD_SELECTED; - else td->flag= 0; + if (bp->f1 & SELECT) td->flag = TD_SELECTED; + else td->flag = 0; copy_m3_m3(td->smtx, smtx); copy_m3_m3(td->mtx, mtx); @@ -1616,7 +1619,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) int count = 0, hasselected = 0; int propmode = t->flag & T_PROP_EDIT; - if (edit==NULL || t->settings->particle.selectmode==SCE_SELECT_PATH) return; + if (edit == NULL || t->settings->particle.selectmode == SCE_SELECT_PATH) return; psys = edit->psys; @@ -1625,19 +1628,19 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) base->flag |= BA_HAS_RECALC_DATA; - for (i=0, point=edit->points; i<edit->totpoint; i++, point++) { + for (i = 0, point = edit->points; i < edit->totpoint; i++, point++) { point->flag &= ~PEP_TRANSFORM; - transformparticle= 0; - - if ((point->flag & PEP_HIDE)==0) { - for (k=0, key=point->keys; k<point->totkey; k++, key++) { - if ((key->flag&PEK_HIDE)==0) { - if (key->flag&PEK_SELECT) { - hasselected= 1; - transformparticle= 1; + transformparticle = 0; + + if ((point->flag & PEP_HIDE) == 0) { + for (k = 0, key = point->keys; k < point->totkey; k++, key++) { + if ((key->flag & PEK_HIDE) == 0) { + if (key->flag & PEK_SELECT) { + hasselected = 1; + transformparticle = 1; } else if (propmode) - transformparticle= 1; + transformparticle = 1; } } } @@ -1648,8 +1651,8 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) } } - /* note: in prop mode we need at least 1 selected */ - if (hasselected==0) return; + /* note: in prop mode we need at least 1 selected */ + if (hasselected == 0) return; t->total = count; td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransObData(Particle Mode)"); @@ -1663,7 +1666,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) invert_m4_m4(ob->imat, ob->obmat); - for (i=0, point=edit->points; i<edit->totpoint; i++, point++) { + for (i = 0, point = edit->points; i < edit->totpoint; i++, point++) { TransData *head, *tail; head = tail = td; @@ -1672,7 +1675,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) if (psys && !(psys->flag & PSYS_GLOBAL_HAIR)) psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, psys->particles + i, mat); - for (k=0, key=point->keys; k<point->totkey; k++, key++) { + for (k = 0, key = point->keys; k < point->totkey; k++, key++) { if (key->flag & PEK_USE_WCO) { copy_v3_v3(key->world_co, key->co); mul_m4_v3(mat, key->world_co); @@ -1693,7 +1696,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) unit_m3(td->smtx); /* don't allow moving roots */ - if (k==0 && pset->flag & PE_LOCK_FIRST && (!psys || !(psys->flag & PSYS_GLOBAL_HAIR))) + if (k == 0 && pset->flag & PE_LOCK_FIRST && (!psys || !(psys->flag & PSYS_GLOBAL_HAIR))) td->protectflag |= OB_LOCK_LOC; td->ob = ob; @@ -1703,7 +1706,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t) td->ival = *(key->time); /* abuse size and quat for min/max values */ td->flag |= TD_NO_EXT; - if (k==0) tx->size = NULL; + if (k == 0) tx->size = NULL; else tx->size = (key - 1)->time; if (k == point->totkey - 1) tx->quat = NULL; @@ -1738,15 +1741,15 @@ void flushTransParticles(TransInfo *t) /* we do transform in world space, so flush world space position * back to particle local space (only for hair particles) */ - td= t->data; - for (i=0, point=edit->points; i<edit->totpoint; i++, point++, td++) { + td = t->data; + for (i = 0, point = edit->points; i < edit->totpoint; i++, point++, td++) { if (!(point->flag & PEP_TRANSFORM)) continue; if (psys && !(psys->flag & PSYS_GLOBAL_HAIR)) { psys_mat_hair_to_global(ob, psmd->dm, psys->part->from, psys->particles + i, mat); invert_m4_m4(imat, mat); - for (k=0, key=point->keys; k<point->totkey; k++, key++) { + for (k = 0, key = point->keys; k < point->totkey; k++, key++) { copy_v3_v3(co, key->world_co); mul_m4_v3(imat, co); @@ -1768,7 +1771,7 @@ void flushTransParticles(TransInfo *t) /* ********************* mesh ****************** */ /* proportional distance based on connectivity */ -#define THRESHOLDFACTOR (1.0f-0.0001f) +#define THRESHOLDFACTOR (1.0f - 0.0001f) /* I did this wrong, it should be a breadth-first search * but instead it's a depth-first search, fudged @@ -1778,10 +1781,10 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f { BMVert **queue = NULL; float *dqueue = NULL; - int *tots = MEM_callocN(sizeof(int)*em->bm->totvert, "tots editmesh_set_connectivity_distance"); + int *tots = MEM_callocN(sizeof(int) * em->bm->totvert, "tots editmesh_set_connectivity_distance"); BLI_array_declare(queue); BLI_array_declare(dqueue); - SmallHash svisit, *visit=&svisit; + SmallHash svisit, *visit = &svisit; BMVert *v; BMIter viter; int i, start; @@ -1793,7 +1796,7 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f BLI_smallhash_init(visit); BM_ITER_MESH (v, &viter, em->bm, BM_VERTS_OF_MESH) { - if (BM_elem_flag_test(v, BM_ELEM_SELECT)==0 || BM_elem_flag_test(v, BM_ELEM_HIDDEN)) + if (BM_elem_flag_test(v, BM_ELEM_SELECT) == 0 || BM_elem_flag_test(v, BM_ELEM_HIDDEN)) continue; @@ -1846,7 +1849,7 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f BLI_smallhash_release(visit); - for (i=0; i<em->bm->totvert; i++) { + for (i = 0; i < em->bm->totvert; i++) { if (tots[i]) dists[i] /= (float)tots[i]; } @@ -1857,7 +1860,7 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f } /* loop-in-a-loop I know, but we need it! (ton) */ - static void get_face_center(float cent_r[3], BMVert *eve) +static void get_face_center(float cent_r[3], BMVert *eve) { BMFace *efa; @@ -1886,7 +1889,7 @@ static void get_edge_center(float cent_r[3], BMVert *eve) /* way to overwrite what data is edited with transform */ static void VertsToTransData(TransInfo *t, TransData *td, TransDataExtension *tx, - BMEditMesh *em, BMVert *eve, float *bweight) + BMEditMesh *em, BMVert *eve, float *bweight) { td->flag = 0; //if (key) @@ -1896,7 +1899,7 @@ static void VertsToTransData(TransInfo *t, TransData *td, TransDataExtension *tx copy_v3_v3(td->center, td->loc); - if (t->around==V3D_LOCAL) { + if (t->around == V3D_LOCAL) { if (em->selectmode & SCE_SELECT_FACE) get_face_center(td->center, eve); else if (em->selectmode & SCE_SELECT_EDGE) @@ -1906,12 +1909,12 @@ static void VertsToTransData(TransInfo *t, TransData *td, TransDataExtension *tx // Setting normals copy_v3_v3(td->axismtx[2], eve->no); - td->axismtx[0][0] = - td->axismtx[0][1] = - td->axismtx[0][2] = - td->axismtx[1][0] = - td->axismtx[1][1] = - td->axismtx[1][2] = 0.0f; + td->axismtx[0][0] = + td->axismtx[0][1] = + td->axismtx[0][2] = + td->axismtx[1][0] = + td->axismtx[1][1] = + td->axismtx[1][2] = 0.0f; td->ext = NULL; td->val = NULL; @@ -1942,10 +1945,10 @@ static void createTransEditVerts(bContext *C, TransInfo *t) BMVert *eve; BMIter iter; BMVert *eve_act = NULL; - float *mappedcos = NULL, *quats= NULL; + float *mappedcos = NULL, *quats = NULL; float mtx[3][3], smtx[3][3], (*defmats)[3][3] = NULL, (*defcos)[3] = NULL; - float *dists=NULL; - int count=0, countsel=0, a, totleft; + float *dists = NULL; + int count = 0, countsel = 0, a, totleft; int propmode = (t->flag & T_PROP_EDIT) ? (t->flag & (T_PROP_EDIT | T_PROP_CONNECTED)) : 0; int mirror = 0; char *selstate = NULL; @@ -1974,10 +1977,10 @@ static void createTransEditVerts(bContext *C, TransInfo *t) BMEdge *eed; eve = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); - for ( ; eve; eve=BM_iter_step(&iter)) BM_elem_flag_disable(eve, BM_ELEM_TAG); + for (; eve; eve = BM_iter_step(&iter)) BM_elem_flag_disable(eve, BM_ELEM_TAG); eed = BM_iter_new(&iter, bm, BM_EDGES_OF_MESH, NULL); - for ( ; eed; eed=BM_iter_step(&iter)) { + for (; eed; eed = BM_iter_step(&iter)) { if (BM_elem_flag_test(eed, BM_ELEM_SELECT)) { BM_elem_flag_enable(eed->v1, BM_ELEM_TAG); BM_elem_flag_enable(eed->v2, BM_ELEM_TAG); @@ -1987,16 +1990,16 @@ static void createTransEditVerts(bContext *C, TransInfo *t) else { BMFace *efa; eve = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); - for ( ; eve; eve=BM_iter_step(&iter)) BM_elem_flag_disable(eve, BM_ELEM_TAG); + for (; eve; eve = BM_iter_step(&iter)) BM_elem_flag_disable(eve, BM_ELEM_TAG); efa = BM_iter_new(&iter, bm, BM_FACES_OF_MESH, NULL); - for ( ; efa; efa=BM_iter_step(&iter)) { + for (; efa; efa = BM_iter_step(&iter)) { if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) { BMIter liter; BMLoop *l; l = BM_iter_new(&liter, bm, BM_LOOPS_OF_FACE, efa); - for (; l; l=BM_iter_step(&liter)) { + for (; l; l = BM_iter_step(&liter)) { BM_elem_flag_enable(l->v, BM_ELEM_TAG); } } @@ -2008,7 +2011,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) * verts*/ selstate = MEM_callocN(sizeof(*selstate) * bm->totvert, __func__); eve = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); - for (a=0; eve; eve=BM_iter_step(&iter), a++) { + for (a = 0; eve; eve = BM_iter_step(&iter), a++) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { if (BM_elem_flag_test(eve, BM_ELEM_TAG)) { selstate[a] = 1; @@ -2041,10 +2044,10 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } else t->total = countsel; - tob= t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(Mesh EditMode)"); + tob = t->data = MEM_callocN(t->total * sizeof(TransData), "TransObData(Mesh EditMode)"); if (t->mode == TFM_SKIN_RESIZE) { tx = t->ext = MEM_callocN(t->total * sizeof(TransDataExtension), - "TransObData ext"); + "TransObData ext"); } copy_m3_m4(mtx, t->obedit->obmat); @@ -2055,19 +2058,19 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } /* detect CrazySpace [tm] */ - if (modifiers_getCageIndex(t->scene, t->obedit, NULL, 1)>=0) { + if (modifiers_getCageIndex(t->scene, t->obedit, NULL, 1) >= 0) { if (modifiers_isCorrectableDeformed(t->obedit)) { /* check if we can use deform matrices for modifier from the * start up to stack, they are more accurate than quats */ - totleft= editbmesh_get_first_deform_matrices(t->scene, t->obedit, em, &defmats, &defcos); + totleft = editbmesh_get_first_deform_matrices(t->scene, t->obedit, em, &defmats, &defcos); /* if we still have more modifiers, also do crazyspace * correction with quats, relative to the coordinates after * the modifiers that support deform matrices (defcos) */ if (totleft > 0) { - mappedcos= crazyspace_get_mapped_editverts(t->scene, t->obedit); - quats= MEM_mallocN((t->total)*sizeof(float)*4, "crazy quats"); - crazyspace_set_quats_editmesh(em, (float*)defcos, mappedcos, quats); /* BMESH_TODO, abuses vertex index, should use an int array */ + mappedcos = crazyspace_get_mapped_editverts(t->scene, t->obedit); + quats = MEM_mallocN((t->total) * sizeof(float) * 4, "crazy quats"); + crazyspace_set_quats_editmesh(em, (float *)defcos, mappedcos, quats); /* BMESH_TODO, abuses vertex index, should use an int array */ if (mappedcos) MEM_freeN(mappedcos); } @@ -2080,8 +2083,8 @@ static void createTransEditVerts(bContext *C, TransInfo *t) /* find out which half we do */ if (mirror) { eve = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); - for (a=0; eve; eve=BM_iter_step(&iter), a++) { - if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && selstate[a] && eve->co[0]!=0.0f) { + for (a = 0; eve; eve = BM_iter_step(&iter), a++) { + if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && selstate[a] && eve->co[0] != 0.0f) { if (eve->co[0] < 0.0f) { t->mirror = -1; mirror = -1; @@ -2092,7 +2095,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } eve = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); - for (a=0; eve; eve=BM_iter_step(&iter), a++) { + for (a = 0; eve; eve = BM_iter_step(&iter), a++) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { if (propmode || selstate[a]) { float *bweight = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_BWEIGHT); @@ -2123,11 +2126,11 @@ static void createTransEditVerts(bContext *C, TransInfo *t) /* use both or either quat and defmat correction */ if (quats && BM_elem_index_get(eve) != -1) { - quat_to_mat3(qmat, quats + 4*BM_elem_index_get(eve)); + quat_to_mat3(qmat, quats + 4 * BM_elem_index_get(eve)); if (defmats) mul_serie_m3(mat, mtx, qmat, defmats[a], - NULL, NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL); else mul_m3_m3m3(mat, mtx, qmat); } @@ -2145,8 +2148,8 @@ static void createTransEditVerts(bContext *C, TransInfo *t) } /* Mirror? */ - if ((mirror>0 && tob->iloc[0]>0.0f) || (mirror<0 && tob->iloc[0]<0.0f)) { - BMVert *vmir= EDBM_verts_mirror_get(em, eve); //t->obedit, em, eve, tob->iloc, a); + if ((mirror > 0 && tob->iloc[0] > 0.0f) || (mirror < 0 && tob->iloc[0] < 0.0f)) { + BMVert *vmir = EDBM_verts_mirror_get(em, eve); //t->obedit, em, eve, tob->iloc, a); if (vmir && vmir != eve) { tob->extra = vmir; } @@ -2158,7 +2161,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) if (mirror != 0) { tob = t->data; - for (a = 0; a < t->total; a++, tob++ ) { + for (a = 0; a < t->total; a++, tob++) { if (ABS(tob->loc[0]) <= 0.00001f) { tob->flag |= TD_MIRROR_EDGE; } @@ -2189,13 +2192,13 @@ void flushTransNodes(TransInfo *t) TransData2D *td; /* flush to 2d vector from internally used 3d vector */ - for (a=0, td= t->data2d; a<t->total; a++, td++) { - td->loc2d[0]= td->loc[0]; - td->loc2d[1]= td->loc[1]; + for (a = 0, td = t->data2d; a < t->total; a++, td++) { + td->loc2d[0] = td->loc[0]; + td->loc2d[1] = td->loc[1]; } /* handle intersection with noodles */ - if (t->total==1) { + if (t->total == 1) { ED_node_link_intersect_test(t->sa, 1); } } @@ -2209,11 +2212,11 @@ void flushTransNodes(TransInfo *t) void flushTransSeq(TransInfo *t) { - ListBase *seqbasep= BKE_sequencer_editing_get(t->scene, FALSE)->seqbasep; /* Editing null check already done */ + ListBase *seqbasep = BKE_sequencer_editing_get(t->scene, FALSE)->seqbasep; /* Editing null check already done */ int a, new_frame, old_start; - TransData *td= NULL; - TransData2D *td2d= NULL; - TransDataSeq *tdsq= NULL; + TransData *td = NULL; + TransData2D *td2d = NULL; + TransDataSeq *tdsq = NULL; Sequence *seq; @@ -2221,43 +2224,43 @@ void flushTransSeq(TransInfo *t) /* prevent updating the same seq twice * if the transdata order is changed this will mess up * but so will TransDataSeq */ - Sequence *seq_prev= NULL; + Sequence *seq_prev = NULL; /* flush to 2d vector from internally used 3d vector */ - for (a=0, td= t->data, td2d= t->data2d; a<t->total; a++, td++, td2d++) { - tdsq= (TransDataSeq *)td->extra; - seq= tdsq->seq; + for (a = 0, td = t->data, td2d = t->data2d; a < t->total; a++, td++, td2d++) { + tdsq = (TransDataSeq *)td->extra; + seq = tdsq->seq; old_start = seq->start; - new_frame= (int)floor(td2d->loc[0] + 0.5f); + new_frame = (int)floor(td2d->loc[0] + 0.5f); switch (tdsq->sel_flag) { - case SELECT: + case SELECT: #ifdef SEQ_TX_NESTED_METAS - if ((seq->depth != 0 || seq_tx_test(seq))) /* for meta's, their children move */ - seq->start= new_frame - tdsq->start_offset; + if ((seq->depth != 0 || seq_tx_test(seq))) /* for meta's, their children move */ + seq->start = new_frame - tdsq->start_offset; #else - if (seq->type != SEQ_META && (seq->depth != 0 || seq_tx_test(seq))) /* for meta's, their children move */ - seq->start= new_frame - tdsq->start_offset; + if (seq->type != SEQ_TYPE_META && (seq->depth != 0 || seq_tx_test(seq))) /* for meta's, their children move */ + seq->start = new_frame - tdsq->start_offset; #endif - if (seq->depth==0) { - seq->machine= (int)floor(td2d->loc[1] + 0.5f); - CLAMP(seq->machine, 1, MAXSEQ); - } - break; - case SEQ_LEFTSEL: /* no vertical transform */ - seq_tx_set_final_left(seq, new_frame); - seq_tx_handle_xlimits(seq, tdsq->flag&SEQ_LEFTSEL, tdsq->flag&SEQ_RIGHTSEL); - seq_single_fix(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */ - break; - case SEQ_RIGHTSEL: /* no vertical transform */ - seq_tx_set_final_right(seq, new_frame); - seq_tx_handle_xlimits(seq, tdsq->flag&SEQ_LEFTSEL, tdsq->flag&SEQ_RIGHTSEL); - seq_single_fix(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */ - break; + if (seq->depth == 0) { + seq->machine = (int)floor(td2d->loc[1] + 0.5f); + CLAMP(seq->machine, 1, MAXSEQ); + } + break; + case SEQ_LEFTSEL: /* no vertical transform */ + seq_tx_set_final_left(seq, new_frame); + seq_tx_handle_xlimits(seq, tdsq->flag & SEQ_LEFTSEL, tdsq->flag & SEQ_RIGHTSEL); + seq_single_fix(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */ + break; + case SEQ_RIGHTSEL: /* no vertical transform */ + seq_tx_set_final_right(seq, new_frame); + seq_tx_handle_xlimits(seq, tdsq->flag & SEQ_LEFTSEL, tdsq->flag & SEQ_RIGHTSEL); + seq_single_fix(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */ + break; } if (seq != seq_prev) { - if (seq->depth==0) { + if (seq->depth == 0) { /* Calculate this strip and all nested strips * children are ALWAYS transformed first * so we don't need to do this in another loop. */ @@ -2270,7 +2273,7 @@ void flushTransSeq(TransInfo *t) if (tdsq->sel_flag == SELECT) seq_offset_animdata(t->scene, seq, seq->start - old_start); } - seq_prev= seq; + seq_prev = seq; } @@ -2279,7 +2282,7 @@ void flushTransSeq(TransInfo *t) /* calc all meta's then effects [#27953] */ for (seq = seqbasep->first; seq; seq = seq->next) { - if (seq->type == SEQ_META && seq->flag & SELECT) { + if (seq->type == SEQ_TYPE_META && seq->flag & SELECT) { calc_sequence(t->scene, seq); } } @@ -2292,14 +2295,14 @@ void flushTransSeq(TransInfo *t) /* need to do the overlap check in a new loop otherwise adjacent strips * will not be updated and we'll get false positives */ - seq_prev= NULL; - for (a=0, td= t->data, td2d= t->data2d; a<t->total; a++, td++, td2d++) { + seq_prev = NULL; + for (a = 0, td = t->data, td2d = t->data2d; a < t->total; a++, td++, td2d++) { - tdsq= (TransDataSeq *)td->extra; - seq= tdsq->seq; + tdsq = (TransDataSeq *)td->extra; + seq = tdsq->seq; if (seq != seq_prev) { - if (seq->depth==0) { + if (seq->depth == 0) { /* test overlap, displayes red outline */ seq->flag &= ~SEQ_OVERLAP; if (seq_test_overlap(seqbasep, seq)) { @@ -2307,7 +2310,7 @@ void flushTransSeq(TransInfo *t) } } } - seq_prev= seq; + seq_prev = seq; } } @@ -2323,8 +2326,8 @@ static void UVsToTransData(SpaceImage *sima, TransData *td, TransData2D *td2d, f * proportional editing to be consistent with the stretched uv coords * that are displayed. this also means that for display and numinput, * and when the the uv coords are flushed, these are converted each time */ - td2d->loc[0] = uv[0]*aspx; - td2d->loc[1] = uv[1]*aspy; + td2d->loc[0] = uv[0] * aspx; + td2d->loc[1] = uv[1] * aspy; td2d->loc[2] = 0.0f; td2d->loc2d = uv; @@ -2336,14 +2339,14 @@ static void UVsToTransData(SpaceImage *sima, TransData *td, TransData2D *td2d, f memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - td->ext= NULL; td->val= NULL; + td->ext = NULL; td->val = NULL; if (selected) { td->flag |= TD_SELECTED; - td->dist= 0.0; + td->dist = 0.0; } else { - td->dist= MAXFLOAT; + td->dist = MAXFLOAT; } unit_m3(td->mtx); unit_m3(td->smtx); @@ -2362,14 +2365,14 @@ static void createTransUVs(bContext *C, TransInfo *t) BMFace *efa; BMLoop *l; BMIter iter, liter; - int count=0, countsel=0; + int count = 0, countsel = 0; int propmode = t->flag & T_PROP_EDIT; if (!ED_space_image_show_uvedit(sima, t->obedit)) return; /* count */ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { - tf= CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); + tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible_test(scene, ima, efa, tf)) { BM_elem_flag_disable(efa, BM_ELEM_TAG); @@ -2386,20 +2389,20 @@ static void createTransUVs(bContext *C, TransInfo *t) } } - /* note: in prop mode we need at least 1 selected */ - if (countsel==0) return; + /* note: in prop mode we need at least 1 selected */ + if (countsel == 0) return; - t->total= (propmode)? count: countsel; - t->data= MEM_callocN(t->total*sizeof(TransData), "TransObData(UV Editing)"); + t->total = (propmode) ? count : countsel; + t->data = MEM_callocN(t->total * sizeof(TransData), "TransObData(UV Editing)"); /* for each 2d uv coord a 3d vector is allocated, so that they can be * treated just as if they were 3d verts */ - t->data2d= MEM_callocN(t->total*sizeof(TransData2D), "TransObData2D(UV Editing)"); + t->data2d = MEM_callocN(t->total * sizeof(TransData2D), "TransObData2D(UV Editing)"); if (sima->flag & SI_CLIP_UV) t->flag |= T_CLIP_UV; - td= t->data; - td2d= t->data2d; + td = t->data; + td2d = t->data2d; BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { if (!BM_elem_flag_test(efa, BM_ELEM_TAG)) @@ -2427,17 +2430,17 @@ void flushTransUVs(TransInfo *t) ED_space_image_uv_aspect(sima, &aspx, &aspy); ED_space_image_size(sima, &width, &height); - invx= 1.0f/aspx; - invy= 1.0f/aspy; + invx = 1.0f / aspx; + invy = 1.0f / aspy; /* flush to 2d vector from internally used 3d vector */ - for (a=0, td= t->data2d; a<t->total; a++, td++) { - td->loc2d[0]= td->loc[0]*invx; - td->loc2d[1]= td->loc[1]*invy; + for (a = 0, td = t->data2d; a < t->total; a++, td++) { + td->loc2d[0] = td->loc[0] * invx; + td->loc2d[1] = td->loc[1] * invy; if ((sima->flag & SI_PIXELSNAP) && (t->state != TRANS_CANCEL)) { - td->loc2d[0]= (float)floor(width*td->loc2d[0] + 0.5f)/width; - td->loc2d[1]= (float)floor(height*td->loc2d[1] + 0.5f)/height; + td->loc2d[0] = (float)floor(width * td->loc2d[0] + 0.5f) / width; + td->loc2d[1] = (float)floor(height * td->loc2d[1] + 0.5f) / height; } } } @@ -2445,46 +2448,46 @@ void flushTransUVs(TransInfo *t) int clipUVTransform(TransInfo *t, float *vec, int resize) { TransData *td; - int a, clipx=1, clipy=1; + int a, clipx = 1, clipy = 1; float aspx, aspy, min[2], max[2]; ED_space_image_uv_aspect(t->sa->spacedata.first, &aspx, &aspy); - min[0]= min[1]= 0.0f; - max[0]= aspx; max[1]= aspy; + min[0] = min[1] = 0.0f; + max[0] = aspx; max[1] = aspy; - for (a=0, td= t->data; a<t->total; a++, td++) { + for (a = 0, td = t->data; a < t->total; a++, td++) { DO_MINMAX2(td->loc, min, max); } if (resize) { - if (min[0] < 0.0f && t->center[0] > 0.0f && t->center[0] < aspx*0.5f) - vec[0] *= t->center[0]/(t->center[0] - min[0]); + if (min[0] < 0.0f && t->center[0] > 0.0f && t->center[0] < aspx * 0.5f) + vec[0] *= t->center[0] / (t->center[0] - min[0]); else if (max[0] > aspx && t->center[0] < aspx) - vec[0] *= (t->center[0] - aspx)/(t->center[0] - max[0]); + vec[0] *= (t->center[0] - aspx) / (t->center[0] - max[0]); else - clipx= 0; + clipx = 0; - if (min[1] < 0.0f && t->center[1] > 0.0f && t->center[1] < aspy*0.5f) - vec[1] *= t->center[1]/(t->center[1] - min[1]); + if (min[1] < 0.0f && t->center[1] > 0.0f && t->center[1] < aspy * 0.5f) + vec[1] *= t->center[1] / (t->center[1] - min[1]); else if (max[1] > aspy && t->center[1] < aspy) - vec[1] *= (t->center[1] - aspy)/(t->center[1] - max[1]); + vec[1] *= (t->center[1] - aspy) / (t->center[1] - max[1]); else - clipy= 0; + clipy = 0; } else { if (min[0] < 0.0f) vec[0] -= min[0]; else if (max[0] > aspx) - vec[0] -= max[0]-aspx; + vec[0] -= max[0] - aspx; else - clipx= 0; + clipx = 0; if (min[1] < 0.0f) vec[1] -= min[1]; else if (max[1] > aspy) - vec[1] -= max[1]-aspy; + vec[1] -= max[1] - aspy; else - clipy= 0; + clipy = 0; } return (clipx || clipy); @@ -2509,7 +2512,7 @@ static short FrameOnMouseSide(char side, float frame, float cframe) static void createTransNlaData(bContext *C, TransInfo *t) { - Scene *scene= t->scene; + Scene *scene = t->scene; SpaceNla *snla = NULL; TransData *td = NULL; TransDataNla *tdn = NULL; @@ -2519,7 +2522,7 @@ static void createTransNlaData(bContext *C, TransInfo *t) bAnimListElem *ale; int filter; - int count=0; + int count = 0; /* determine what type of data we are operating on */ if (ANIM_animdata_get_context(C, &ac) == 0) @@ -2527,7 +2530,7 @@ static void createTransNlaData(bContext *C, TransInfo *t) snla = (SpaceNla *)ac.sl; /* filter data */ - filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT); + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_FOREDIT); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* which side of the current frame should be allowed */ @@ -2536,7 +2539,7 @@ static void createTransNlaData(bContext *C, TransInfo *t) float xmouse, ymouse; UI_view2d_region_to_view(&ac.ar->v2d, t->imval[0], t->imval[1], &xmouse, &ymouse); - t->frame_side= (xmouse > CFRA) ? 'R' : 'L'; + t->frame_side = (xmouse > CFRA) ? 'R' : 'L'; } else { /* normal transform - both sides of current frame are considered */ @@ -2544,15 +2547,15 @@ static void createTransNlaData(bContext *C, TransInfo *t) } /* loop 1: count how many strips are selected (consider each strip as 2 points) */ - for (ale= anim_data.first; ale; ale= ale->next) { - NlaTrack *nlt= (NlaTrack *)ale->data; + for (ale = anim_data.first; ale; ale = ale->next) { + NlaTrack *nlt = (NlaTrack *)ale->data; NlaStrip *strip; /* make some meta-strips for chains of selected strips */ BKE_nlastrips_make_metas(&nlt->strips, 1); /* only consider selected strips */ - for (strip= nlt->strips.first; strip; strip= strip->next) { + for (strip = nlt->strips.first; strip; strip = strip->next) { // TODO: we can make strips have handles later on... /* transition strips can't get directly transformed */ if (strip->type != NLASTRIP_TYPE_TRANSITION) { @@ -2572,24 +2575,24 @@ static void createTransNlaData(bContext *C, TransInfo *t) } /* allocate memory for data */ - t->total= count; + t->total = count; - t->data= MEM_callocN(t->total*sizeof(TransData), "TransData(NLA Editor)"); - td= t->data; - t->customData= MEM_callocN(t->total*sizeof(TransDataNla), "TransDataNla (NLA Editor)"); - tdn= t->customData; + t->data = MEM_callocN(t->total * sizeof(TransData), "TransData(NLA Editor)"); + td = t->data; + t->customData = MEM_callocN(t->total * sizeof(TransDataNla), "TransDataNla (NLA Editor)"); + tdn = t->customData; t->flag |= T_FREE_CUSTOMDATA; /* loop 2: build transdata array */ - for (ale= anim_data.first; ale; ale= ale->next) { + for (ale = anim_data.first; ale; ale = ale->next) { /* only if a real NLA-track */ if (ale->type == ANIMTYPE_NLATRACK) { AnimData *adt = ale->adt; - NlaTrack *nlt= (NlaTrack *)ale->data; + NlaTrack *nlt = (NlaTrack *)ale->data; NlaStrip *strip; /* only consider selected strips */ - for (strip= nlt->strips.first; strip; strip= strip->next) { + for (strip = nlt->strips.first; strip; strip = strip->next) { // TODO: we can make strips have handles later on... /* transition strips can't get directly transformed */ if (strip->type != NLASTRIP_TYPE_TRANSITION) { @@ -2599,37 +2602,37 @@ static void createTransNlaData(bContext *C, TransInfo *t) * - td structs are transform-elements operated on by the transform system * and represent a single handle. The storage/pointer used (val or loc) depends on * whether we're scaling or transforming. Ultimately though, the handles - * the td writes to will simply be a dummy in tdn + * the td writes to will simply be a dummy in tdn * - for each strip being transformed, a single tdn struct is used, so in some * cases, there will need to be 1 of these tdn elements in the array skipped... */ float center[3], yval; /* firstly, init tdn settings */ - tdn->id= ale->id; - tdn->oldTrack= tdn->nlt= nlt; - tdn->strip= strip; - tdn->trackIndex= BLI_findindex(&adt->nla_tracks, nlt); - - yval= (float)(tdn->trackIndex * NLACHANNEL_STEP(snla)); - - tdn->h1[0]= strip->start; - tdn->h1[1]= yval; - tdn->h2[0]= strip->end; - tdn->h2[1]= yval; - - center[0]= (float)CFRA; - center[1]= yval; - center[2]= 0.0f; + tdn->id = ale->id; + tdn->oldTrack = tdn->nlt = nlt; + tdn->strip = strip; + tdn->trackIndex = BLI_findindex(&adt->nla_tracks, nlt); + + yval = (float)(tdn->trackIndex * NLACHANNEL_STEP(snla)); + + tdn->h1[0] = strip->start; + tdn->h1[1] = yval; + tdn->h2[0] = strip->end; + tdn->h2[1] = yval; + + center[0] = (float)CFRA; + center[1] = yval; + center[2] = 0.0f; /* set td's based on which handles are applicable */ if (FrameOnMouseSide(t->frame_side, strip->start, (float)CFRA)) { /* just set tdn to assume that it only has one handle for now */ - tdn->handle= -1; + tdn->handle = -1; /* now, link the transform data up to this data */ if (ELEM(t->mode, TFM_TRANSLATION, TFM_TIME_EXTEND)) { - td->loc= tdn->h1; + td->loc = tdn->h1; copy_v3_v3(td->iloc, tdn->h1); /* store all the other gunk that is required by transform */ @@ -2637,30 +2640,30 @@ static void createTransNlaData(bContext *C, TransInfo *t) memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - td->ext= NULL; td->val= NULL; + td->ext = NULL; td->val = NULL; td->flag |= TD_SELECTED; - td->dist= 0.0f; + td->dist = 0.0f; unit_m3(td->mtx); unit_m3(td->smtx); } else { /* time scaling only needs single value */ - td->val= &tdn->h1[0]; - td->ival= tdn->h1[0]; + td->val = &tdn->h1[0]; + td->ival = tdn->h1[0]; } - td->extra= tdn; + td->extra = tdn; td++; } if (FrameOnMouseSide(t->frame_side, strip->end, (float)CFRA)) { /* if tdn is already holding the start handle, then we're doing both, otherwise, only end */ - tdn->handle= (tdn->handle) ? 2 : 1; + tdn->handle = (tdn->handle) ? 2 : 1; /* now, link the transform data up to this data */ if (ELEM(t->mode, TFM_TRANSLATION, TFM_TIME_EXTEND)) { - td->loc= tdn->h2; + td->loc = tdn->h2; copy_v3_v3(td->iloc, tdn->h2); /* store all the other gunk that is required by transform */ @@ -2668,21 +2671,21 @@ static void createTransNlaData(bContext *C, TransInfo *t) memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - td->ext= NULL; td->val= NULL; + td->ext = NULL; td->val = NULL; td->flag |= TD_SELECTED; - td->dist= 0.0f; + td->dist = 0.0f; unit_m3(td->mtx); unit_m3(td->smtx); } else { /* time scaling only needs single value */ - td->val= &tdn->h2[0]; - td->ival= tdn->h2[0]; + td->val = &tdn->h2[0]; + td->ival = tdn->h2[0]; } - td->extra= tdn; + td->extra = tdn; td++; } @@ -2710,11 +2713,11 @@ static void createTransNlaData(bContext *C, TransInfo *t) * It also makes sure gp-frames are still stored in chronological order after * transform. */ -static void posttrans_gpd_clean (bGPdata *gpd) +static void posttrans_gpd_clean(bGPdata *gpd) { bGPDlayer *gpl; - for (gpl= gpd->layers.first; gpl; gpl= gpl->next) { + for (gpl = gpd->layers.first; gpl; gpl = gpl->next) { ListBase sel_buffer = {NULL, NULL}; bGPDframe *gpf, *gpfn; bGPDframe *gfs, *gfsn; @@ -2722,9 +2725,9 @@ static void posttrans_gpd_clean (bGPdata *gpd) /* loop 1: loop through and isolate selected gp-frames to buffer * (these need to be sorted as they are isolated) */ - for (gpf= gpl->frames.first; gpf; gpf= gpfn) { - short added= 0; - gpfn= gpf->next; + for (gpf = gpl->frames.first; gpf; gpf = gpfn) { + short added = 0; + gpfn = gpf->next; if (gpf->flag & GP_FRAME_SELECT) { BLI_remlink(&gpl->frames, gpf); @@ -2733,11 +2736,11 @@ static void posttrans_gpd_clean (bGPdata *gpd) * - go backwards as most frames will still be in order, * so doing it this way will be faster */ - for (gfs= sel_buffer.last; gfs; gfs= gfs->prev) { + for (gfs = sel_buffer.last; gfs; gfs = gfs->prev) { /* if current (gpf) occurs after this one in buffer, add! */ if (gfs->framenum < gpf->framenum) { BLI_insertlinkafter(&sel_buffer, gfs, gpf); - added= 1; + added = 1; break; } } @@ -2752,19 +2755,19 @@ static void posttrans_gpd_clean (bGPdata *gpd) /* if all were selected (i.e. gpl->frames is empty), then just transfer sel-buf over */ if (gpl->frames.first == NULL) { - gpl->frames.first= sel_buffer.first; - gpl->frames.last= sel_buffer.last; + gpl->frames.first = sel_buffer.first; + gpl->frames.last = sel_buffer.last; continue; } /* loop 2: remove duplicates of frames in buffers */ - for (gpf= gpl->frames.first; gpf && sel_buffer.first; gpf= gpfn) { - gpfn= gpf->next; + for (gpf = gpl->frames.first; gpf && sel_buffer.first; gpf = gpfn) { + gpfn = gpf->next; /* loop through sel_buffer, emptying stuff from front of buffer if ok */ - for (gfs= sel_buffer.first; gfs && gpf; gfs= gfsn) { - gfsn= gfs->next; + for (gfs = sel_buffer.first; gfs && gpf; gfs = gfsn) { + gfsn = gfs->next; /* if this buffer frame needs to go before current, add it! */ if (gfs->framenum < gpf->framenum) { @@ -2785,8 +2788,8 @@ static void posttrans_gpd_clean (bGPdata *gpd) } /* if anything is still in buffer, append to end */ - for (gfs= sel_buffer.first; gfs; gfs= gfsn) { - gfsn= gfs->next; + for (gfs = sel_buffer.first; gfs; gfs = gfsn) { + gfsn = gfs->next; BLI_remlink(&sel_buffer, gfs); BLI_addtail(&gpl->frames, gfs); @@ -2794,21 +2797,114 @@ static void posttrans_gpd_clean (bGPdata *gpd) } } + +/* Called by special_aftertrans_update to make sure selected gp-frames replace + * any other gp-frames which may reside on that frame (that are not selected). + * It also makes sure sorted are still stored in chronological order after + * transform. + */ +static void posttrans_mask_clean(Mask *mask) +{ + MaskLayer *masklay; + + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + ListBase sel_buffer = {NULL, NULL}; + MaskLayerShape *masklay_shape, *masklay_shape_new; + MaskLayerShape *masklay_shape_sort, *masklay_shape_sort_new; + + /* loop 1: loop through and isolate selected gp-frames to buffer + * (these need to be sorted as they are isolated) + */ + for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape_new) { + short added = 0; + masklay_shape_new = masklay_shape->next; + + if (masklay_shape->flag & GP_FRAME_SELECT) { + BLI_remlink(&masklay->splines_shapes, masklay_shape); + + /* find place to add them in buffer + * - go backwards as most frames will still be in order, + * so doing it this way will be faster + */ + for (masklay_shape_sort = sel_buffer.last; masklay_shape_sort; masklay_shape_sort = masklay_shape_sort->prev) { + /* if current (masklay_shape) occurs after this one in buffer, add! */ + if (masklay_shape_sort->frame < masklay_shape->frame) { + BLI_insertlinkafter(&sel_buffer, masklay_shape_sort, masklay_shape); + added = 1; + break; + } + } + if (added == 0) + BLI_addhead(&sel_buffer, masklay_shape); + } + } + + /* error checking: it is unlikely, but may be possible to have none selected */ + if (sel_buffer.first == NULL) + continue; + + /* if all were selected (i.e. masklay->splines_shapes is empty), then just transfer sel-buf over */ + if (masklay->splines_shapes.first == NULL) { + masklay->splines_shapes.first = sel_buffer.first; + masklay->splines_shapes.last = sel_buffer.last; + + continue; + } + + /* loop 2: remove duplicates of splines_shapes in buffers */ + for (masklay_shape = masklay->splines_shapes.first; masklay_shape && sel_buffer.first; masklay_shape = masklay_shape_new) { + masklay_shape_new = masklay_shape->next; + + /* loop through sel_buffer, emptying stuff from front of buffer if ok */ + for (masklay_shape_sort = sel_buffer.first; masklay_shape_sort && masklay_shape; masklay_shape_sort = masklay_shape_sort_new) { + masklay_shape_sort_new = masklay_shape_sort->next; + + /* if this buffer frame needs to go before current, add it! */ + if (masklay_shape_sort->frame < masklay_shape->frame) { + /* transfer buffer frame to splines_shapes list (before current) */ + BLI_remlink(&sel_buffer, masklay_shape_sort); + BLI_insertlinkbefore(&masklay->splines_shapes, masklay_shape, masklay_shape_sort); + } + /* if this buffer frame is on same frame, replace current with it and stop */ + else if (masklay_shape_sort->frame == masklay_shape->frame) { + /* transfer buffer frame to splines_shapes list (before current) */ + BLI_remlink(&sel_buffer, masklay_shape_sort); + BLI_insertlinkbefore(&masklay->splines_shapes, masklay_shape, masklay_shape_sort); + + /* get rid of current frame */ + BKE_mask_layer_shape_unlink(masklay, masklay_shape); + } + } + } + + /* if anything is still in buffer, append to end */ + for (masklay_shape_sort = sel_buffer.first; masklay_shape_sort; masklay_shape_sort = masklay_shape_sort_new) { + masklay_shape_sort_new = masklay_shape_sort->next; + + BLI_remlink(&sel_buffer, masklay_shape_sort); + BLI_addtail(&masklay->splines_shapes, masklay_shape_sort); + } + + /* NOTE: this is the only difference to grease pencil code above */ + BKE_mask_layer_shape_sort(masklay); + } +} + /* Called during special_aftertrans_update to make sure selected keyframes replace * any other keyframes which may reside on that frame (that is not selected). */ -static void posttrans_fcurve_clean (FCurve *fcu, const short use_handle) +static void posttrans_fcurve_clean(FCurve *fcu, const short use_handle) { - float *selcache; /* cache for frame numbers of selected frames (fcu->totvert*sizeof(float)) */ - int len, index, i; /* number of frames in cache, item index */ + float *selcache; /* cache for frame numbers of selected frames (fcu->totvert*sizeof(float)) */ + int len, index, i; /* number of frames in cache, item index */ /* allocate memory for the cache */ // TODO: investigate using BezTriple columns instead? - if (fcu->totvert == 0 || fcu->bezt==NULL) + if (fcu->totvert == 0 || fcu->bezt == NULL) return; - selcache= MEM_callocN(sizeof(float)*fcu->totvert, "FCurveSelFrameNums"); - len= 0; - index= 0; + selcache = MEM_callocN(sizeof(float) * fcu->totvert, "FCurveSelFrameNums"); + len = 0; + index = 0; /* We do 2 loops, 1 for marking keyframes for deletion, one for deleting * as there is no guarantee what order the keyframes are exactly, even though @@ -2817,10 +2913,10 @@ static void posttrans_fcurve_clean (FCurve *fcu, const short use_handle) /* Loop 1: find selected keyframes */ for (i = 0; i < fcu->totvert; i++) { - BezTriple *bezt= &fcu->bezt[i]; + BezTriple *bezt = &fcu->bezt[i]; if (BEZSELECTED(bezt)) { - selcache[index]= bezt->vec[1][0]; + selcache[index] = bezt->vec[1][0]; index++; len++; } @@ -2830,12 +2926,12 @@ static void posttrans_fcurve_clean (FCurve *fcu, const short use_handle) * (if any keyframes were found, or the whole curve wasn't affected) */ if ((len) && (len != fcu->totvert)) { - for (i= fcu->totvert-1; i >= 0; i--) { - BezTriple *bezt= &fcu->bezt[i]; + for (i = fcu->totvert - 1; i >= 0; i--) { + BezTriple *bezt = &fcu->bezt[i]; if (BEZSELECTED(bezt) == 0) { /* check beztriple should be removed according to cache */ - for (index= 0; index < len; index++) { + for (index = 0; index < len; index++) { if (IS_EQF(bezt->vec[1][0], selcache[index])) { delete_fcurve_key(fcu, i, 0); break; @@ -2859,21 +2955,21 @@ static void posttrans_fcurve_clean (FCurve *fcu, const short use_handle) * any other keyframes which may reside on that frame (that is not selected). * remake_action_ipos should have already been called */ -static void posttrans_action_clean (bAnimContext *ac, bAction *act) +static void posttrans_action_clean(bAnimContext *ac, bAction *act) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; /* filter data */ - filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/); + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/); ANIM_animdata_filter(ac, &anim_data, filter, act, ANIMCONT_ACTION); /* loop through relevant data, removing keyframes as appropriate - * - all keyframes are converted in/out of global time + * - all keyframes are converted in/out of global time */ - for (ale= anim_data.first; ale; ale= ale->next) { - AnimData *adt= ANIM_nla_mapping_get(ac, ale); + for (ale = anim_data.first; ale; ale = ale->next) { + AnimData *adt = ANIM_nla_mapping_get(ac, ale); if (adt) { ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 1); @@ -2881,7 +2977,7 @@ static void posttrans_action_clean (bAnimContext *ac, bAction *act) ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1); } else - posttrans_fcurve_clean(ale->key_data, FALSE); /* only use handles in graph editor */ + posttrans_fcurve_clean(ale->key_data, FALSE); /* only use handles in graph editor */ } /* free temp data */ @@ -2900,7 +2996,7 @@ static int count_fcurve_keys(FCurve *fcu, char side, float cfra) return count; /* only include points that occur on the right side of cfra */ - for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { + for (i = 0, bezt = fcu->bezt; i < fcu->totvert; i++, bezt++) { if (bezt->f2 & SELECT) { /* no need to adjust the handle selection since they are assumed * selected (like graph editor with SIPO_NOHANDLES) */ @@ -2923,7 +3019,7 @@ static int count_gplayer_frames(bGPDlayer *gpl, char side, float cfra) return count; /* only include points that occur on the right side of cfra */ - for (gpf= gpl->frames.first; gpf; gpf= gpf->next) { + for (gpf = gpl->frames.first; gpf; gpf = gpf->next) { if (gpf->flag & GP_FRAME_SELECT) { if (FrameOnMouseSide(side, (float)gpf->framenum, cfra)) count++; @@ -2933,6 +3029,27 @@ static int count_gplayer_frames(bGPDlayer *gpl, char side, float cfra) return count; } +/* fully select selected beztriples, but only include if it's on the right side of cfra */ +static int count_masklayer_frames(MaskLayer *masklay, char side, float cfra) +{ + MaskLayerShape *masklayer_shape; + int count = 0; + + if (masklay == NULL) + return count; + + /* only include points that occur on the right side of cfra */ + for (masklayer_shape = masklay->splines_shapes.first; masklayer_shape; masklayer_shape = masklayer_shape->next) { + if (masklayer_shape->flag & MASK_SHAPE_SELECT) { + if (FrameOnMouseSide(side, (float)masklayer_shape->frame, cfra)) + count++; + } + } + + return count; +} + + /* This function assigns the information to transdata */ static void TimeToTransData(TransData *td, float *time, AnimData *adt) { @@ -2943,7 +3060,7 @@ static void TimeToTransData(TransData *td, float *time, AnimData *adt) /* store the AnimData where this keyframe exists as a keyframe of the * active action as td->extra. */ - td->extra= adt; + td->extra = adt; } /* This function advances the address to which td points to, so it must return @@ -2962,7 +3079,7 @@ static TransData *ActionFCurveToTransData(TransData *td, TransData2D **td2dv, FC if (ELEM(NULL, fcu, fcu->bezt)) return td; - for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { + for (i = 0, bezt = fcu->bezt; i < fcu->totvert; i++, bezt++) { /* only add selected keyframes (for now, proportional edit is not enabled) */ if (bezt->f2 & SELECT) { /* note this MUST match count_fcurve_keys(), so can't use BEZSELECTED() macro */ /* only add if on the right 'side' of the current frame */ @@ -2970,7 +3087,7 @@ static TransData *ActionFCurveToTransData(TransData *td, TransData2D **td2dv, FC TimeToTransData(td, bezt->vec[1], adt); /*set flags to move handles as necessary*/ - td->flag |= TD_MOVEHANDLE1|TD_MOVEHANDLE2; + td->flag |= TD_MOVEHANDLE1 | TD_MOVEHANDLE2; td2d->h1 = bezt->vec[0]; td2d->h2 = bezt->vec[2]; @@ -2990,25 +3107,25 @@ static TransData *ActionFCurveToTransData(TransData *td, TransData2D **td2dv, FC /* helper struct for gp-frame transforms (only used here) */ typedef struct tGPFtransdata { - float val; /* where transdata writes transform */ - int *sdata; /* pointer to gpf->framenum */ + float val; /* where transdata writes transform */ + int *sdata; /* pointer to gpf->framenum */ } tGPFtransdata; /* This function helps flush transdata written to tempdata into the gp-frames */ -void flushTransGPactionData(TransInfo *t) +void flushTransIntFrameActionData(TransInfo *t) { tGPFtransdata *tfd; int i; /* find the first one to start from */ if (t->mode == TFM_TIME_SLIDE) - tfd= (tGPFtransdata *)((float *)(t->customData) + 2); + tfd = (tGPFtransdata *)((float *)(t->customData) + 2); else - tfd= (tGPFtransdata *)(t->customData); + tfd = (tGPFtransdata *)(t->customData); /* flush data! */ for (i = 0; i < t->total; i++, tfd++) { - *(tfd->sdata)= (int)floor(tfd->val + 0.5f); + *(tfd->sdata) = (int)floor(tfd->val + 0.5f); } } @@ -3019,21 +3136,21 @@ void flushTransGPactionData(TransInfo *t) * The 'side' argument is needed for the extend mode. 'B' = both sides, 'R'/'L' mean only data * on the named side are used. */ -static int GPLayerToTransData (TransData *td, tGPFtransdata *tfd, bGPDlayer *gpl, char side, float cfra) +static int GPLayerToTransData(TransData *td, tGPFtransdata *tfd, bGPDlayer *gpl, char side, float cfra) { bGPDframe *gpf; - int count= 0; + int count = 0; /* check for select frames on right side of current frame */ - for (gpf= gpl->frames.first; gpf; gpf= gpf->next) { + for (gpf = gpl->frames.first; gpf; gpf = gpf->next) { if (gpf->flag & GP_FRAME_SELECT) { if (FrameOnMouseSide(side, (float)gpf->framenum, cfra)) { /* memory is calloc'ed, so that should zero everything nicely for us */ - td->val= &tfd->val; - td->ival= (float)gpf->framenum; + td->val = &tfd->val; + td->ival = (float)gpf->framenum; - tfd->val= (float)gpf->framenum; - tfd->sdata= &gpf->framenum; + tfd->val = (float)gpf->framenum; + tfd->sdata = &gpf->framenum; /* advance td now */ td++; @@ -3046,9 +3163,38 @@ static int GPLayerToTransData (TransData *td, tGPFtransdata *tfd, bGPDlayer *gpl return count; } +/* refer to comment above #GPLayerToTransData, this is the same but for masks */ +static int MaskLayerToTransData(TransData *td, tGPFtransdata *tfd, MaskLayer *masklay, char side, float cfra) +{ + MaskLayerShape *masklay_shape; + int count = 0; + + /* check for select frames on right side of current frame */ + for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape->next) { + if (masklay_shape->flag & MASK_SHAPE_SELECT) { + if (FrameOnMouseSide(side, (float)masklay_shape->frame, cfra)) { + /* memory is calloc'ed, so that should zero everything nicely for us */ + td->val = &tfd->val; + td->ival = (float)masklay_shape->frame; + + tfd->val = (float)masklay_shape->frame; + tfd->sdata = &masklay_shape->frame; + + /* advance td now */ + td++; + tfd++; + count++; + } + } + } + + return count; +} + + static void createTransActionData(bContext *C, TransInfo *t) { - Scene *scene= t->scene; + Scene *scene = t->scene; TransData *td = NULL; TransData2D *td2d = NULL; tGPFtransdata *tfd = NULL; @@ -3058,7 +3204,7 @@ static void createTransActionData(bContext *C, TransInfo *t) bAnimListElem *ale; int filter; - int count=0; + int count = 0; float cfra; /* determine what type of data we are operating on */ @@ -3066,10 +3212,10 @@ static void createTransActionData(bContext *C, TransInfo *t) return; /* filter data */ - if (ac.datatype == ANIMCONT_GPENCIL) - filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT); + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT); else - filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/); + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* which side of the current frame should be allowed */ @@ -3086,8 +3232,8 @@ static void createTransActionData(bContext *C, TransInfo *t) } /* loop 1: fully select ipo-keys and count how many BezTriples are selected */ - for (ale= anim_data.first; ale; ale= ale->next) { - AnimData *adt= ANIM_nla_mapping_get(&ac, ale); + for (ale = anim_data.first; ale; ale = ale->next) { + AnimData *adt = ANIM_nla_mapping_get(&ac, ale); /* convert current-frame to action-time (slightly less accurate, especially under * higher scaling ratios, but is faster than converting all points) @@ -3099,8 +3245,12 @@ static void createTransActionData(bContext *C, TransInfo *t) if (ale->type == ANIMTYPE_FCURVE) count += count_fcurve_keys(ale->key_data, t->frame_side, cfra); - else + else if (ale->type == ANIMTYPE_GPLAYER) count += count_gplayer_frames(ale->data, t->frame_side, cfra); + else if (ale->type == ANIMTYPE_MASKLAYER) + count += count_masklayer_frames(ale->data, t->frame_side, cfra); + else + BLI_assert(0); } /* stop if trying to build list if nothing selected */ @@ -3111,39 +3261,47 @@ static void createTransActionData(bContext *C, TransInfo *t) } /* allocate memory for data */ - t->total= count; + t->total = count; - t->data= MEM_callocN(t->total*sizeof(TransData), "TransData(Action Editor)"); - t->data2d= MEM_callocN(t->total*sizeof(TransData2D), "transdata2d"); - td= t->data; + t->data = MEM_callocN(t->total * sizeof(TransData), "TransData(Action Editor)"); + t->data2d = MEM_callocN(t->total * sizeof(TransData2D), "transdata2d"); + td = t->data; td2d = t->data2d; - if (ac.datatype == ANIMCONT_GPENCIL) { + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) { if (t->mode == TFM_TIME_SLIDE) { - t->customData= MEM_callocN((sizeof(float)*2)+(sizeof(tGPFtransdata)*count), "TimeSlide + tGPFtransdata"); - tfd= (tGPFtransdata *)((float *)(t->customData) + 2); + t->customData = MEM_callocN((sizeof(float) * 2) + (sizeof(tGPFtransdata) * count), "TimeSlide + tGPFtransdata"); + tfd = (tGPFtransdata *)((float *)(t->customData) + 2); } else { - t->customData= MEM_callocN(sizeof(tGPFtransdata)*count, "tGPFtransdata"); - tfd= (tGPFtransdata *)(t->customData); + t->customData = MEM_callocN(sizeof(tGPFtransdata) * count, "tGPFtransdata"); + tfd = (tGPFtransdata *)(t->customData); } } else if (t->mode == TFM_TIME_SLIDE) - t->customData= MEM_callocN(sizeof(float)*2, "TimeSlide Min/Max"); + t->customData = MEM_callocN(sizeof(float) * 2, "TimeSlide Min/Max"); /* loop 2: build transdata array */ - for (ale= anim_data.first; ale; ale= ale->next) { + for (ale = anim_data.first; ale; ale = ale->next) { if (ale->type == ANIMTYPE_GPLAYER) { - bGPDlayer *gpl= (bGPDlayer *)ale->data; + bGPDlayer *gpl = (bGPDlayer *)ale->data; int i; i = GPLayerToTransData(td, tfd, gpl, t->frame_side, cfra); td += i; tfd += i; } + else if (ale->type == ANIMTYPE_MASKLAYER) { + MaskLayer *masklay = (MaskLayer *)ale->data; + int i; + + i = MaskLayerToTransData(td, tfd, masklay, t->frame_side, cfra); + td += i; + tfd += i; + } else { - AnimData *adt= ANIM_nla_mapping_get(&ac, ale); - FCurve *fcu= (FCurve *)ale->key_data; + AnimData *adt = ANIM_nla_mapping_get(&ac, ale); + FCurve *fcu = (FCurve *)ale->key_data; /* convert current-frame to action-time (slightly less accurate, especially under * higher scaling ratios, but is faster than converting all points) @@ -3153,19 +3311,19 @@ static void createTransActionData(bContext *C, TransInfo *t) else cfra = (float)CFRA; - td= ActionFCurveToTransData(td, &td2d, fcu, adt, t->frame_side, cfra); + td = ActionFCurveToTransData(td, &td2d, fcu, adt, t->frame_side, cfra); } } /* check if we're supposed to be setting minx/maxx for TimeSlide */ if (t->mode == TFM_TIME_SLIDE) { - float min=999999999.0f, max=-999999999.0f; + float min = 999999999.0f, max = -999999999.0f; int i; - td= t->data; - for (i=0; i < count; i++, td++) { - if (min > *(td->val)) min= *(td->val); - if (max < *(td->val)) max= *(td->val); + td = t->data; + for (i = 0; i < count; i++, td++) { + if (min > *(td->val)) min = *(td->val); + if (max < *(td->val)) max = *(td->val); } if (min == max) { @@ -3191,9 +3349,9 @@ static void createTransActionData(bContext *C, TransInfo *t) /* Helper function for createTransGraphEditData, which is responsible for associating * source data with transform data */ -static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, BezTriple *bezt, - int bi, short selected, short ishandle, short intvals, - float mtx[3][3], float smtx[3][3]) +static void bezt_to_transdata(TransData *td, TransData2D *td2d, AnimData *adt, BezTriple *bezt, + int bi, short selected, short ishandle, short intvals, + float mtx[3][3], float smtx[3][3]) { float *loc = bezt->vec[bi]; float *cent = bezt->vec[1]; @@ -3246,17 +3404,17 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - td->ext= NULL; td->val= NULL; + td->ext = NULL; td->val = NULL; /* store AnimData info in td->extra, for applying mapping when flushing */ - td->extra= adt; + td->extra = adt; if (selected) { td->flag |= TD_SELECTED; - td->dist= 0.0f; + td->dist = 0.0f; } else - td->dist= MAXFLOAT; + td->dist = MAXFLOAT; if (ishandle) td->flag |= TD_NOTIMESNAP; @@ -3271,9 +3429,9 @@ static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, static void createTransGraphEditData(bContext *C, TransInfo *t) { SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first; - Scene *scene= t->scene; - ARegion *ar= t->ar; - View2D *v2d= &ar->v2d; + Scene *scene = t->scene; + ARegion *ar = t->ar; + View2D *v2d = &ar->v2d; TransData *td = NULL; TransData2D *td2d = NULL; @@ -3284,7 +3442,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) int filter; BezTriple *bezt; - int count=0, i; + int count = 0, i; float cfra; float mtx[3][3], smtx[3][3]; const short use_handle = !(sipo->flag & SIPO_NOHANDLES); @@ -3294,11 +3452,11 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) return; /* filter data */ - filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVE_VISIBLE); + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVE_VISIBLE); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* which side of the current frame should be allowed */ - // XXX we still want this mode, but how to get this using standard transform too? + // XXX we still want this mode, but how to get this using standard transform too? if (t->mode == TFM_TIME_EXTEND) { /* only side on which mouse is gets transformed */ float xmouse, ymouse; @@ -3312,9 +3470,9 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) } /* loop 1: count how many BezTriples (specifically their verts) are selected (or should be edited) */ - for (ale= anim_data.first; ale; ale= ale->next) { - AnimData *adt= ANIM_nla_mapping_get(&ac, ale); - FCurve *fcu= (FCurve *)ale->key_data; + for (ale = anim_data.first; ale; ale = ale->next) { + AnimData *adt = ANIM_nla_mapping_get(&ac, ale); + FCurve *fcu = (FCurve *)ale->key_data; /* convert current-frame to action-time (slightly less accurate, especially under * higher scaling ratios, but is faster than converting all points) @@ -3329,11 +3487,11 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) continue; /* only include BezTriples whose 'keyframe' occurs on the same side of the current frame as mouse */ - for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) { + for (i = 0, bezt = fcu->bezt; i < fcu->totvert; i++, bezt++) { if (FrameOnMouseSide(t->frame_side, bezt->vec[1][0], cfra)) { - const char sel2= bezt->f2 & SELECT; - const char sel1= use_handle ? bezt->f1 & SELECT : sel2; - const char sel3= use_handle ? bezt->f3 & SELECT : sel2; + const char sel2 = bezt->f2 & SELECT; + const char sel1 = use_handle ? bezt->f1 & SELECT : sel2; + const char sel3 = use_handle ? bezt->f3 & SELECT : sel2; if (ELEM3(t->mode, TFM_TRANSLATION, TFM_TIME_TRANSLATE, TFM_TIME_SLIDE)) { /* for 'normal' pivots - just include anything that is selected. @@ -3373,14 +3531,14 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) } /* allocate memory for data */ - t->total= count; + t->total = count; - t->data= MEM_callocN(t->total*sizeof(TransData), "TransData (Graph Editor)"); - /* for each 2d vert a 3d vector is allocated, so that they can be treated just as if they were 3d verts */ - t->data2d= MEM_callocN(t->total*sizeof(TransData2D), "TransData2D (Graph Editor)"); + t->data = MEM_callocN(t->total * sizeof(TransData), "TransData (Graph Editor)"); + /* for each 2d vert a 3d vector is allocated, so that they can be treated just as if they were 3d verts */ + t->data2d = MEM_callocN(t->total * sizeof(TransData2D), "TransData2D (Graph Editor)"); - td= t->data; - td2d= t->data2d; + td = t->data; + td2d = t->data2d; /* precompute space-conversion matrices for dealing with non-uniform scaling of Graph Editor */ unit_m3(mtx); @@ -3397,15 +3555,15 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) mul_v3_fl(mtx[1], yscale); /* smtx is global (i.e. view) to data conversion */ - if (IS_EQF(xscale, 0.0f) == 0) mul_v3_fl(smtx[0], 1.0f/xscale); - if (IS_EQF(yscale, 0.0f) == 0) mul_v3_fl(smtx[1], 1.0f/yscale); + if (IS_EQF(xscale, 0.0f) == 0) mul_v3_fl(smtx[0], 1.0f / xscale); + if (IS_EQF(yscale, 0.0f) == 0) mul_v3_fl(smtx[1], 1.0f / yscale); } /* loop 2: build transdata arrays */ - for (ale= anim_data.first; ale; ale= ale->next) { - AnimData *adt= ANIM_nla_mapping_get(&ac, ale); - FCurve *fcu= (FCurve *)ale->key_data; - short intvals= (fcu->flag & FCURVE_INT_VALUES); + for (ale = anim_data.first; ale; ale = ale->next) { + AnimData *adt = ANIM_nla_mapping_get(&ac, ale); + FCurve *fcu = (FCurve *)ale->key_data; + short intvals = (fcu->flag & FCURVE_INT_VALUES); /* convert current-frame to action-time (slightly less accurate, especially under * higher scaling ratios, but is faster than converting all points) @@ -3419,14 +3577,14 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) if (fcu->bezt == NULL) continue; - ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, ale->key_data, ANIM_UNITCONV_ONLYSEL|ANIM_UNITCONV_SELVERTS); + ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, ale->key_data, ANIM_UNITCONV_ONLYSEL | ANIM_UNITCONV_SELVERTS); /* only include BezTriples whose 'keyframe' occurs on the same side of the current frame as mouse (if applicable) */ - for (i=0, bezt= fcu->bezt; i < fcu->totvert; i++, bezt++) { + for (i = 0, bezt = fcu->bezt; i < fcu->totvert; i++, bezt++) { if (FrameOnMouseSide(t->frame_side, bezt->vec[1][0], cfra)) { - const char sel2= bezt->f2 & SELECT; - const char sel1= use_handle ? bezt->f1 & SELECT : sel2; - const char sel3= use_handle ? bezt->f3 & SELECT : sel2; + const char sel2 = bezt->f2 & SELECT; + const char sel1 = use_handle ? bezt->f1 & SELECT : sel2; + const char sel3 = use_handle ? bezt->f3 & SELECT : sel2; TransDataCurveHandleFlags *hdata = NULL; /* short h1=1, h2=1; */ /* UNUSED */ @@ -3444,7 +3602,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) } if (sel3) { - if (hdata==NULL) + if (hdata == NULL) hdata = initTransDataCurveHandles(td, bezt); bezt_to_transdata(td++, td2d++, adt, bezt, 2, 1, 1, intvals, mtx, smtx); } @@ -3481,8 +3639,8 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) ELEM(t->mode, TFM_ROTATION, TFM_RESIZE)) { if (hdata && (sel1) && (sel3)) { - bezt->h1= HD_ALIGN; - bezt->h2= HD_ALIGN; + bezt->h1 = HD_ALIGN; + bezt->h2 = HD_ALIGN; } } } @@ -3502,64 +3660,64 @@ static void createTransGraphEditData(bContext *C, TransInfo *t) /* struct for use in re-sorting BezTriples during Graph Editor transform */ typedef struct BeztMap { BezTriple *bezt; - unsigned int oldIndex; /* index of bezt in fcu->bezt array before sorting */ - unsigned int newIndex; /* index of bezt in fcu->bezt array after sorting */ - short swapHs; /* swap order of handles (-1=clear; 0=not checked, 1=swap) */ - char pipo, cipo; /* interpolation of current and next segments */ + unsigned int oldIndex; /* index of bezt in fcu->bezt array before sorting */ + unsigned int newIndex; /* index of bezt in fcu->bezt array after sorting */ + short swapHs; /* swap order of handles (-1=clear; 0=not checked, 1=swap) */ + char pipo, cipo; /* interpolation of current and next segments */ } BeztMap; /* This function converts an FCurve's BezTriple array to a BeztMap array * NOTE: this allocates memory that will need to get freed later */ -static BeztMap *bezt_to_beztmaps (BezTriple *bezts, int totvert, const short UNUSED(use_handle)) +static BeztMap *bezt_to_beztmaps(BezTriple *bezts, int totvert, const short UNUSED(use_handle)) { - BezTriple *bezt= bezts; - BezTriple *prevbezt= NULL; + BezTriple *bezt = bezts; + BezTriple *prevbezt = NULL; BeztMap *bezm, *bezms; int i; /* allocate memory for this array */ - if (totvert==0 || bezts==NULL) + if (totvert == 0 || bezts == NULL) return NULL; - bezm= bezms= MEM_callocN(sizeof(BeztMap)*totvert, "BeztMaps"); + bezm = bezms = MEM_callocN(sizeof(BeztMap) * totvert, "BeztMaps"); /* assign beztriples to beztmaps */ - for (i=0; i < totvert; i++, bezm++, prevbezt=bezt, bezt++) { - bezm->bezt= bezt; + for (i = 0; i < totvert; i++, bezm++, prevbezt = bezt, bezt++) { + bezm->bezt = bezt; - bezm->oldIndex= i; - bezm->newIndex= i; + bezm->oldIndex = i; + bezm->newIndex = i; - bezm->pipo= (prevbezt) ? prevbezt->ipo : bezt->ipo; - bezm->cipo= bezt->ipo; + bezm->pipo = (prevbezt) ? prevbezt->ipo : bezt->ipo; + bezm->cipo = bezt->ipo; } return bezms; } /* This function copies the code of sort_time_ipocurve, but acts on BeztMap structs instead */ -static void sort_time_beztmaps (BeztMap *bezms, int totvert, const short UNUSED(use_handle)) +static void sort_time_beztmaps(BeztMap *bezms, int totvert, const short UNUSED(use_handle)) { BeztMap *bezm; - int i, ok= 1; + int i, ok = 1; /* keep repeating the process until nothing is out of place anymore */ while (ok) { - ok= 0; + ok = 0; - bezm= bezms; - i= totvert; + bezm = bezms; + i = totvert; while (i--) { /* is current bezm out of order (i.e. occurs later than next)? */ if (i > 0) { - if (bezm->bezt->vec[1][0] > (bezm+1)->bezt->vec[1][0]) { + if (bezm->bezt->vec[1][0] > (bezm + 1)->bezt->vec[1][0]) { bezm->newIndex++; - (bezm+1)->newIndex--; + (bezm + 1)->newIndex--; - SWAP(BeztMap, *bezm, *(bezm+1)); + SWAP(BeztMap, *bezm, *(bezm + 1)); - ok= 1; + ok = 1; } } @@ -3585,7 +3743,7 @@ static void sort_time_beztmaps (BeztMap *bezms, int totvert, const short UNUSED( } /* This function firstly adjusts the pointers that the transdata has to each BezTriple */ -static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totvert, const short UNUSED(use_handle)) +static void beztmap_to_data(TransInfo *t, FCurve *fcu, BeztMap *bezms, int totvert, const short UNUSED(use_handle)) { BezTriple *bezts = fcu->bezt; BeztMap *bezm; @@ -3598,17 +3756,17 @@ static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totv * pointers have been fixed already, so that we don't override ones that are * already done */ - adjusted= MEM_callocN(t->total, "beztmap_adjusted_map"); + adjusted = MEM_callocN(t->total, "beztmap_adjusted_map"); /* for each beztmap item, find if it is used anywhere */ - bezm= bezms; - for (i= 0; i < totvert; i++, bezm++) { + bezm = bezms; + for (i = 0; i < totvert; i++, bezm++) { /* loop through transdata, testing if we have a hit * for the handles (vec[0]/vec[2]), we must also check if they need to be swapped... */ - td2d= t->data2d; - td= t->data; - for (j= 0; j < t->total; j++, td2d++, td++) { + td2d = t->data2d; + td = t->data; + for (j = 0; j < t->total; j++, td2d++, td++) { /* skip item if already marked */ if (adjusted[j] != 0) continue; @@ -3617,26 +3775,26 @@ static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totv */ if (td2d->loc2d == bezm->bezt->vec[0]) { if (bezm->swapHs == 1) - td2d->loc2d= (bezts + bezm->newIndex)->vec[2]; + td2d->loc2d = (bezts + bezm->newIndex)->vec[2]; else - td2d->loc2d= (bezts + bezm->newIndex)->vec[0]; + td2d->loc2d = (bezts + bezm->newIndex)->vec[0]; adjusted[j] = 1; } else if (td2d->loc2d == bezm->bezt->vec[2]) { if (bezm->swapHs == 1) - td2d->loc2d= (bezts + bezm->newIndex)->vec[0]; + td2d->loc2d = (bezts + bezm->newIndex)->vec[0]; else - td2d->loc2d= (bezts + bezm->newIndex)->vec[2]; + td2d->loc2d = (bezts + bezm->newIndex)->vec[2]; adjusted[j] = 1; } else if (td2d->loc2d == bezm->bezt->vec[1]) { - td2d->loc2d= (bezts + bezm->newIndex)->vec[1]; + td2d->loc2d = (bezts + bezm->newIndex)->vec[1]; /* if only control point is selected, the handle pointers need to be updated as well */ if (td2d->h1) - td2d->h1= (bezts + bezm->newIndex)->vec[0]; + td2d->h1 = (bezts + bezm->newIndex)->vec[0]; if (td2d->h2) - td2d->h2= (bezts + bezm->newIndex)->vec[2]; + td2d->h2 = (bezts + bezm->newIndex)->vec[2]; adjusted[j] = 1; } @@ -3674,15 +3832,15 @@ void remake_graph_transdata(TransInfo *t, ListBase *anim_data) const short use_handle = !(sipo->flag & SIPO_NOHANDLES); /* sort and reassign verts */ - for (ale= anim_data->first; ale; ale= ale->next) { - FCurve *fcu= (FCurve *)ale->key_data; + for (ale = anim_data->first; ale; ale = ale->next) { + FCurve *fcu = (FCurve *)ale->key_data; if (fcu->bezt) { BeztMap *bezm; /* adjust transform-data pointers */ /* note, none of these functions use 'use_handle', it could be removed */ - bezm= bezt_to_beztmaps(fcu->bezt, fcu->totvert, use_handle); + bezm = bezt_to_beztmaps(fcu->bezt, fcu->totvert, use_handle); sort_time_beztmaps(bezm, fcu->totvert, use_handle); beztmap_to_data(t, fcu, bezm, fcu->totvert, use_handle); @@ -3706,19 +3864,19 @@ void flushTransGraphData(TransInfo *t) SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first; TransData *td; TransData2D *td2d; - Scene *scene= t->scene; - double secf= FPS; + Scene *scene = t->scene; + double secf = FPS; int a; /* flush to 2d vector from internally used 3d vector */ - for (a=0, td= t->data, td2d=t->data2d; a<t->total; a++, td++, td2d++) { - AnimData *adt= (AnimData *)td->extra; /* pointers to relevant AnimData blocks are stored in the td->extra pointers */ + for (a = 0, td = t->data, td2d = t->data2d; a < t->total; a++, td++, td2d++) { + AnimData *adt = (AnimData *)td->extra; /* pointers to relevant AnimData blocks are stored in the td->extra pointers */ /* handle snapping for time values * - we should still be in NLA-mapping timespace * - only apply to keyframes (but never to handles) */ - if ((td->flag & TD_NOTIMESNAP)==0) { + if ((td->flag & TD_NOTIMESNAP) == 0) { switch (sipo->autosnap) { case SACTSNAP_FRAME: /* snap to nearest frame (or second if drawing seconds) */ if (sipo->flag & SIPO_DRAWTIME) @@ -3728,22 +3886,22 @@ void flushTransGraphData(TransInfo *t) break; case SACTSNAP_MARKER: /* snap to nearest marker */ - td2d->loc[0]= (float)ED_markers_find_nearest_marker_time(&t->scene->markers, td2d->loc[0]); + td2d->loc[0] = (float)ED_markers_find_nearest_marker_time(&t->scene->markers, td2d->loc[0]); break; } } /* we need to unapply the nla-mapping from the time in some situations */ if (adt) - td2d->loc2d[0]= BKE_nla_tweakedit_remap(adt, td2d->loc[0], NLATIME_CONVERT_UNMAP); + td2d->loc2d[0] = BKE_nla_tweakedit_remap(adt, td2d->loc[0], NLATIME_CONVERT_UNMAP); else - td2d->loc2d[0]= td2d->loc[0]; + td2d->loc2d[0] = td2d->loc[0]; /* if int-values only, truncate to integers */ if (td->flag & TD_INTVALUES) - td2d->loc2d[1]= floorf(td2d->loc[1] + 0.5f); + td2d->loc2d[1] = floorf(td2d->loc[1] + 0.5f); else - td2d->loc2d[1]= td2d->loc[1]; + td2d->loc2d[1] = td2d->loc[1]; if ((td->flag & TD_MOVEHANDLE1) && td2d->h1) { td2d->h1[0] = td2d->ih1[0] + td->loc[0] - td->iloc[0]; @@ -3775,47 +3933,47 @@ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count /* *** Extend Transform *** */ Scene *scene = t->scene; - int cfra= CFRA; - int left= seq_tx_get_final_left(seq, 1); - int right= seq_tx_get_final_right(seq, 1); + int cfra = CFRA; + int left = seq_tx_get_final_left(seq, 1); + int right = seq_tx_get_final_right(seq, 1); if (seq->depth == 0 && ((seq->flag & SELECT) == 0 || (seq->flag & SEQ_LOCK))) { *recursive = FALSE; *count = 0; *flag = 0; } - else if (seq->type == SEQ_META) { + else if (seq->type == SEQ_TYPE_META) { /* for meta's we only ever need to extend their children, no matter what depth * just check the meta's are in the bounds */ - if (t->frame_side=='R' && right <= cfra) *recursive = FALSE; - else if (t->frame_side=='L' && left >= cfra) *recursive = FALSE; - else *recursive = TRUE; + if (t->frame_side == 'R' && right <= cfra) *recursive = FALSE; + else if (t->frame_side == 'L' && left >= cfra) *recursive = FALSE; + else *recursive = TRUE; - *count= 1; - *flag= (seq->flag | SELECT) & ~(SEQ_LEFTSEL|SEQ_RIGHTSEL); + *count = 1; + *flag = (seq->flag | SELECT) & ~(SEQ_LEFTSEL | SEQ_RIGHTSEL); } else { *recursive = FALSE; /* not a meta, so no thinking here */ *count = 1; /* unless its set to 0, extend will never set 2 handles at once */ - *flag = (seq->flag | SELECT) & ~(SEQ_LEFTSEL|SEQ_RIGHTSEL); + *flag = (seq->flag | SELECT) & ~(SEQ_LEFTSEL | SEQ_RIGHTSEL); - if (t->frame_side=='R') { - if (right <= cfra) *count = *flag= 0; /* ignore */ + if (t->frame_side == 'R') { + if (right <= cfra) *count = *flag = 0; /* ignore */ else if (left > cfra) ; /* keep the selection */ - else *flag |= SEQ_RIGHTSEL; + else *flag |= SEQ_RIGHTSEL; } else { - if (left >= cfra) *count = *flag= 0; /* ignore */ - else if (right < cfra) ; /* keep the selection */ - else *flag |= SEQ_LEFTSEL; + if (left >= cfra) *count = *flag = 0; /* ignore */ + else if (right < cfra) ; /* keep the selection */ + else *flag |= SEQ_LEFTSEL; } } } else { - t->frame_side= 'B'; + t->frame_side = 'B'; /* *** Normal Transform *** */ @@ -3830,18 +3988,18 @@ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count *flag = 0; } else { - if ((seq->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL)) == (SEQ_LEFTSEL|SEQ_RIGHTSEL)) { - *flag= seq->flag; - *count= 2; /* we need 2 transdata's */ + if ((seq->flag & (SEQ_LEFTSEL | SEQ_RIGHTSEL)) == (SEQ_LEFTSEL | SEQ_RIGHTSEL)) { + *flag = seq->flag; + *count = 2; /* we need 2 transdata's */ } else { - *flag= seq->flag; - *count= 1; /* selected or with a handle selected */ + *flag = seq->flag; + *count = 1; /* selected or with a handle selected */ } /* Recursive */ - if ((seq->type == SEQ_META) && ((seq->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL)) == 0)) { + if ((seq->type == SEQ_TYPE_META) && ((seq->flag & (SEQ_LEFTSEL | SEQ_RIGHTSEL)) == 0)) { /* if any handles are selected, don't recurse */ *recursive = TRUE; } @@ -3854,22 +4012,22 @@ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count /* Nested, different rules apply */ #ifdef SEQ_TX_NESTED_METAS - *flag = (seq->flag | SELECT) & ~(SEQ_LEFTSEL|SEQ_RIGHTSEL); + *flag = (seq->flag | SELECT) & ~(SEQ_LEFTSEL | SEQ_RIGHTSEL); *count = 1; /* ignore the selection for nested */ - *recursive = (seq->type == SEQ_META); + *recursive = (seq->type == SEQ_TYPE_META); #else - if (seq->type == SEQ_META) { + if (seq->type == SEQ_TYPE_META) { /* Meta's can only directly be moved between channels since they * don't have their start and length set directly (children affect that) * since this Meta is nested we don't need any of its data in fact. * calc_sequence() will update its settings when run on the toplevel meta */ - *flag= 0; - *count= 0; + *flag = 0; + *count = 0; *recursive = TRUE; } else { - *flag= (seq->flag | SELECT) & ~(SEQ_LEFTSEL|SEQ_RIGHTSEL); - *count= 1; /* ignore the selection for nested */ + *flag = (seq->flag | SELECT) & ~(SEQ_LEFTSEL | SEQ_RIGHTSEL); + *count = 1; /* ignore the selection for nested */ *recursive = FALSE; } #endif @@ -3882,10 +4040,10 @@ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count static int SeqTransCount(TransInfo *t, Sequence *parent, ListBase *seqbase, int depth) { Sequence *seq; - int tot= 0, recursive, count, flag; + int tot = 0, recursive, count, flag; - for (seq= seqbase->first; seq; seq= seq->next) { - seq->depth= depth; + for (seq = seqbase->first; seq; seq = seq->next) { + seq->depth = depth; /* seq->tmp is used by seq_tx_get_final_{left, right} to check sequence's range and clamp to it if needed. * it's first place where digging into sequences tree, so store link to parent here */ @@ -3895,7 +4053,7 @@ static int SeqTransCount(TransInfo *t, Sequence *parent, ListBase *seqbase, int tot += count; if (recursive) { - tot += SeqTransCount(t, seq, &seq->seqbase, depth+1); + tot += SeqTransCount(t, seq, &seq->seqbase, depth + 1); } } @@ -3908,21 +4066,21 @@ static TransData *SeqToTransData(TransData *td, TransData2D *td2d, TransDataSeq int start_left; switch (sel_flag) { - case SELECT: - /* Use seq_tx_get_final_left() and an offset here - * so transform has the left hand location of the strip. - * tdsq->start_offset is used when flushing the tx data back */ - start_left= seq_tx_get_final_left(seq, 0); - td2d->loc[0]= start_left; - tdsq->start_offset= start_left - seq->start; /* use to apply the original location */ - break; - case SEQ_LEFTSEL: - start_left= seq_tx_get_final_left(seq, 0); - td2d->loc[0] = start_left; - break; - case SEQ_RIGHTSEL: - td2d->loc[0] = seq_tx_get_final_right(seq, 0); - break; + case SELECT: + /* Use seq_tx_get_final_left() and an offset here + * so transform has the left hand location of the strip. + * tdsq->start_offset is used when flushing the tx data back */ + start_left = seq_tx_get_final_left(seq, 0); + td2d->loc[0] = start_left; + tdsq->start_offset = start_left - seq->start; /* use to apply the original location */ + break; + case SEQ_LEFTSEL: + start_left = seq_tx_get_final_left(seq, 0); + td2d->loc[0] = start_left; + break; + case SEQ_RIGHTSEL: + td2d->loc[0] = seq_tx_get_final_right(seq, 0); + break; } td2d->loc[1] = seq->machine; /* channel - Y location */ @@ -3930,15 +4088,15 @@ static TransData *SeqToTransData(TransData *td, TransData2D *td2d, TransDataSeq td2d->loc2d = NULL; - tdsq->seq= seq; + tdsq->seq = seq; /* Use instead of seq->flag for nested strips and other * cases where the selection may need to be modified */ - tdsq->flag= flag; - tdsq->sel_flag= sel_flag; + tdsq->flag = flag; + tdsq->sel_flag = sel_flag; - td->extra= (void *)tdsq; /* allow us to update the strip from here */ + td->extra = (void *)tdsq; /* allow us to update the strip from here */ td->flag = 0; td->loc = td2d->loc; @@ -3948,17 +4106,17 @@ static TransData *SeqToTransData(TransData *td, TransData2D *td2d, TransDataSeq memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - td->ext= NULL; td->val= NULL; + td->ext = NULL; td->val = NULL; td->flag |= TD_SELECTED; - td->dist= 0.0; + td->dist = 0.0; unit_m3(td->mtx); unit_m3(td->smtx); /* Time Transform (extend) */ - td->val= td2d->loc; - td->ival= td2d->loc[0]; + td->val = td2d->loc; + td->ival = td2d->loc[0]; return td; } @@ -3967,26 +4125,26 @@ static int SeqToTransData_Recursive(TransInfo *t, ListBase *seqbase, TransData * { Sequence *seq; int recursive, count, flag; - int tot= 0; + int tot = 0; - for (seq= seqbase->first; seq; seq= seq->next) { + for (seq = seqbase->first; seq; seq = seq->next) { SeqTransInfo(t, seq, &recursive, &count, &flag); /* add children first so recalculating metastrips does nested strips first */ if (recursive) { - int tot_children= SeqToTransData_Recursive(t, &seq->seqbase, td, td2d, tdsq); + int tot_children = SeqToTransData_Recursive(t, &seq->seqbase, td, td2d, tdsq); - td= td + tot_children; - td2d= td2d + tot_children; - tdsq= tdsq + tot_children; + td = td + tot_children; + td2d = td2d + tot_children; + tdsq = tdsq + tot_children; tot += tot_children; } /* use 'flag' which is derived from seq->flag but modified for special cases */ if (flag & SELECT) { - if (flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL)) { + if (flag & (SEQ_LEFTSEL | SEQ_RIGHTSEL)) { if (flag & SEQ_LEFTSEL) { SeqToTransData(td++, td2d++, tdsq++, seq, flag, SEQ_LEFTSEL); tot++; @@ -4008,83 +4166,83 @@ static int SeqToTransData_Recursive(TransInfo *t, ListBase *seqbase, TransData * static void freeSeqData(TransInfo *t) { - Editing *ed= BKE_sequencer_editing_get(t->scene, FALSE); + Editing *ed = BKE_sequencer_editing_get(t->scene, FALSE); if (ed != NULL) { - ListBase *seqbasep= ed->seqbasep; - TransData *td= t->data; + ListBase *seqbasep = ed->seqbasep; + TransData *td = t->data; int a; /* prevent updating the same seq twice * if the transdata order is changed this will mess up * but so will TransDataSeq */ - Sequence *seq_prev= NULL; + Sequence *seq_prev = NULL; Sequence *seq; if (!(t->state == TRANS_CANCEL)) { -#if 0 // default 2.4 behavior +#if 0 // default 2.4 behavior /* flush to 2d vector from internally used 3d vector */ - for (a=0; a<t->total; a++, td++) { - if ((seq != seq_prev) && (seq->depth==0) && (seq->flag & SEQ_OVERLAP)) { - seq= ((TransDataSeq *)td->extra)->seq; + for (a = 0; a < t->total; a++, td++) { + if ((seq != seq_prev) && (seq->depth == 0) && (seq->flag & SEQ_OVERLAP)) { + seq = ((TransDataSeq *)td->extra)->seq; shuffle_seq(seqbasep, seq); } - seq_prev= seq; + seq_prev = seq; } -#else // durian hack +#else // durian hack { - int overlap= 0; + int overlap = 0; - for (a=0; a<t->total; a++, td++) { - seq_prev= NULL; - seq= ((TransDataSeq *)td->extra)->seq; - if ((seq != seq_prev) && (seq->depth==0) && (seq->flag & SEQ_OVERLAP)) { - overlap= 1; + for (a = 0; a < t->total; a++, td++) { + seq_prev = NULL; + seq = ((TransDataSeq *)td->extra)->seq; + if ((seq != seq_prev) && (seq->depth == 0) && (seq->flag & SEQ_OVERLAP)) { + overlap = 1; break; } - seq_prev= seq; + seq_prev = seq; } if (overlap) { - int has_effect= 0; - for (seq= seqbasep->first; seq; seq= seq->next) - seq->tmp= NULL; - - td= t->data; - seq_prev= NULL; - for (a=0; a<t->total; a++, td++) { - seq= ((TransDataSeq *)td->extra)->seq; + int has_effect = 0; + for (seq = seqbasep->first; seq; seq = seq->next) + seq->tmp = NULL; + + td = t->data; + seq_prev = NULL; + for (a = 0; a < t->total; a++, td++) { + seq = ((TransDataSeq *)td->extra)->seq; if ((seq != seq_prev)) { /* check effects strips, we cant change their time */ - if ((seq->type & SEQ_EFFECT) && seq->seq1) { - has_effect= TRUE; + if ((seq->type & SEQ_TYPE_EFFECT) && seq->seq1) { + has_effect = TRUE; } else { /* Tag seq with a non zero value, used by shuffle_seq_time to identify the ones to shuffle */ - seq->tmp= (void*)1; + seq->tmp = (void *)1; } } } -#if 1 /* (mango hack! - for Ian) this is truely bad - should _never_ be in a release :| */ +#if 1 /* (mango hack! - for Ian) this is truely bad - should _never_ be in a release :| */ if (CTX_wm_window(t->context)->eventstate->alt) { int minframe = MAXFRAME; - td= t->data; - seq_prev= NULL; - for (a=0; a<t->total; a++, td++) { - seq= ((TransDataSeq *)td->extra)->seq; + td = t->data; + seq_prev = NULL; + for (a = 0; a < t->total; a++, td++) { + seq = ((TransDataSeq *)td->extra)->seq; if ((seq != seq_prev)) { minframe = MIN2(minframe, seq->startdisp); } } - for (seq= seqbasep->first; seq; seq= seq->next) { + for (seq = seqbasep->first; seq; seq = seq->next) { if (!(seq->flag & SELECT)) { if (seq->startdisp >= minframe) { seq->machine += MAXSEQ * 2; @@ -4094,13 +4252,13 @@ static void freeSeqData(TransInfo *t) shuffle_seq_time(seqbasep, t->scene); - for (seq= seqbasep->first; seq; seq= seq->next) { + for (seq = seqbasep->first; seq; seq = seq->next) { if (seq->machine >= MAXSEQ * 2) { seq->machine -= MAXSEQ * 2; - seq->tmp= (void*)1; + seq->tmp = (void *)1; } else { - seq->tmp= NULL; + seq->tmp = NULL; } } @@ -4115,24 +4273,24 @@ static void freeSeqData(TransInfo *t) if (has_effect) { /* update effects strips based on strips just moved in time */ - td= t->data; - seq_prev= NULL; - for (a=0; a<t->total; a++, td++) { - seq= ((TransDataSeq *)td->extra)->seq; + td = t->data; + seq_prev = NULL; + for (a = 0; a < t->total; a++, td++) { + seq = ((TransDataSeq *)td->extra)->seq; if ((seq != seq_prev)) { - if ((seq->type & SEQ_EFFECT) && seq->seq1) { + if ((seq->type & SEQ_TYPE_EFFECT) && seq->seq1) { calc_sequence(t->scene, seq); } } } /* now if any effects _still_ overlap, we need to move them up */ - td= t->data; - seq_prev= NULL; - for (a=0; a<t->total; a++, td++) { - seq= ((TransDataSeq *)td->extra)->seq; + td = t->data; + seq_prev = NULL; + for (a = 0; a < t->total; a++, td++) { + seq = ((TransDataSeq *)td->extra)->seq; if ((seq != seq_prev)) { - if ((seq->type & SEQ_EFFECT) && seq->seq1) { + if ((seq->type & SEQ_TYPE_EFFECT) && seq->seq1) { if (seq_test_overlap(seqbasep, seq)) { shuffle_seq(seqbasep, seq, t->scene); } @@ -4145,9 +4303,9 @@ static void freeSeqData(TransInfo *t) } #endif - for (seq= seqbasep->first; seq; seq= seq->next) { + for (seq = seqbasep->first; seq; seq = seq->next) { /* We might want to build a list of effects that need to be updated during transform */ - if (seq->type & SEQ_EFFECT) { + if (seq->type & SEQ_TYPE_EFFECT) { if (seq->seq1 && seq->seq1->flag & SELECT) calc_sequence(t->scene, seq); else if (seq->seq2 && seq->seq2->flag & SELECT) calc_sequence(t->scene, seq); else if (seq->seq3 && seq->seq3->flag & SELECT) calc_sequence(t->scene, seq); @@ -4158,12 +4316,12 @@ static void freeSeqData(TransInfo *t) } else { /* Cancelled, need to update the strips display */ - for (a=0; a<t->total; a++, td++) { - seq= ((TransDataSeq *)td->extra)->seq; - if ((seq != seq_prev) && (seq->depth==0)) { + for (a = 0; a < t->total; a++, td++) { + seq = ((TransDataSeq *)td->extra)->seq; + if ((seq != seq_prev) && (seq->depth == 0)) { calc_sequence_disp(t->scene, seq); } - seq_prev= seq; + seq_prev = seq; } } } @@ -4174,7 +4332,7 @@ static void freeSeqData(TransInfo *t) } if (t->data) { MEM_freeN(t->data); // XXX postTrans usually does this - t->data= NULL; + t->data = NULL; } } @@ -4182,21 +4340,21 @@ static void createTransSeqData(bContext *C, TransInfo *t) { #define XXX_DURIAN_ANIM_TX_HACK - View2D *v2d= UI_view2d_fromcontext(C); - Scene *scene= t->scene; - Editing *ed= BKE_sequencer_editing_get(t->scene, FALSE); + View2D *v2d = UI_view2d_fromcontext(C); + Scene *scene = t->scene; + Editing *ed = BKE_sequencer_editing_get(t->scene, FALSE); TransData *td = NULL; - TransData2D *td2d= NULL; - TransDataSeq *tdsq= NULL; + TransData2D *td2d = NULL; + TransDataSeq *tdsq = NULL; - int count=0; + int count = 0; - if (ed==NULL) { - t->total= 0; + if (ed == NULL) { + t->total = 0; return; } - t->customFree= freeSeqData; + t->customFree = freeSeqData; /* which side of the current frame should be allowed */ if (t->mode == TFM_TIME_EXTEND) { @@ -4214,16 +4372,16 @@ static void createTransSeqData(bContext *C, TransInfo *t) #ifdef XXX_DURIAN_ANIM_TX_HACK { Sequence *seq; - for (seq= ed->seqbasep->first; seq; seq= seq->next) { + for (seq = ed->seqbasep->first; seq; seq = seq->next) { /* hack */ - if ((seq->flag & SELECT)==0 && seq->type & SEQ_EFFECT) { + if ((seq->flag & SELECT) == 0 && seq->type & SEQ_TYPE_EFFECT) { Sequence *seq_user; int i; - for (i=0; i<3; i++) { - seq_user= *((&seq->seq1) + i); + for (i = 0; i < 3; i++) { + seq_user = *((&seq->seq1) + i); if (seq_user && (seq_user->flag & SELECT) && !(seq_user->flag & SEQ_LOCK) && - !(seq_user->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL))) + !(seq_user->flag & (SEQ_LEFTSEL | SEQ_RIGHTSEL))) { seq->flag |= SELECT; } @@ -4236,16 +4394,16 @@ static void createTransSeqData(bContext *C, TransInfo *t) count = SeqTransCount(t, NULL, ed->seqbasep, 0); /* allocate memory for data */ - t->total= count; + t->total = count; /* stop if trying to build list if nothing selected */ if (count == 0) { return; } - td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransSeq TransData"); - td2d = t->data2d = MEM_callocN(t->total*sizeof(TransData2D), "TransSeq TransData2D"); - tdsq = t->customData = MEM_callocN(t->total*sizeof(TransDataSeq), "TransSeq TransDataSeq"); + td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransSeq TransData"); + td2d = t->data2d = MEM_callocN(t->total * sizeof(TransData2D), "TransSeq TransData2D"); + tdsq = t->customData = MEM_callocN(t->total * sizeof(TransDataSeq), "TransSeq TransDataSeq"); t->flag |= T_FREE_CUSTOMDATA; @@ -4273,17 +4431,17 @@ static short constraints_list_needinv(TransInfo *t, ListBase *list) * constraints needing special crazyspace corrections */ if (list) { - for (con= list->first; con; con=con->next) { + for (con = list->first; con; con = con->next) { /* only consider constraint if it is enabled, and has influence on result */ - if ((con->flag & CONSTRAINT_DISABLE)==0 && (con->enforce!=0.0f)) { + if ((con->flag & CONSTRAINT_DISABLE) == 0 && (con->enforce != 0.0f)) { /* (affirmative) returns for specific constraints here... */ - /* constraints that require this regardless */ + /* constraints that require this regardless */ if (con->type == CONSTRAINT_TYPE_CHILDOF) return 1; if (con->type == CONSTRAINT_TYPE_FOLLOWPATH) return 1; if (con->type == CONSTRAINT_TYPE_CLAMPTO) return 1; if (con->type == CONSTRAINT_TYPE_OBJECTSOLVER) return 1; - /* constraints that require this only under special conditions */ + /* constraints that require this only under special conditions */ if (con->type == CONSTRAINT_TYPE_ROTLIKE) { /* CopyRot constraint only does this when rotating, and offset is on */ bRotateLikeConstraint *data = (bRotateLikeConstraint *)con->data; @@ -4311,11 +4469,11 @@ static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob) copy_m3_m4(td->axismtx, ob->obmat); normalize_m3(td->axismtx); - td->con= ob->constraints.first; + td->con = ob->constraints.first; /* hack: temporarily disable tracking and/or constraints when getting * object matrix, if tracking is on, or if constraints don't need - * inverse correction to stop it from screwing up space conversion + * inverse correction to stop it from screwing up space conversion * matrix later */ constinv = constraints_list_needinv(t, &ob->constraints); @@ -4326,7 +4484,7 @@ static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob) if (skip_invert == 0 && constinv == 0) { if (constinv == 0) - ob->transflag |= OB_NO_CONSTRAINTS; /* BKE_object_where_is_calc_time checks this */ + ob->transflag |= OB_NO_CONSTRAINTS; /* BKE_object_where_is_calc_time checks this */ BKE_object_where_is_calc(t->scene, ob); @@ -4342,35 +4500,35 @@ static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob) copy_v3_v3(td->iloc, td->loc); if (ob->rotmode > 0) { - td->ext->rot= ob->rot; - td->ext->rotAxis= NULL; - td->ext->rotAngle= NULL; - td->ext->quat= NULL; + td->ext->rot = ob->rot; + td->ext->rotAxis = NULL; + td->ext->rotAngle = NULL; + td->ext->quat = NULL; copy_v3_v3(td->ext->irot, ob->rot); copy_v3_v3(td->ext->drot, ob->drot); } else if (ob->rotmode == ROT_MODE_AXISANGLE) { - td->ext->rot= NULL; - td->ext->rotAxis= ob->rotAxis; - td->ext->rotAngle= &ob->rotAngle; - td->ext->quat= NULL; + td->ext->rot = NULL; + td->ext->rotAxis = ob->rotAxis; + td->ext->rotAngle = &ob->rotAngle; + td->ext->quat = NULL; - td->ext->irotAngle= ob->rotAngle; + td->ext->irotAngle = ob->rotAngle; copy_v3_v3(td->ext->irotAxis, ob->rotAxis); // td->ext->drotAngle= ob->drotAngle; // XXX, not implemented // copy_v3_v3(td->ext->drotAxis, ob->drotAxis); // XXX, not implemented } else { - td->ext->rot= NULL; - td->ext->rotAxis= NULL; - td->ext->rotAngle= NULL; - td->ext->quat= ob->quat; + td->ext->rot = NULL; + td->ext->rotAxis = NULL; + td->ext->rotAngle = NULL; + td->ext->quat = ob->quat; copy_qt_qt(td->ext->iquat, ob->quat); copy_qt_qt(td->ext->dquat, ob->dquat); } - td->ext->rotOrder=ob->rotmode; + td->ext->rotOrder = ob->rotmode; td->ext->size = ob->size; copy_v3_v3(td->ext->isize, ob->size); @@ -4428,17 +4586,17 @@ static void set_trans_object_base_flags(TransInfo *t) BKE_scene_base_flag_to_objects(t->scene); /* handle pending update events, otherwise they got copied below */ - for (base= scene->base.first; base; base= base->next) { + for (base = scene->base.first; base; base = base->next) { if (base->object->recalc) BKE_object_handle_update(t->scene, base->object); } - for (base= scene->base.first; base; base= base->next) { + for (base = scene->base.first; base; base = base->next) { base->flag &= ~BA_WAS_SEL; if (TESTBASELIB_BGMODE(v3d, scene, base)) { - Object *ob= base->object; - Object *parsel= ob->parent; + Object *ob = base->object; + Object *parsel = ob->parent; /* if parent selected, deselect */ while (parsel) { @@ -4450,7 +4608,7 @@ static void set_trans_object_base_flags(TransInfo *t) } } } - parsel= parsel->parent; + parsel = parsel->parent; } if (parsel) { @@ -4473,7 +4631,7 @@ static void set_trans_object_base_flags(TransInfo *t) /* and we store them temporal in base (only used for transform code) */ /* this because after doing updates, the object->recalc is cleared */ - for (base= scene->base.first; base; base= base->next) { + for (base = scene->base.first; base; base = base->next) { if (base->object->recalc & OB_RECALC_OB) base->flag |= BA_HAS_RECALC_OB; if (base->object->recalc & OB_RECALC_DATA) @@ -4483,7 +4641,7 @@ static void set_trans_object_base_flags(TransInfo *t) static int mark_children(Object *ob) { - if (ob->flag & (SELECT|BA_TRANSFORM_CHILD)) + if (ob->flag & (SELECT | BA_TRANSFORM_CHILD)) return 1; if (ob->parent) { @@ -4506,7 +4664,7 @@ static int count_proportional_objects(TransInfo *t) /* rotations around local centers are allowed to propagate, so we take all objects */ if (!((t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL) && t->around == V3D_LOCAL)) { /* mark all parents */ - for (base= scene->base.first; base; base= base->next) { + for (base = scene->base.first; base; base = base->next) { if (TESTBASELIB_BGMODE(v3d, scene, base)) { Object *parent = base->object->parent; @@ -4519,9 +4677,9 @@ static int count_proportional_objects(TransInfo *t) } /* mark all children */ - for (base= scene->base.first; base; base= base->next) { + for (base = scene->base.first; base; base = base->next) { /* all base not already selected or marked that is editable */ - if ((base->object->flag & (SELECT|BA_TRANSFORM_CHILD|BA_TRANSFORM_PARENT)) == 0 && + if ((base->object->flag & (SELECT | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT)) == 0 && (BASE_EDITABLE_BGMODE(v3d, scene, base))) { mark_children(base->object); @@ -4529,11 +4687,11 @@ static int count_proportional_objects(TransInfo *t) } } - for (base= scene->base.first; base; base= base->next) { - Object *ob= base->object; + for (base = scene->base.first; base; base = base->next) { + Object *ob = base->object; /* if base is not selected, not a parent of selection or not a child of selection and it is editable */ - if ((ob->flag & (SELECT|BA_TRANSFORM_CHILD|BA_TRANSFORM_PARENT)) == 0 && + if ((ob->flag & (SELECT | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT)) == 0 && (BASE_EDITABLE_BGMODE(v3d, scene, base))) { @@ -4550,7 +4708,7 @@ static int count_proportional_objects(TransInfo *t) /* and we store them temporal in base (only used for transform code) */ /* this because after doing updates, the object->recalc is cleared */ - for (base= scene->base.first; base; base= base->next) { + for (base = scene->base.first; base; base = base->next) { if (base->object->recalc & OB_RECALC_OB) base->flag |= BA_HAS_RECALC_OB; if (base->object->recalc & OB_RECALC_DATA) @@ -4565,21 +4723,21 @@ static void clear_trans_object_base_flags(TransInfo *t) Scene *sce = t->scene; Base *base; - for (base= sce->base.first; base; base = base->next) { + for (base = sce->base.first; base; base = base->next) { if (base->flag & BA_WAS_SEL) base->flag |= SELECT; - base->flag &= ~(BA_WAS_SEL|BA_HAS_RECALC_OB|BA_HAS_RECALC_DATA|BA_TEMP_TAG|BA_TRANSFORM_CHILD|BA_TRANSFORM_PARENT); + base->flag &= ~(BA_WAS_SEL | BA_HAS_RECALC_OB | BA_HAS_RECALC_DATA | BA_TEMP_TAG | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT); } } /* auto-keyframing feature - for objects - * tmode: should be a transform mode + * tmode: should be a transform mode */ // NOTE: context may not always be available, so must check before using it as it's a luxury for a few cases void autokeyframe_ob_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob, int tmode) { - ID *id= &ob->id; + ID *id = &ob->id; FCurve *fcu; // TODO: this should probably be done per channel instead... @@ -4587,7 +4745,7 @@ void autokeyframe_ob_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob, ReportList *reports = CTX_wm_reports(C); KeyingSet *active_ks = ANIM_scene_get_active_keyingset(scene); ListBase dsources = {NULL, NULL}; - float cfra= (float)CFRA; // xxx this will do for now + float cfra = (float)CFRA; // xxx this will do for now short flag = 0; /* get flags used for inserting keyframes */ @@ -4603,11 +4761,11 @@ void autokeyframe_ob_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob, ANIM_apply_keyingset(C, &dsources, NULL, active_ks, MODIFYKEY_MODE_INSERT, cfra); } else if (IS_AUTOKEY_FLAG(scene, INSERTAVAIL)) { - AnimData *adt= ob->adt; + AnimData *adt = ob->adt; /* only key on available channels */ if (adt && adt->action) { - for (fcu= adt->action->curves.first; fcu; fcu= fcu->next) { + for (fcu = adt->action->curves.first; fcu; fcu = fcu->next) { fcu->flag &= ~FCURVE_SELECTED; insert_keyframe(reports, id, adt->action, (fcu->grp ? fcu->grp->name : NULL), @@ -4630,7 +4788,7 @@ void autokeyframe_ob_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob, else if (v3d->around == V3D_CURSOR) do_loc = TRUE; - if ((v3d->flag & V3D_ALIGN)==0) + if ((v3d->flag & V3D_ALIGN) == 0) do_rot = TRUE; } else if (tmode == TFM_RESIZE) { @@ -4641,27 +4799,27 @@ void autokeyframe_ob_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob, else if (v3d->around == V3D_CURSOR) do_loc = TRUE; - if ((v3d->flag & V3D_ALIGN)==0) + if ((v3d->flag & V3D_ALIGN) == 0) do_scale = TRUE; } /* insert keyframes for the affected sets of channels using the builtin KeyingSets found */ if (do_loc) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_LOCATION_ID); + KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_LOCATION_ID); ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cfra); } if (do_rot) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_ROTATION_ID); + KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_ROTATION_ID); ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cfra); } if (do_scale) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_SCALING_ID); + KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_SCALING_ID); ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cfra); } } /* insert keyframe in all (transform) channels */ else { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_LOC_ROT_SCALE_ID); + KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_LOC_ROT_SCALE_ID); ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cfra); } @@ -4671,16 +4829,16 @@ void autokeyframe_ob_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob, } /* auto-keyframing feature - for poses/pose-channels - * tmode: should be a transform mode + * tmode: should be a transform mode * targetless_ik: has targetless ik been done on any channels? */ // NOTE: context may not always be available, so must check before using it as it's a luxury for a few cases void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob, int tmode, short targetless_ik) { - ID *id= &ob->id; - AnimData *adt= ob->adt; - bAction *act= (adt) ? adt->action : NULL; - bPose *pose= ob->pose; + ID *id = &ob->id; + AnimData *adt = ob->adt; + bAction *act = (adt) ? adt->action : NULL; + bPose *pose = ob->pose; bPoseChannel *pchan; FCurve *fcu; @@ -4688,12 +4846,12 @@ void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *o if (autokeyframe_cfra_can_key(scene, id)) { ReportList *reports = CTX_wm_reports(C); KeyingSet *active_ks = ANIM_scene_get_active_keyingset(scene); - float cfra= (float)CFRA; - short flag= 0; + float cfra = (float)CFRA; + short flag = 0; /* flag is initialized from UserPref keyframing settings * - special exception for targetless IK - INSERTKEY_MATRIX keyframes should get - * visual keyframes even if flag not set, as it's not that useful otherwise + * visual keyframes even if flag not set, as it's not that useful otherwise * (for quick animation recording) */ flag = ANIM_get_keyframing_flags(scene, 1); @@ -4701,7 +4859,7 @@ void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *o if (targetless_ik) flag |= INSERTKEY_MATRIX; - for (pchan=pose->chanbase.first; pchan; pchan=pchan->next) { + for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) { if (pchan->bone->flag & BONE_TRANSFORM) { ListBase dsources = {NULL, NULL}; @@ -4719,16 +4877,16 @@ void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *o /* only insert into available channels? */ else if (IS_AUTOKEY_FLAG(scene, INSERTAVAIL)) { if (act) { - for (fcu= act->curves.first; fcu; fcu= fcu->next) { + for (fcu = act->curves.first; fcu; fcu = fcu->next) { /* only insert keyframes for this F-Curve if it affects the current bone */ if (strstr(fcu->rna_path, "bones")) { - char *pchanName= BLI_getQuotedStr(fcu->rna_path, "bones["); + char *pchanName = BLI_getQuotedStr(fcu->rna_path, "bones["); /* only if bone name matches too... * NOTE: this will do constraints too, but those are ok to do here too? */ if (pchanName && strcmp(pchanName, pchan->name) == 0) - insert_keyframe(reports, id, act, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag); + insert_keyframe(reports, id, act, ((fcu->grp) ? (fcu->grp->name) : (NULL)), fcu->rna_path, fcu->array_index, cfra, flag); if (pchanName) MEM_freeN(pchanName); } @@ -4750,33 +4908,33 @@ void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *o if (ELEM(v3d->around, V3D_CURSOR, V3D_ACTIVE)) do_loc = TRUE; - if ((v3d->flag & V3D_ALIGN)==0) + if ((v3d->flag & V3D_ALIGN) == 0) do_rot = TRUE; } else if (tmode == TFM_RESIZE) { if (ELEM(v3d->around, V3D_CURSOR, V3D_ACTIVE)) do_loc = TRUE; - if ((v3d->flag & V3D_ALIGN)==0) + if ((v3d->flag & V3D_ALIGN) == 0) do_scale = TRUE; } if (do_loc) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_LOCATION_ID); + KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_LOCATION_ID); ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cfra); } if (do_rot) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_ROTATION_ID); + KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_ROTATION_ID); ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cfra); } if (do_scale) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_SCALING_ID); + KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_SCALING_ID); ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cfra); } } /* insert keyframe in all (transform) channels */ else { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_LOC_ROT_SCALE_ID); + KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_LOC_ROT_SCALE_ID); ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cfra); } @@ -4786,7 +4944,7 @@ void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *o } /* do the bone paths - * - only do this when there is context info, since we need that to resolve + * - only do this when there is context info, since we need that to resolve * how to do the updates and so on... * - do not calculate unless there are paths already to update... */ @@ -4797,7 +4955,7 @@ void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *o } else { /* tag channels that should have unkeyed data */ - for (pchan=pose->chanbase.first; pchan; pchan=pchan->next) { + for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) { if (pchan->bone->flag & BONE_TRANSFORM) { /* tag this channel */ pchan->bone->flag |= BONE_UNKEYED; @@ -4810,22 +4968,22 @@ void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *o /* inserting keys, pointcache, redraw events... */ /* * note: sequencer freeing has its own function now because of a conflict with transform's order of freeing (campbell) - * Order changed, the sequencer stuff should go back in here + * Order changed, the sequencer stuff should go back in here * */ void special_aftertrans_update(bContext *C, TransInfo *t) { Object *ob; // short redrawipo=0, resetslowpar=1; - int canceled= (t->state == TRANS_CANCEL); - short duplicate= (t->mode == TFM_TIME_DUPLICATE); + int canceled = (t->state == TRANS_CANCEL); + short duplicate = (t->mode == TFM_TIME_DUPLICATE); /* early out when nothing happened */ if (t->total == 0 || t->mode == TFM_DUMMY) return; - if (t->spacetype==SPACE_VIEW3D) { + if (t->spacetype == SPACE_VIEW3D) { if (t->obedit) { - if (canceled==0) { + if (canceled == 0) { /* we need to delete the temporary faces before automerging */ if (t->mode == TFM_EDGE_SLIDE) { SlideData *sld = t->customData; @@ -4856,7 +5014,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) /* freeSeqData in transform_conversions.c does this * keep here so the else at the end wont run... */ - SpaceSeq *sseq= (SpaceSeq *)t->sa->spacedata.first; + SpaceSeq *sseq = (SpaceSeq *)t->sa->spacedata.first; /* marker transform, not especially nice but we may want to move markers * at the same time as keyframes in the dope sheet. */ @@ -4875,7 +5033,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) } else if (t->spacetype == SPACE_NODE) { - SpaceNode *snode= (SpaceNode *)t->sa->spacedata.first; + SpaceNode *snode = (SpaceNode *)t->sa->spacedata.first; if (canceled == 0) { ED_node_post_apply_transform(C, snode->edittree); @@ -4894,12 +5052,30 @@ void special_aftertrans_update(bContext *C, TransInfo *t) /* tracks can be used for stabilization nodes, * flush update for such nodes */ nodeUpdateID(t->scene->nodetree, &clip->id); - WM_event_add_notifier(C, NC_SCENE|ND_NODES, NULL); + WM_event_add_notifier(C, NC_SCENE | ND_NODES, NULL); + } + } + else if (t->options & CTX_MASK) { + SpaceClip *sc = t->sa->spacedata.first; + Mask *mask = ED_space_clip_mask(sc); + + if (t->scene->nodetree) { + /* tracks can be used for stabilization nodes, + * flush update for such nodes */ + nodeUpdateID(t->scene->nodetree, &mask->id); + WM_event_add_notifier(C, NC_SCENE | ND_NODES, NULL); + } + + /* TODO - dont key all masks... */ + if (IS_AUTOKEY_ON(t->scene)) { + Scene *scene = t->scene; + + ED_mask_layer_shape_auto_key_select(mask, CFRA); } } } else if (t->spacetype == SPACE_ACTION) { - SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; + SpaceAction *saction = (SpaceAction *)t->sa->spacedata.first; bAnimContext ac; /* initialize relevant anim-context 'context' data */ @@ -4911,22 +5087,22 @@ void special_aftertrans_update(bContext *C, TransInfo *t) if (ELEM(ac.datatype, ANIMCONT_DOPESHEET, ANIMCONT_SHAPEKEY)) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; - short filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/); + short filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT /*| ANIMFILTER_CURVESONLY*/); /* get channels to work on */ ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* these should all be F-Curves */ - for (ale= anim_data.first; ale; ale= ale->next) { - AnimData *adt= ANIM_nla_mapping_get(&ac, ale); - FCurve *fcu= (FCurve *)ale->key_data; + for (ale = anim_data.first; ale; ale = ale->next) { + AnimData *adt = ANIM_nla_mapping_get(&ac, ale); + FCurve *fcu = (FCurve *)ale->key_data; /* 3 cases here for curve cleanups: * 1) NOTRANSKEYCULL on -> cleanup of duplicates shouldn't be done * 2) canceled == 0 -> user confirmed the transform, so duplicates should be removed * 3) canceled + duplicate -> user canceled the transform, but we made duplicates, so get rid of these */ - if ((saction->flag & SACTION_NOTRANSKEYCULL)==0 && + if ((saction->flag & SACTION_NOTRANSKEYCULL) == 0 && ((canceled == 0) || (duplicate)) ) { if (adt) { @@ -4935,7 +5111,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) ANIM_nla_mapping_apply_fcurve(adt, fcu, 1, 1); } else - posttrans_fcurve_clean(fcu, FALSE); /* only use handles in graph editor */ + posttrans_fcurve_clean(fcu, FALSE); /* only use handles in graph editor */ } } @@ -4947,7 +5123,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) // fixme... some of this stuff is not good if (ob) { if (ob->pose || ob_get_key(ob)) - DAG_id_tag_update(&ob->id, OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME); + DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); else DAG_id_tag_update(&ob->id, OB_RECALC_OB); } @@ -4957,7 +5133,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) * 2) canceled == 0 -> user confirmed the transform, so duplicates should be removed * 3) canceled + duplicate -> user canceled the transform, but we made duplicates, so get rid of these */ - if ((saction->flag & SACTION_NOTRANSKEYCULL)==0 && + if ((saction->flag & SACTION_NOTRANSKEYCULL) == 0 && ((canceled == 0) || (duplicate))) { posttrans_action_clean(&ac, (bAction *)ac.data); @@ -4965,13 +5141,13 @@ void special_aftertrans_update(bContext *C, TransInfo *t) } else if (ac.datatype == ANIMCONT_GPENCIL) { /* remove duplicate frames and also make sure points are in order! */ - /* 3 cases here for curve cleanups: - * 1) NOTRANSKEYCULL on -> cleanup of duplicates shouldn't be done - * 2) canceled == 0 -> user confirmed the transform, so duplicates should be removed - * 3) canceled + duplicate -> user canceled the transform, but we made duplicates, so get rid of these - */ - if ((saction->flag & SACTION_NOTRANSKEYCULL)==0 && - ((canceled == 0) || (duplicate))) + /* 3 cases here for curve cleanups: + * 1) NOTRANSKEYCULL on -> cleanup of duplicates shouldn't be done + * 2) canceled == 0 -> user confirmed the transform, so duplicates should be removed + * 3) canceled + duplicate -> user canceled the transform, but we made duplicates, so get rid of these + */ + if ((saction->flag & SACTION_NOTRANSKEYCULL) == 0 && + ((canceled == 0) || (duplicate))) { bGPdata *gpd; @@ -4983,6 +5159,26 @@ void special_aftertrans_update(bContext *C, TransInfo *t) } } } + else if (ac.datatype == ANIMCONT_MASK) { + /* remove duplicate frames and also make sure points are in order! */ + /* 3 cases here for curve cleanups: + * 1) NOTRANSKEYCULL on -> cleanup of duplicates shouldn't be done + * 2) canceled == 0 -> user confirmed the transform, so duplicates should be removed + * 3) canceled + duplicate -> user canceled the transform, but we made duplicates, so get rid of these + */ + if ((saction->flag & SACTION_NOTRANSKEYCULL) == 0 && + ((canceled == 0) || (duplicate))) + { + Mask *mask; + + // XXX: BAD! this get gpencil datablocks directly from main db... + // but that's how this currently works :/ + for (mask = G.main->mask.first; mask; mask = mask->id.next) { + if (ID_REAL_USERS(mask)) + posttrans_mask_clean(mask); + } + } + } /* marker transform, not especially nice but we may want to move markers * at the same time as keyframes in the dope sheet. @@ -5006,14 +5202,14 @@ void special_aftertrans_update(bContext *C, TransInfo *t) } /* make sure all F-Curves are set correctly */ - if (ac.datatype != ANIMCONT_GPENCIL) + if (!ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) ANIM_editkeyframes_refresh(&ac); /* clear flag that was set for time-slide drawing */ saction->flag &= ~SACTION_MOVING; } else if (t->spacetype == SPACE_IPO) { - SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; + SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first; bAnimContext ac; const short use_handle = !(sipo->flag & SIPO_NOHANDLES); @@ -5024,21 +5220,21 @@ void special_aftertrans_update(bContext *C, TransInfo *t) if (ac.datatype) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; - short filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVE_VISIBLE); + short filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVE_VISIBLE); /* get channels to work on */ ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - for (ale= anim_data.first; ale; ale= ale->next) { - AnimData *adt= ANIM_nla_mapping_get(&ac, ale); - FCurve *fcu= (FCurve *)ale->key_data; + for (ale = anim_data.first; ale; ale = ale->next) { + AnimData *adt = ANIM_nla_mapping_get(&ac, ale); + FCurve *fcu = (FCurve *)ale->key_data; /* 3 cases here for curve cleanups: * 1) NOTRANSKEYCULL on -> cleanup of duplicates shouldn't be done * 2) canceled == 0 -> user confirmed the transform, so duplicates should be removed * 3) canceled + duplicate -> user canceled the transform, but we made duplicates, so get rid of these */ - if ((sipo->flag & SIPO_NOTRANSKEYCULL)==0 && + if ((sipo->flag & SIPO_NOTRANSKEYCULL) == 0 && ((canceled == 0) || (duplicate))) { if (adt) { @@ -5073,13 +5269,13 @@ void special_aftertrans_update(bContext *C, TransInfo *t) if (ac.datatype) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; - short filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT); + short filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT); /* get channels to work on */ ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - for (ale= anim_data.first; ale; ale= ale->next) { - NlaTrack *nlt= (NlaTrack *)ale->data; + for (ale = anim_data.first; ale; ale = ale->next) { + NlaTrack *nlt = (NlaTrack *)ale->data; /* make sure strips are in order again */ BKE_nlatrack_sort_strips(nlt); @@ -5105,16 +5301,16 @@ void special_aftertrans_update(bContext *C, TransInfo *t) else if ((t->flag & T_POSE) && (t->poseobj)) { bArmature *arm; bPoseChannel *pchan; - short targetless_ik= 0; + short targetless_ik = 0; - ob= t->poseobj; - arm= ob->data; + ob = t->poseobj; + arm = ob->data; if ((t->flag & T_AUTOIK) && (t->options & CTX_AUTOCONFIRM)) { /* when running transform non-interactively (operator exec), * we need to update the pose otherwise no updates get called during * transform and the auto-ik is not applied. see [#26164] */ - struct Object *pose_ob=t->poseobj; + struct Object *pose_ob = t->poseobj; BKE_pose_where_is(t->scene, pose_ob); } @@ -5123,17 +5319,17 @@ void special_aftertrans_update(bContext *C, TransInfo *t) count_set_pose_transflags(&t->mode, t->around, ob); /* if target-less IK grabbing, we calculate the pchan transforms and clear flag */ - if (!canceled && t->mode==TFM_TRANSLATION) - targetless_ik= apply_targetless_ik(ob); + if (!canceled && t->mode == TFM_TRANSLATION) + targetless_ik = apply_targetless_ik(ob); else { /* not forget to clear the auto flag */ - for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) { - bKinematicConstraint *data= has_targetless_ik(pchan); + for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { + bKinematicConstraint *data = has_targetless_ik(pchan); if (data) data->flag &= ~CONSTRAINT_IK_AUTO; } } - if (t->mode==TFM_TRANSLATION) + if (t->mode == TFM_TRANSLATION) pose_grab_with_ik_clear(ob); /* automatic inserting of keys and unkeyed tagging - only if transform wasn't canceled (or TFM_DUMMY) */ @@ -5144,7 +5340,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) else if (arm->flag & ARM_DELAYDEFORM) { /* old optimize trick... this enforces to bypass the depgraph */ DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - ob->recalc= 0; // is set on OK position already by recalcData() + ob->recalc = 0; // is set on OK position already by recalcData() } else DAG_id_tag_update(&ob->id, OB_RECALC_DATA); @@ -5158,7 +5354,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) /* do nothing */ } else { /* Objects */ - int i, recalcObPaths=0; + int i, recalcObPaths = 0; for (i = 0; i < t->total; i++) { TransData *td = t->data + i; @@ -5174,7 +5370,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) /* flag object caches as outdated */ BKE_ptcache_ids_from_object(&pidlist, ob, t->scene, MAX_DUPLI_RECUR); - for (pid=pidlist.first; pid; pid=pid->next) { + for (pid = pidlist.first; pid; pid = pid->next) { if (pid->type != PTCACHE_TYPE_PARTICLES) /* particles don't need reset on geometry change */ pid->cache->flag |= PTCACHE_OUTDATED; } @@ -5196,7 +5392,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) /* only calculate paths if there are paths to be recalculated */ if (ob->avs.path_bakeflag & MOTIONPATH_BAKE_HAS_PATHS) - recalcObPaths= 1; + recalcObPaths = 1; } } @@ -5238,7 +5434,7 @@ static void createTransObject(bContext *C, TransInfo *t) set_trans_object_base_flags(t); /* count */ - t->total= CTX_DATA_COUNT(C, selected_objects); + t->total = CTX_DATA_COUNT(C, selected_objects); if (!t->total) { /* clear here, main transform function escapes too */ @@ -5250,17 +5446,17 @@ static void createTransObject(bContext *C, TransInfo *t) t->total += count_proportional_objects(t); } - td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransOb"); - tx = t->ext = MEM_callocN(t->total*sizeof(TransDataExtension), "TransObExtension"); + td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransOb"); + tx = t->ext = MEM_callocN(t->total * sizeof(TransDataExtension), "TransObExtension"); - CTX_DATA_BEGIN (C, Base*, base, selected_bases) + CTX_DATA_BEGIN(C, Base *, base, selected_bases) { - Object *ob= base->object; + Object *ob = base->object; td->flag = TD_SELECTED; - td->protectflag= ob->protectflag; + td->protectflag = ob->protectflag; td->ext = tx; - td->ext->rotOrder= ob->rotmode; + td->ext->rotOrder = ob->rotmode; if (base->flag & BA_TRANSFORM_CHILD) { td->flag |= TD_NOCENTER; @@ -5284,16 +5480,16 @@ static void createTransObject(bContext *C, TransInfo *t) View3D *v3d = t->view; Base *base; - for (base= scene->base.first; base; base= base->next) { - Object *ob= base->object; + for (base = scene->base.first; base; base = base->next) { + Object *ob = base->object; /* if base is not selected, not a parent of selection or not a child of selection and it is editable */ if ((ob->flag & (SELECT | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT)) == 0 && BASE_EDITABLE_BGMODE(v3d, scene, base)) { - td->protectflag= ob->protectflag; + td->protectflag = ob->protectflag; td->ext = tx; - td->ext->rotOrder= ob->rotmode; + td->ext->rotOrder = ob->rotmode; ObjectToTransData(t, td, ob); td->val = NULL; @@ -5326,10 +5522,10 @@ static void NodeToTransData(TransData *td, TransData2D *td2d, bNode *node) memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - td->ext= NULL; td->val= NULL; + td->ext = NULL; td->val = NULL; td->flag |= TD_SELECTED; - td->dist= 0.0; + td->dist = 0.0; unit_m3(td->mtx); unit_m3(td->smtx); @@ -5339,29 +5535,29 @@ static void createTransNodeData(bContext *C, TransInfo *t) { TransData *td; TransData2D *td2d; - SpaceNode *snode= t->sa->spacedata.first; + SpaceNode *snode = t->sa->spacedata.first; bNode *node; if (!snode->edittree) { - t->total= 0; + t->total = 0; return; } /* set transform flags on nodes */ - for (node=snode->edittree->nodes.first; node; node=node->next) { + for (node = snode->edittree->nodes.first; node; node = node->next) { if ((node->flag & NODE_SELECT) || (node->parent && (node->parent->flag & NODE_TRANSFORM))) node->flag |= NODE_TRANSFORM; else node->flag &= ~NODE_TRANSFORM; } - t->total= CTX_DATA_COUNT(C, selected_nodes); + t->total = CTX_DATA_COUNT(C, selected_nodes); - td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransNode TransData"); - td2d = t->data2d = MEM_callocN(t->total*sizeof(TransData2D), "TransNode TransData2D"); + td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransNode TransData"); + td2d = t->data2d = MEM_callocN(t->total * sizeof(TransData2D), "TransNode TransData2D"); - CTX_DATA_BEGIN (C, bNode *, selnode, selected_nodes) - NodeToTransData(td++, td2d++, selnode); + CTX_DATA_BEGIN(C, bNode *, selnode, selected_nodes) + NodeToTransData(td++, td2d++, selnode); CTX_DATA_END } @@ -5392,23 +5588,24 @@ typedef struct TransDataTracking { short coord; } TransDataTracking; -static void markerToTransDataInit(TransData *td, TransData2D *td2d, TransDataTracking *tdt, MovieTrackingTrack *track, - int area, float *loc, float *rel, float *off) +static void markerToTransDataInit(TransData *td, TransData2D *td2d, TransDataTracking *tdt, + MovieTrackingTrack *track, MovieTrackingMarker *marker, + int area, float loc[2], float rel[2], const float off[2], float aspx, float aspy) { int anchor = area == TRACK_AREA_POINT && off; tdt->mode = transDataTracking_ModeTracks; if (anchor) { - td2d->loc[0] = rel[0]; /* hold original location */ - td2d->loc[1] = rel[1]; + td2d->loc[0] = rel[0] * aspx; /* hold original location */ + td2d->loc[1] = rel[1] * aspy; - tdt->loc= loc; + tdt->loc = loc; td2d->loc2d = loc; /* current location */ } else { - td2d->loc[0] = loc[0]; /* hold original location */ - td2d->loc[1] = loc[1]; + td2d->loc[0] = loc[0] * aspx; /* hold original location */ + td2d->loc[1] = loc[1] * aspy; td2d->loc2d = loc; /* current location */ } @@ -5422,8 +5619,8 @@ static void markerToTransDataInit(TransData *td, TransData2D *td2d, TransDataTra if (rel) { if (!anchor) { - td2d->loc[0] += rel[0]; - td2d->loc[1] += rel[1]; + td2d->loc[0] += rel[0] * aspx; + td2d->loc[1] += rel[1] * aspy; } copy_v2_v2(tdt->srelative, rel); @@ -5434,14 +5631,17 @@ static void markerToTransDataInit(TransData *td, TransData2D *td2d, TransDataTra td->flag = 0; td->loc = td2d->loc; - copy_v3_v3(td->center, td->loc); copy_v3_v3(td->iloc, td->loc); + //copy_v3_v3(td->center, td->loc); + td->center[0] = marker->pos[0] * aspx; + td->center[1] = marker->pos[1] * aspy; + memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - td->ext= NULL; - td->val= NULL; + td->ext = NULL; + td->val = NULL; td->flag |= TD_SELECTED; td->dist = 0.0; @@ -5451,26 +5651,37 @@ static void markerToTransDataInit(TransData *td, TransData2D *td2d, TransDataTra } static void trackToTransData(SpaceClip *sc, TransData *td, TransData2D *td2d, - TransDataTracking *tdt, MovieTrackingTrack *track) + TransDataTracking *tdt, MovieTrackingTrack *track, float aspx, float aspy) { - MovieTrackingMarker *marker = BKE_tracking_ensure_marker(track, sc->user.framenr); + int framenr = ED_space_clip_clip_framenr(sc); + MovieTrackingMarker *marker = BKE_tracking_marker_ensure(track, framenr); tdt->flag = marker->flag; - marker->flag &= ~(MARKER_DISABLED|MARKER_TRACKED); + marker->flag &= ~(MARKER_DISABLED | MARKER_TRACKED); - markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_POINT, track->offset, marker->pos, track->offset); + markerToTransDataInit(td++, td2d++, tdt++, track, marker, TRACK_AREA_POINT, + track->offset, marker->pos, track->offset, aspx, aspy); - if (track->flag & SELECT) - markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_POINT, marker->pos, NULL, NULL); + if (track->flag & SELECT) { + markerToTransDataInit(td++, td2d++, tdt++, track, marker, TRACK_AREA_POINT, + marker->pos, NULL, NULL, aspx, aspy); + } if (track->pat_flag & SELECT) { - markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_PAT, track->pat_min, marker->pos, NULL); - markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_PAT, track->pat_max, marker->pos, NULL); + int a; + + for (a = 0; a < 4; a++) { + markerToTransDataInit(td++, td2d++, tdt++, track, marker, TRACK_AREA_PAT, + marker->pattern_corners[a], marker->pos, NULL, aspx, aspy); + } } if (track->search_flag & SELECT) { - markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_SEARCH, track->search_min, marker->pos, NULL); - markerToTransDataInit(td++, td2d++, tdt++, track, TRACK_AREA_SEARCH, track->search_max, marker->pos, NULL); + markerToTransDataInit(td++, td2d++, tdt++, track, marker, TRACK_AREA_SEARCH, + marker->search_min, marker->pos, NULL, aspx, aspy); + + markerToTransDataInit(td++, td2d++, tdt++, track, marker, TRACK_AREA_SEARCH, + marker->search_max, marker->pos, NULL, aspx, aspy); } } @@ -5492,30 +5703,31 @@ static void createTransTrackingTracksData(bContext *C, TransInfo *t) TransData2D *td2d; SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); MovieTrackingTrack *track; MovieTrackingMarker *marker; TransDataTracking *tdt; - int framenr = sc->user.framenr; + int framenr = ED_space_clip_clip_framenr(sc); + float aspx, aspy; /* count */ t->total = 0; track = tracksbase->first; while (track) { - if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED)==0) { - marker = BKE_tracking_get_marker(track, framenr); + if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) { + marker = BKE_tracking_marker_get(track, framenr); - t->total++; /* offset */ + t->total++; /* offset */ if (track->flag & SELECT) t->total++; if (track->pat_flag & SELECT) - t->total+= 2; + t->total += 4; if (track->search_flag & SELECT) - t->total+= 2; + t->total += 2; } track = track->next; @@ -5524,9 +5736,11 @@ static void createTransTrackingTracksData(bContext *C, TransInfo *t) if (t->total == 0) return; - td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransTracking TransData"); - td2d = t->data2d = MEM_callocN(t->total*sizeof(TransData2D), "TransTracking TransData2D"); - tdt = t->customData = MEM_callocN(t->total*sizeof(TransDataTracking), "TransTracking TransDataTracking"); + ED_space_clip_aspect_dimension_aware(sc, &aspx, &aspy); + + td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransTracking TransData"); + td2d = t->data2d = MEM_callocN(t->total * sizeof(TransData2D), "TransTracking TransData2D"); + tdt = t->customData = MEM_callocN(t->total * sizeof(TransDataTracking), "TransTracking TransDataTracking"); t->customFree = transDataTrackingFree; @@ -5534,27 +5748,25 @@ static void createTransTrackingTracksData(bContext *C, TransInfo *t) track = tracksbase->first; while (track) { if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) { - marker = BKE_tracking_get_marker(track, framenr); + marker = BKE_tracking_marker_get(track, framenr); - trackToTransData(sc, td, td2d, tdt, track); + trackToTransData(sc, td, td2d, tdt, track, aspx, aspy); /* offset */ td++; td2d++; tdt++; - if ((marker->flag & MARKER_DISABLED) == 0) { - if (track->flag & SELECT) { - td++; - td2d++; - tdt++; - } + if (track->flag & SELECT) { + td++; + td2d++; + tdt++; + } - if (track->pat_flag & SELECT) { - td += 2; - td2d += 2; - tdt +=2; - } + if (track->pat_flag & SELECT) { + td += 4; + td2d += 4; + tdt += 4; } if (track->search_flag & SELECT) { @@ -5603,8 +5815,8 @@ static void markerToTransCurveDataInit(TransData *td, TransData2D *td2d, TransDa memset(td->axismtx, 0, sizeof(td->axismtx)); td->axismtx[2][2] = 1.0f; - td->ext= NULL; - td->val= NULL; + td->ext = NULL; + td->val = NULL; td->flag |= TD_SELECTED; td->dist = 0.0; @@ -5619,7 +5831,7 @@ static void createTransTrackingCurvesData(bContext *C, TransInfo *t) TransData2D *td2d; SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); - ListBase *tracksbase= BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); MovieTrackingTrack *track; MovieTrackingMarker *marker, *prev_marker; TransDataTracking *tdt; @@ -5632,10 +5844,10 @@ static void createTransTrackingCurvesData(bContext *C, TransInfo *t) track = tracksbase->first; while (track) { - if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED)==0) { + if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) { for (i = 1; i < track->markersnr; i++) { marker = &track->markers[i]; - prev_marker = &track->markers[i-1]; + prev_marker = &track->markers[i - 1]; if ((marker->flag & MARKER_DISABLED) || (prev_marker->flag & MARKER_DISABLED)) continue; @@ -5654,32 +5866,32 @@ static void createTransTrackingCurvesData(bContext *C, TransInfo *t) if (t->total == 0) return; - td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransTracking TransData"); - td2d = t->data2d = MEM_callocN(t->total*sizeof(TransData2D), "TransTracking TransData2D"); - tdt = t->customData = MEM_callocN(t->total*sizeof(TransDataTracking), "TransTracking TransDataTracking"); + td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransTracking TransData"); + td2d = t->data2d = MEM_callocN(t->total * sizeof(TransData2D), "TransTracking TransData2D"); + tdt = t->customData = MEM_callocN(t->total * sizeof(TransDataTracking), "TransTracking TransDataTracking"); t->customFree = transDataTrackingFree; /* create actual data */ track = tracksbase->first; while (track) { - if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED)==0) { + if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) { for (i = 1; i < track->markersnr; i++) { marker = &track->markers[i]; - prev_marker = &track->markers[i-1]; + prev_marker = &track->markers[i - 1]; if ((marker->flag & MARKER_DISABLED) || (prev_marker->flag & MARKER_DISABLED)) continue; if (marker->flag & MARKER_GRAPH_SEL_X) { - markerToTransCurveDataInit(td, td2d, tdt, marker, &track->markers[i-1], 0, width); + markerToTransCurveDataInit(td, td2d, tdt, marker, &track->markers[i - 1], 0, width); td += 1; td2d += 1; tdt += 1; } if (marker->flag & MARKER_GRAPH_SEL_Y) { - markerToTransCurveDataInit(td, td2d, tdt, marker, &track->markers[i-1], 1, height); + markerToTransCurveDataInit(td, td2d, tdt, marker, &track->markers[i - 1], 1, height); td += 1; td2d += 1; @@ -5706,9 +5918,6 @@ static void createTransTrackingData(bContext *C, TransInfo *t) if (!clip || width == 0 || height == 0) return; - if (!ELEM(t->mode, TFM_RESIZE, TFM_TRANSLATION)) - return; - if (ar->regiontype == RGN_TYPE_PREVIEW) { /* transformation was called from graph editor */ createTransTrackingCurvesData(C, t); @@ -5723,16 +5932,16 @@ static void cancelTransTracking(TransInfo *t) TransDataTracking *tdt = t->customData; SpaceClip *sc = t->sa->spacedata.first; MovieClip *clip = ED_space_clip(sc); - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); MovieTrackingTrack *track; MovieTrackingMarker *marker; - int a, framenr = sc->user.framenr; + int a, framenr = ED_space_clip_clip_framenr(sc); if (tdt->mode == transDataTracking_ModeTracks) { track = tracksbase->first; while (track) { - if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED)==0) { - marker = BKE_tracking_get_marker(track, framenr); + if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) { + marker = BKE_tracking_marker_get(track, framenr); marker->flag = tdt->flag; tdt++; @@ -5755,15 +5964,15 @@ static void cancelTransTracking(TransInfo *t) track = tracksbase->first; while (track) { - if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED)==0) { + if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) { for (a = 1; a < track->markersnr; a++) { marker = &track->markers[a]; - prev_marker = &track->markers[a-1]; + prev_marker = &track->markers[a - 1]; if ((marker->flag & MARKER_DISABLED) || (prev_marker->flag & MARKER_DISABLED)) continue; - if (marker->flag & (MARKER_GRAPH_SEL_X|MARKER_GRAPH_SEL_Y)) { + if (marker->flag & (MARKER_GRAPH_SEL_X | MARKER_GRAPH_SEL_Y)) { marker->flag = tdt->flag; } } @@ -5776,42 +5985,61 @@ static void cancelTransTracking(TransInfo *t) void flushTransTracking(TransInfo *t) { + SpaceClip *sc = t->sa->spacedata.first; TransData *td; TransData2D *td2d; TransDataTracking *tdt; int a; + float aspx, aspy; + + ED_space_clip_aspect_dimension_aware(sc, &aspx, &aspy); if (t->state == TRANS_CANCEL) cancelTransTracking(t); /* flush to 2d vector from internally used 3d vector */ - for (a=0, td= t->data, td2d= t->data2d, tdt= t->customData; a<t->total; a++, td2d++, td++, tdt++) { + for (a = 0, td = t->data, td2d = t->data2d, tdt = t->customData; a < t->total; a++, td2d++, td++, tdt++) { if (tdt->mode == transDataTracking_ModeTracks) { - if (t->flag & T_ALT_TRANSFORM) { - if (tdt->area == TRACK_AREA_POINT && tdt->relative) { - float d[2], d2[2]; + float loc2d[2]; - if (!tdt->smarkers) { - tdt->smarkers = MEM_callocN(sizeof(*tdt->smarkers)*tdt->markersnr, "flushTransTracking markers"); - for (a = 0; a < tdt->markersnr; a++) - copy_v2_v2(tdt->smarkers[a], tdt->markers[a].pos); - } + if (t->mode == TFM_ROTATION && tdt->area == TRACK_AREA_SEARCH) { + continue; + } + + loc2d[0] = td2d->loc[0] / aspx; + loc2d[1] = td2d->loc[1] / aspy; - sub_v2_v2v2(d, td2d->loc, tdt->soffset); - sub_v2_v2(d, tdt->srelative); + if (t->flag & T_ALT_TRANSFORM) { + if (t->mode == TFM_RESIZE) { + if (tdt->area != TRACK_AREA_PAT) + continue; + } + else if (t->mode == TFM_TRANSLATION) { + if (tdt->area == TRACK_AREA_POINT && tdt->relative) { + float d[2], d2[2]; + + if (!tdt->smarkers) { + tdt->smarkers = MEM_callocN(sizeof(*tdt->smarkers) * tdt->markersnr, "flushTransTracking markers"); + for (a = 0; a < tdt->markersnr; a++) + copy_v2_v2(tdt->smarkers[a], tdt->markers[a].pos); + } - sub_v2_v2v2(d2, td2d->loc, tdt->srelative); + sub_v2_v2v2(d, loc2d, tdt->soffset); + sub_v2_v2(d, tdt->srelative); - for (a= 0; a<tdt->markersnr; a++) - add_v2_v2v2(tdt->markers[a].pos, tdt->smarkers[a], d2); + sub_v2_v2v2(d2, loc2d, tdt->srelative); - negate_v2_v2(td2d->loc2d, d); + for (a = 0; a < tdt->markersnr; a++) + add_v2_v2v2(tdt->markers[a].pos, tdt->smarkers[a], d2); + + negate_v2_v2(td2d->loc2d, d); + } } } - if (tdt->area!=TRACK_AREA_POINT || tdt->relative==0) { - td2d->loc2d[0] = td2d->loc[0]; - td2d->loc2d[1] = td2d->loc[1]; + if (tdt->area != TRACK_AREA_POINT || tdt->relative == 0) { + td2d->loc2d[0] = loc2d[0]; + td2d->loc2d[1] = loc2d[1]; if (tdt->relative) sub_v2_v2(td2d->loc2d, tdt->relative); @@ -5823,6 +6051,219 @@ void flushTransTracking(TransInfo *t) } } +/* * masking * */ + +typedef struct TransDataMasking { + int is_handle; + + float handle[2], orig_handle[2]; + float vec[3][3]; + MaskSplinePoint *point; +} TransDataMasking; + +static void MaskPointToTransData(SpaceClip *sc, MaskSplinePoint *point, + TransData *td, TransData2D *td2d, TransDataMasking *tdm, int propmode) +{ + BezTriple *bezt = &point->bezt; + float aspx, aspy; + short is_sel_point = MASKPOINT_ISSEL_KNOT(point); + short is_sel_any = MASKPOINT_ISSEL_ANY(point); + + tdm->point = point; + copy_m3_m3(tdm->vec, bezt->vec); + + ED_space_clip_mask_aspect(sc, &aspx, &aspy); + + if (propmode || is_sel_point) { + int i; + for (i = 0; i < 3; i++) { + /* CV coords are scaled by aspects. this is needed for rotations and + * proportional editing to be consistent with the stretched CV coords + * that are displayed. this also means that for display and numinput, + * and when the the CV coords are flushed, these are converted each time */ + td2d->loc[0] = bezt->vec[i][0] * aspx; + td2d->loc[1] = bezt->vec[i][1] * aspy; + td2d->loc[2] = 0.0f; + td2d->loc2d = bezt->vec[i]; + + td->flag = 0; + td->loc = td2d->loc; + copy_v3_v3(td->center, td->loc); + copy_v3_v3(td->iloc, td->loc); + + memset(td->axismtx, 0, sizeof(td->axismtx)); + td->axismtx[2][2] = 1.0f; + + td->ext = NULL; + + if (i == 1) { + /* scaling weights */ + td->val = &bezt->weight; + td->ival = *td->val; + } + else { + td->val = NULL; + } + + if (is_sel_any) { + td->flag |= TD_SELECTED; + } + td->dist = 0.0; + + unit_m3(td->mtx); + unit_m3(td->smtx); + + td++; + td2d++; + } + } + else { + tdm->is_handle = TRUE; + + BKE_mask_point_handle(point, tdm->handle); + + copy_v2_v2(tdm->orig_handle, tdm->handle); + + td2d->loc[0] = tdm->handle[0] * aspx; + td2d->loc[1] = tdm->handle[1] * aspy; + td2d->loc[2] = 0.0f; + td2d->loc2d = tdm->handle; + + td->flag = 0; + td->loc = td2d->loc; + copy_v3_v3(td->center, td->loc); + copy_v3_v3(td->iloc, td->loc); + + memset(td->axismtx, 0, sizeof(td->axismtx)); + td->axismtx[2][2] = 1.0f; + + td->ext = NULL; + td->val = NULL; + + if (is_sel_any) { + td->flag |= TD_SELECTED; + } + + td->dist = 0.0; + + unit_m3(td->mtx); + unit_m3(td->smtx); + + td++; + td2d++; + } +} + +static void createTransMaskingData(bContext *C, TransInfo *t) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *masklay; + TransData *td = NULL; + TransData2D *td2d = NULL; + TransDataMasking *tdm = NULL; + int count = 0, countsel = 0; + int propmode = t->flag & T_PROP_EDIT; + + t->total = 0; + + if (!mask) + return; + + /* count */ + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline = masklay->splines.first; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + int i; + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (MASKPOINT_ISSEL_ANY(point)) { + if (MASKPOINT_ISSEL_KNOT(point)) + countsel += 3; + else + countsel += 1; + } + + if (propmode) + count += 3; + } + } + } + + /* note: in prop mode we need at least 1 selected */ + if (countsel == 0) return; + + t->total = (propmode) ? count : countsel; + td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransObData(Mask Editing)"); + /* for each 2d uv coord a 3d vector is allocated, so that they can be + * treated just as if they were 3d verts */ + td2d = t->data2d = MEM_callocN(t->total * sizeof(TransData2D), "TransObData2D(Mask Editing)"); + tdm = t->customData = MEM_callocN(t->total * sizeof(TransDataMasking), "TransDataMasking(Mask Editing)"); + + t->flag |= T_FREE_CUSTOMDATA; + + /* create data */ + for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) { + MaskSpline *spline = masklay->splines.first; + + if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + + for (spline = masklay->splines.first; spline; spline = spline->next) { + int i; + + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + + if (propmode || MASKPOINT_ISSEL_ANY(point)) { + MaskPointToTransData(sc, point, td, td2d, tdm, propmode); + + if (propmode || MASKPOINT_ISSEL_KNOT(point)) { + td += 3; + td2d += 3; + tdm += 3; + } + else { + td++; + td2d++; + tdm++; + } + } + } + } + } +} + +void flushTransMasking(TransInfo *t) +{ + SpaceClip *sc = t->sa->spacedata.first; + TransData2D *td; + TransDataMasking *tdm; + int a; + float aspx, aspy, invx, invy; + + ED_space_clip_mask_aspect(sc, &aspx, &aspy); + invx = 1.0f / aspx; + invy = 1.0f / aspy; + + /* flush to 2d vector from internally used 3d vector */ + for (a = 0, td = t->data2d, tdm = t->customData; a < t->total; a++, td++, tdm++) { + td->loc2d[0] = td->loc[0] * invx; + td->loc2d[1] = td->loc[1] * invy; + + if (tdm->is_handle) + BKE_mask_point_set_handle(tdm->point, td->loc2d, t->flag & T_ALT_TRANSFORM, tdm->orig_handle, tdm->vec); + } +} + void createTransData(bContext *C, TransInfo *t) { Scene *scene = t->scene; @@ -5837,7 +6278,7 @@ void createTransData(bContext *C, TransInfo *t) t->flag |= T_EDIT; createTransEdge(t); if (t->data && t->flag & T_PROP_EDIT) { - sort_trans_data(t); // makes selected become first in array + sort_trans_data(t); // makes selected become first in array set_prop_dist(t, 1); sort_trans_data_dist(t); } @@ -5847,51 +6288,60 @@ void createTransData(bContext *C, TransInfo *t) //createTransBMeshVerts(t, G.editBMesh->bm, G.editBMesh->td); } else if (t->spacetype == SPACE_IMAGE) { - t->flag |= T_POINTS|T_2D_EDIT; + t->flag |= T_POINTS | T_2D_EDIT; createTransUVs(C, t); if (t->data && (t->flag & T_PROP_EDIT)) { - sort_trans_data(t); // makes selected become first in array + sort_trans_data(t); // makes selected become first in array set_prop_dist(t, 1); sort_trans_data_dist(t); } } else if (t->spacetype == SPACE_ACTION) { - t->flag |= T_POINTS|T_2D_EDIT; + t->flag |= T_POINTS | T_2D_EDIT; createTransActionData(C, t); } else if (t->spacetype == SPACE_NLA) { - t->flag |= T_POINTS|T_2D_EDIT; + t->flag |= T_POINTS | T_2D_EDIT; createTransNlaData(C, t); } else if (t->spacetype == SPACE_SEQ) { - t->flag |= T_POINTS|T_2D_EDIT; + t->flag |= T_POINTS | T_2D_EDIT; t->num.flag |= NUM_NO_FRACTION; /* sequencer has no use for floating point transformations */ createTransSeqData(C, t); } else if (t->spacetype == SPACE_IPO) { - t->flag |= T_POINTS|T_2D_EDIT; + t->flag |= T_POINTS | T_2D_EDIT; createTransGraphEditData(C, t); #if 0 if (t->data && (t->flag & T_PROP_EDIT)) { - sort_trans_data(t); // makes selected become first in array + sort_trans_data(t); // makes selected become first in array set_prop_dist(t, 1); sort_trans_data_dist(t); } #endif } else if (t->spacetype == SPACE_NODE) { - t->flag |= T_2D_EDIT|T_POINTS; + t->flag |= T_2D_EDIT | T_POINTS; createTransNodeData(C, t); if (t->data && (t->flag & T_PROP_EDIT)) { - sort_trans_data(t); // makes selected become first in array + sort_trans_data(t); // makes selected become first in array set_prop_dist(t, 1); sort_trans_data_dist(t); } } else if (t->spacetype == SPACE_CLIP) { - t->flag |= T_POINTS|T_2D_EDIT; + t->flag |= T_POINTS | T_2D_EDIT; if (t->options & CTX_MOVIECLIP) createTransTrackingData(C, t); + else if (t->options & CTX_MASK) { + createTransMaskingData(C, t); + + if (t->data && (t->flag & T_PROP_EDIT)) { + sort_trans_data(t); // makes selected become first in array + set_prop_dist(t, TRUE); + sort_trans_data_dist(t); + } + } } else if (t->obedit) { t->ext = NULL; @@ -5901,13 +6351,13 @@ void createTransData(bContext *C, TransInfo *t) else if (ELEM(t->obedit->type, OB_CURVE, OB_SURF)) { createTransCurveVerts(C, t); } - else if (t->obedit->type==OB_LATTICE) { + else if (t->obedit->type == OB_LATTICE) { createTransLatticeVerts(t); } - else if (t->obedit->type==OB_MBALL) { + else if (t->obedit->type == OB_MBALL) { createTransMBallVerts(t); } - else if (t->obedit->type==OB_ARMATURE) { + else if (t->obedit->type == OB_ARMATURE) { t->flag &= ~T_PROP_EDIT; createTransArmatureVerts(t); } @@ -5915,26 +6365,26 @@ void createTransData(bContext *C, TransInfo *t) printf("edit type not implemented!\n"); } - t->flag |= T_EDIT|T_POINTS; + t->flag |= T_EDIT | T_POINTS; if (t->data && t->flag & T_PROP_EDIT) { if (ELEM(t->obedit->type, OB_CURVE, OB_MESH)) { - sort_trans_data(t); // makes selected become first in array + sort_trans_data(t); // makes selected become first in array set_prop_dist(t, 0); sort_trans_data_dist(t); } else { - sort_trans_data(t); // makes selected become first in array + sort_trans_data(t); // makes selected become first in array set_prop_dist(t, 1); sort_trans_data_dist(t); } } /* exception... hackish, we want bonesize to use bone orientation matrix (ton) */ - if (t->mode==TFM_BONESIZE) { - t->flag &= ~(T_EDIT|T_POINTS); + if (t->mode == TFM_BONESIZE) { + t->flag &= ~(T_EDIT | T_POINTS); t->flag |= T_POSE; - t->poseobj = ob; /* <- tsk tsk, this is going to give issues one day */ + t->poseobj = ob; /* <- tsk tsk, this is going to give issues one day */ } } else if (ob && (ob->mode & OB_MODE_POSE)) { @@ -5945,9 +6395,9 @@ void createTransData(bContext *C, TransInfo *t) else if (ob && (ob->mode & OB_MODE_WEIGHT_PAINT)) { /* important that ob_armature can be set even when its not selected [#23412] * lines below just check is also visible */ - Object *ob_armature= modifiers_isDeformedByArmature(ob); + Object *ob_armature = modifiers_isDeformedByArmature(ob); if (ob_armature && ob_armature->mode & OB_MODE_POSE) { - Base *base_arm= BKE_scene_base_find(t->scene, ob_armature); + Base *base_arm = BKE_scene_base_find(t->scene, ob_armature); if (base_arm) { View3D *v3d = t->view; if (BASE_VISIBLE(v3d, base_arm)) { @@ -5962,12 +6412,12 @@ void createTransData(bContext *C, TransInfo *t) t->flag |= T_POINTS; if (t->data && t->flag & T_PROP_EDIT) { - sort_trans_data(t); // makes selected become first in array + sort_trans_data(t); // makes selected become first in array set_prop_dist(t, 1); sort_trans_data_dist(t); } } - else if (ob && (ob->mode & (OB_MODE_SCULPT|OB_MODE_TEXTURE_PAINT))) { + else if (ob && (ob->mode & (OB_MODE_SCULPT | OB_MODE_TEXTURE_PAINT))) { /* sculpt mode and project paint have own undo stack * transform ops redo clears sculpt/project undo stack. * @@ -5987,7 +6437,7 @@ void createTransData(bContext *C, TransInfo *t) if ((t->spacetype == SPACE_VIEW3D) && (t->ar->regiontype == RGN_TYPE_WINDOW)) { View3D *v3d = t->view; RegionView3D *rv3d = CTX_wm_region_view3d(C); - if (rv3d && (t->flag & T_OBJECT) && v3d->camera == OBACT && rv3d->persp==RV3D_CAMOB) { + if (rv3d && (t->flag & T_OBJECT) && v3d->camera == OBACT && rv3d->persp == RV3D_CAMOB) { t->flag |= T_CAMERA; } } @@ -5997,7 +6447,3 @@ void createTransData(bContext *C, TransInfo *t) // /* temporal...? */ // t->scene->recalc |= SCE_PRV_CHANGED; /* test for 3d preview */ } - - - - diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 4c8b447cdfd..b7857be5afb 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -49,6 +49,7 @@ #include "DNA_view3d_types.h" #include "DNA_modifier_types.h" #include "DNA_movieclip_types.h" +#include "DNA_mask_types.h" #include "BLI_math.h" #include "BLI_blenlib.h" @@ -139,13 +140,13 @@ void getViewVector(TransInfo *t, float coord[3], float vec[3]) static void clipMirrorModifier(TransInfo *t, Object *ob) { - ModifierData *md= ob->modifiers.first; + ModifierData *md = ob->modifiers.first; float tolerance[3] = {0.0f, 0.0f, 0.0f}; int axis = 0; - for (; md; md=md->next) { - if ((md->type==eModifierType_Mirror) && (md->mode & eModifierMode_Realtime)) { - MirrorModifierData *mmd = (MirrorModifierData*) md; + for (; md; md = md->next) { + if ((md->type == eModifierType_Mirror) && (md->mode & eModifierMode_Realtime)) { + MirrorModifierData *mmd = (MirrorModifierData *) md; if (mmd->flag & MOD_MIR_CLIPPING) { axis = 0; @@ -174,13 +175,13 @@ static void clipMirrorModifier(TransInfo *t, Object *ob) invert_m4_m4(imtx, mtx); } - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { int clip; float loc[3], iloc[3]; if (td->flag & TD_NOACTION) break; - if (td->loc==NULL) + if (td->loc == NULL) break; if (td->flag & TD_SKIP) @@ -196,27 +197,27 @@ static void clipMirrorModifier(TransInfo *t, Object *ob) clip = 0; if (axis & 1) { - if (fabsf(iloc[0])<=tolerance[0] || - loc[0]*iloc[0]<0.0f) + if (fabsf(iloc[0]) <= tolerance[0] || + loc[0] * iloc[0] < 0.0f) { - loc[0]= 0.0f; + loc[0] = 0.0f; clip = 1; } } if (axis & 2) { if (fabsf(iloc[1]) <= tolerance[1] || - loc[1] * iloc[1]<0.0f) + loc[1] * iloc[1] < 0.0f) { - loc[1]= 0.0f; + loc[1] = 0.0f; clip = 1; } } if (axis & 4) { if (fabsf(iloc[2]) <= tolerance[2] || - loc[2] * iloc[2] < 0.0f) + loc[2] * iloc[2] < 0.0f) { - loc[2]= 0.0f; + loc[2] = 0.0f; clip = 1; } } @@ -241,19 +242,19 @@ static void editbmesh_apply_to_mirror(TransInfo *t) BMVert *eve; int i; - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_NOACTION) break; - if (td->loc==NULL) + if (td->loc == NULL) break; if (td->flag & TD_SKIP) continue; eve = td->extra; if (eve) { - eve->co[0]= -td->loc[0]; - eve->co[1]= td->loc[1]; - eve->co[2]= td->loc[2]; + eve->co[0] = -td->loc[0]; + eve->co[1] = td->loc[1]; + eve->co[2] = td->loc[2]; } if (td->flag & TD_MIRROR_EDGE) { @@ -263,23 +264,23 @@ static void editbmesh_apply_to_mirror(TransInfo *t) } /* for the realtime animation recording feature, handle overlapping data */ -static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer) +static void animrecord_check_state(Scene *scene, ID *id, wmTimer *animtimer) { - ScreenAnimData *sad= (animtimer) ? animtimer->customdata : NULL; + ScreenAnimData *sad = (animtimer) ? animtimer->customdata : NULL; /* sanity checks */ if (ELEM3(NULL, scene, id, sad)) return; /* check if we need a new strip if: - * - if animtimer is running + * - if animtimer is running * - we're not only keying for available channels * - the option to add new actions for each round is not enabled */ - if (IS_AUTOKEY_FLAG(scene, INSERTAVAIL)==0 && (scene->toolsettings->autokey_flag & ANIMRECORD_FLAG_WITHNLA)) { + if (IS_AUTOKEY_FLAG(scene, INSERTAVAIL) == 0 && (scene->toolsettings->autokey_flag & ANIMRECORD_FLAG_WITHNLA)) { /* if playback has just looped around, we need to add a new NLA track+strip to allow a clean pass to occur */ if ((sad) && (sad->flag & ANIMPLAY_FLAG_JUMPED)) { - AnimData *adt= BKE_animdata_from_id(id); + AnimData *adt = BKE_animdata_from_id(id); /* perform push-down manually with some differences * NOTE: BKE_nla_action_pushdown() sync warning... @@ -289,21 +290,21 @@ static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer) /* only push down if action is more than 1-2 frames long */ calc_action_range(adt->action, &astart, &aend, 1); - if (aend > astart+2.0f) { - NlaStrip *strip= add_nlastrip_to_stack(adt, adt->action); + if (aend > astart + 2.0f) { + NlaStrip *strip = add_nlastrip_to_stack(adt, adt->action); /* clear reference to action now that we've pushed it onto the stack */ adt->action->id.us--; - adt->action= NULL; + adt->action = NULL; /* adjust blending + extend so that they will behave correctly */ - strip->extendmode= NLASTRIP_EXTEND_NOTHING; - strip->flag &= ~(NLASTRIP_FLAG_AUTO_BLENDS|NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_ACTIVE); + strip->extendmode = NLASTRIP_EXTEND_NOTHING; + strip->flag &= ~(NLASTRIP_FLAG_AUTO_BLENDS | NLASTRIP_FLAG_SELECT | NLASTRIP_FLAG_ACTIVE); /* also, adjust the AnimData's action extend mode to be on * 'nothing' so that previous result still play */ - adt->act_extendmode= NLASTRIP_EXTEND_NOTHING; + adt->act_extendmode = NLASTRIP_EXTEND_NOTHING; } } } @@ -312,13 +313,13 @@ static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer) static int fcu_test_selected(FCurve *fcu) { - BezTriple *bezt= fcu->bezt; + BezTriple *bezt = fcu->bezt; unsigned int i; - if (bezt==NULL) /* ignore baked */ + if (bezt == NULL) /* ignore baked */ return 0; - for (i=0; i < fcu->totvert; i++, bezt++) { + for (i = 0; i < fcu->totvert; i++, bezt++) { if (BEZSELECTED(bezt)) return 1; } @@ -328,41 +329,41 @@ static int fcu_test_selected(FCurve *fcu) /* helper for recalcData() - for Action Editor transforms */ static void recalcData_actedit(TransInfo *t) { - Scene *scene= t->scene; - SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; + Scene *scene = t->scene; + SpaceAction *saction = (SpaceAction *)t->sa->spacedata.first; - bAnimContext ac= {NULL}; + bAnimContext ac = {NULL}; ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; /* initialize relevant anim-context 'context' data from TransInfo data */ - /* NOTE: sync this with the code in ANIM_animdata_get_context() */ - ac.scene= t->scene; - ac.obact= OBACT; - ac.sa= t->sa; - ac.ar= t->ar; - ac.sl= (t->sa)? t->sa->spacedata.first : NULL; - ac.spacetype= (t->sa)? t->sa->spacetype : 0; - ac.regiontype= (t->ar)? t->ar->regiontype : 0; + /* NOTE: sync this with the code in ANIM_animdata_get_context() */ + ac.scene = t->scene; + ac.obact = OBACT; + ac.sa = t->sa; + ac.ar = t->ar; + ac.sl = (t->sa) ? t->sa->spacedata.first : NULL; + ac.spacetype = (t->sa) ? t->sa->spacetype : 0; + ac.regiontype = (t->ar) ? t->ar->regiontype : 0; ANIM_animdata_context_getdata(&ac); /* perform flush */ - if (ac.datatype == ANIMCONT_GPENCIL) { + if (ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK)) { /* flush transform values back to actual coordinates */ - flushTransGPactionData(t); + flushTransIntFrameActionData(t); } else { /* get animdata blocks visible in editor, assuming that these will be the ones where things changed */ - filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_ANIMDATA); + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_ANIMDATA); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* just tag these animdata-blocks to recalc, assuming that some data there changed * BUT only do this if realtime updates are enabled */ if ((saction->flag & SACTION_NOREALTIMEUPDATES) == 0) { - for (ale= anim_data.first; ale; ale= ale->next) { + for (ale = anim_data.first; ale; ale = ale->next) { /* set refresh tags for objects using this animation */ ANIM_list_elem_update(t->scene, ale); } @@ -375,11 +376,11 @@ static void recalcData_actedit(TransInfo *t) /* helper for recalcData() - for Graph Editor transforms */ static void recalcData_graphedit(TransInfo *t) { - SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; + SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first; Scene *scene; ListBase anim_data = {NULL, NULL}; - bAnimContext ac= {NULL}; + bAnimContext ac = {NULL}; int filter; bAnimListElem *ale; @@ -387,14 +388,14 @@ static void recalcData_graphedit(TransInfo *t) /* initialize relevant anim-context 'context' data from TransInfo data */ - /* NOTE: sync this with the code in ANIM_animdata_get_context() */ - scene= ac.scene= t->scene; - ac.obact= OBACT; - ac.sa= t->sa; - ac.ar= t->ar; - ac.sl= (t->sa)? t->sa->spacedata.first : NULL; - ac.spacetype= (t->sa)? t->sa->spacetype : 0; - ac.regiontype= (t->ar)? t->ar->regiontype : 0; + /* NOTE: sync this with the code in ANIM_animdata_get_context() */ + scene = ac.scene = t->scene; + ac.obact = OBACT; + ac.sa = t->sa; + ac.ar = t->ar; + ac.sl = (t->sa) ? t->sa->spacedata.first : NULL; + ac.spacetype = (t->sa) ? t->sa->spacetype : 0; + ac.regiontype = (t->ar) ? t->ar->regiontype : 0; ANIM_animdata_context_getdata(&ac); @@ -402,19 +403,19 @@ static void recalcData_graphedit(TransInfo *t) flushTransGraphData(t); /* get curves to check if a re-sort is needed */ - filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVE_VISIBLE); + filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVE_VISIBLE); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* now test if there is a need to re-sort */ - for (ale= anim_data.first; ale; ale= ale->next) { - FCurve *fcu= (FCurve *)ale->key_data; + for (ale = anim_data.first; ale; ale = ale->next) { + FCurve *fcu = (FCurve *)ale->key_data; /* ignore unselected fcurves */ if (!fcu_test_selected(fcu)) continue; // fixme: only do this for selected verts... - ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, ale->key_data, ANIM_UNITCONV_ONLYSEL|ANIM_UNITCONV_SELVERTS|ANIM_UNITCONV_RESTORE); + ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, ale->key_data, ANIM_UNITCONV_ONLYSEL | ANIM_UNITCONV_SELVERTS | ANIM_UNITCONV_RESTORE); /* watch it: if the time is wrong: do not correct handles yet */ @@ -440,10 +441,10 @@ static void recalcData_graphedit(TransInfo *t) /* helper for recalcData() - for NLA Editor transforms */ static void recalcData_nla(TransInfo *t) { - TransDataNla *tdn= (TransDataNla *)t->customData; - SpaceNla *snla= (SpaceNla *)t->sa->spacedata.first; - Scene *scene= t->scene; - double secf= FPS; + TransDataNla *tdn = (TransDataNla *)t->customData; + SpaceNla *snla = (SpaceNla *)t->sa->spacedata.first; + Scene *scene = t->scene; + double secf = FPS; int i; /* for each strip we've got, perform some additional validation of the values that got set before @@ -451,7 +452,7 @@ static void recalcData_nla(TransInfo *t) * sure that everything works ok) */ for (i = 0; i < t->total; i++, tdn++) { - NlaStrip *strip= tdn->strip; + NlaStrip *strip = tdn->strip; PointerRNA strip_ptr; short pExceeded, nExceeded, iter; int delta_y1, delta_y2; @@ -473,16 +474,16 @@ static void recalcData_nla(TransInfo *t) */ /* start */ - strip->start= tdn->h1[0]; + strip->start = tdn->h1[0]; if ((strip->prev) && (strip->prev->type == NLASTRIP_TYPE_TRANSITION)) - strip->prev->end= tdn->h1[0]; + strip->prev->end = tdn->h1[0]; /* end */ - strip->end= tdn->h2[0]; + strip->end = tdn->h2[0]; if ((strip->next) && (strip->next->type == NLASTRIP_TYPE_TRANSITION)) - strip->next->start= tdn->h2[0]; + strip->next->start = tdn->h2[0]; /* flush transforms to child strips (since this should be a meta) */ BKE_nlameta_flush_transforms(strip); @@ -502,9 +503,9 @@ static void recalcData_nla(TransInfo *t) * * this is done as a iterative procedure (done 5 times max for now) */ - for (iter=0; iter < 5; iter++) { - pExceeded= ((strip->prev) && (strip->prev->type != NLASTRIP_TYPE_TRANSITION) && (tdn->h1[0] < strip->prev->end)); - nExceeded= ((strip->next) && (strip->next->type != NLASTRIP_TYPE_TRANSITION) && (tdn->h2[0] > strip->next->start)); + for (iter = 0; iter < 5; iter++) { + pExceeded = ((strip->prev) && (strip->prev->type != NLASTRIP_TYPE_TRANSITION) && (tdn->h1[0] < strip->prev->end)); + nExceeded = ((strip->next) && (strip->next->type != NLASTRIP_TYPE_TRANSITION) && (tdn->h2[0] > strip->next->start)); if ((pExceeded && nExceeded) || (iter == 4) ) { /* both endpoints exceeded (or iteration ping-pong'd meaning that we need a compromise) @@ -512,24 +513,24 @@ static void recalcData_nla(TransInfo *t) * - if there were no neighbors, clear the transforms (make it default to the strip's current values) */ if (strip->prev && strip->next) { - tdn->h1[0]= strip->prev->end; - tdn->h2[0]= strip->next->start; + tdn->h1[0] = strip->prev->end; + tdn->h2[0] = strip->next->start; } else { - tdn->h1[0]= strip->start; - tdn->h2[0]= strip->end; + tdn->h1[0] = strip->start; + tdn->h2[0] = strip->end; } } else if (nExceeded) { /* move backwards */ - float offset= tdn->h2[0] - strip->next->start; + float offset = tdn->h2[0] - strip->next->start; tdn->h1[0] -= offset; tdn->h2[0] -= offset; } else if (pExceeded) { /* more forwards */ - float offset= strip->prev->end - tdn->h1[0]; + float offset = strip->prev->end - tdn->h1[0]; tdn->h1[0] += offset; tdn->h2[0] += offset; @@ -552,8 +553,8 @@ static void recalcData_nla(TransInfo *t) break; case SACTSNAP_MARKER: /* snap to nearest marker */ - tdn->h1[0]= (float)ED_markers_find_nearest_marker_time(&t->scene->markers, tdn->h1[0]); - tdn->h2[0]= (float)ED_markers_find_nearest_marker_time(&t->scene->markers, tdn->h2[0]); + tdn->h1[0] = (float)ED_markers_find_nearest_marker_time(&t->scene->markers, tdn->h1[0]); + tdn->h2[0] = (float)ED_markers_find_nearest_marker_time(&t->scene->markers, tdn->h2[0]); break; } @@ -571,8 +572,8 @@ static void recalcData_nla(TransInfo *t) /* now, check if we need to try and move track * - we need to calculate both, as only one may have been altered by transform if only 1 handle moved */ - delta_y1= ((int)tdn->h1[1] / NLACHANNEL_STEP(snla) - tdn->trackIndex); - delta_y2= ((int)tdn->h2[1] / NLACHANNEL_STEP(snla) - tdn->trackIndex); + delta_y1 = ((int)tdn->h1[1] / NLACHANNEL_STEP(snla) - tdn->trackIndex); + delta_y2 = ((int)tdn->h2[1] / NLACHANNEL_STEP(snla) - tdn->trackIndex); if (delta_y1 || delta_y2) { NlaTrack *track; @@ -583,14 +584,14 @@ static void recalcData_nla(TransInfo *t) * stopping on the last track available or that we're able to fit in */ if (delta > 0) { - for (track=tdn->nlt->next, n=0; (track) && (n < delta); track=track->next, n++) { + for (track = tdn->nlt->next, n = 0; (track) && (n < delta); track = track->next, n++) { /* check if space in this track for the strip */ if (BKE_nlatrack_has_space(track, strip->start, strip->end)) { /* move strip to this track */ BLI_remlink(&tdn->nlt->strips, strip); BKE_nlatrack_add_strip(track, strip); - tdn->nlt= track; + tdn->nlt = track; tdn->trackIndex++; } else /* can't move any further */ @@ -599,16 +600,16 @@ static void recalcData_nla(TransInfo *t) } else { /* make delta 'positive' before using it, since we now know to go backwards */ - delta= -delta; + delta = -delta; - for (track=tdn->nlt->prev, n=0; (track) && (n < delta); track=track->prev, n++) { + for (track = tdn->nlt->prev, n = 0; (track) && (n < delta); track = track->prev, n++) { /* check if space in this track for the strip */ if (BKE_nlatrack_has_space(track, strip->start, strip->end)) { /* move strip to this track */ BLI_remlink(&tdn->nlt->strips, strip); BKE_nlatrack_add_strip(track, strip); - tdn->nlt= track; + tdn->nlt = track; tdn->trackIndex--; } else /* can't move any further */ @@ -623,7 +624,7 @@ static void recalcData_nla(TransInfo *t) static void recalcData_image(TransInfo *t) { if (t->obedit && t->obedit->type == OB_MESH) { - SpaceImage *sima= t->sa->spacedata.first; + SpaceImage *sima = t->sa->spacedata.first; flushTransUVs(t); if (sima->flag & SI_LIVE_UNWRAP) @@ -638,33 +639,49 @@ static void recalcData_spaceclip(TransInfo *t) { SpaceClip *sc = t->sa->spacedata.first; - MovieClip *clip = ED_space_clip(sc); - ListBase *tracksbase = BKE_tracking_get_tracks(&clip->tracking); - MovieTrackingTrack *track; + if (ED_space_clip_show_trackedit(sc)) { + MovieClip *clip = ED_space_clip(sc); + ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking); + MovieTrackingTrack *track; + int framenr = sc->user.framenr; - flushTransTracking(t); + flushTransTracking(t); - track = tracksbase->first; - while (track) { - if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED)==0) { - if (t->mode == TFM_TRANSLATION) { - if (TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) - BKE_tracking_clamp_track(track, CLAMP_PAT_POS); - if (TRACK_AREA_SELECTED(track, TRACK_AREA_SEARCH)) - BKE_tracking_clamp_track(track, CLAMP_SEARCH_POS); - } - else if (t->mode == TFM_RESIZE) { - if (TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) - BKE_tracking_clamp_track(track, CLAMP_PAT_DIM); - if (TRACK_AREA_SELECTED(track, TRACK_AREA_SEARCH)) - BKE_tracking_clamp_track(track, CLAMP_SEARCH_DIM); + track = tracksbase->first; + while (track) { + if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) { + MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + + if (t->mode == TFM_TRANSLATION) { + if (TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) + BKE_tracking_marker_clamp(marker, CLAMP_PAT_POS); + if (TRACK_AREA_SELECTED(track, TRACK_AREA_SEARCH)) + BKE_tracking_marker_clamp(marker, CLAMP_SEARCH_POS); + } + else if (t->mode == TFM_RESIZE) { + if (TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) + BKE_tracking_marker_clamp(marker, CLAMP_PAT_DIM); + if (TRACK_AREA_SELECTED(track, TRACK_AREA_SEARCH)) + BKE_tracking_marker_clamp(marker, CLAMP_SEARCH_DIM); + } + else if (t->mode == TFM_ROTATION) { + if (TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) + BKE_tracking_marker_clamp(marker, CLAMP_PAT_POS); + } } + + track = track->next; } - track = track->next; + DAG_id_tag_update(&clip->id, 0); } + else if (ED_space_clip_show_maskedit(sc)) { + Mask *mask = ED_space_clip_mask(sc); + + flushTransMasking(t); - DAG_id_tag_update(&clip->id, 0); + DAG_id_tag_update(&mask->id, 0); + } } /* helper for recalcData() - for 3d-view transforms */ @@ -674,9 +691,9 @@ static void recalcData_view3d(TransInfo *t) if (t->obedit) { if (ELEM(t->obedit->type, OB_CURVE, OB_SURF)) { - Curve *cu= t->obedit->data; - ListBase *nurbs= BKE_curve_editNurbs_get(cu); - Nurb *nu= nurbs->first; + Curve *cu = t->obedit->data; + ListBase *nurbs = BKE_curve_editNurbs_get(cu); + Nurb *nu = nurbs->first; if (t->state != TRANS_CANCEL) { clipMirrorModifier(t, t->obedit); @@ -688,7 +705,7 @@ static void recalcData_view3d(TransInfo *t) if (t->state == TRANS_CANCEL) { while (nu) { BKE_nurb_handles_calc(nu); /* Cant do testhandlesNurb here, it messes up the h1 and h2 flags */ - nu= nu->next; + nu = nu->next; } } else { @@ -696,12 +713,12 @@ static void recalcData_view3d(TransInfo *t) while (nu) { BKE_nurb_test2D(nu); BKE_nurb_handles_calc(nu); - nu= nu->next; + nu = nu->next; } } } - else if (t->obedit->type==OB_LATTICE) { - Lattice *la= t->obedit->data; + else if (t->obedit->type == OB_LATTICE) { + Lattice *la = t->obedit->data; if (t->state != TRANS_CANCEL) { applyProject(t); @@ -727,8 +744,8 @@ static void recalcData_view3d(TransInfo *t) EDBM_mesh_normals_update(em); BMEdit_RecalcTessellation(em); } - else if (t->obedit->type==OB_ARMATURE) { /* no recalc flag, does pose */ - bArmature *arm= t->obedit->data; + else if (t->obedit->type == OB_ARMATURE) { /* no recalc flag, does pose */ + bArmature *arm = t->obedit->data; ListBase *edbo = arm->edbo; EditBone *ebo; TransData *td = t->data; @@ -744,33 +761,33 @@ static void recalcData_view3d(TransInfo *t) if ((ebo->flag & BONE_CONNECTED) && ebo->parent) { /* If this bone has a parent tip that has been moved */ if (ebo->parent->flag & BONE_TIPSEL) { - copy_v3_v3 (ebo->head, ebo->parent->tail); - if (t->mode==TFM_BONE_ENVELOPE) ebo->rad_head= ebo->parent->rad_tail; + copy_v3_v3(ebo->head, ebo->parent->tail); + if (t->mode == TFM_BONE_ENVELOPE) ebo->rad_head = ebo->parent->rad_tail; } /* If this bone has a parent tip that has NOT been moved */ else { - copy_v3_v3 (ebo->parent->tail, ebo->head); - if (t->mode==TFM_BONE_ENVELOPE) ebo->parent->rad_tail= ebo->rad_head; + copy_v3_v3(ebo->parent->tail, ebo->head); + if (t->mode == TFM_BONE_ENVELOPE) ebo->parent->rad_tail = ebo->rad_head; } } /* on extrude bones, oldlength==0.0f, so we scale radius of points */ - ebo->length= len_v3v3(ebo->head, ebo->tail); - if (ebo->oldlength==0.0f) { - ebo->rad_head= 0.25f*ebo->length; - ebo->rad_tail= 0.10f*ebo->length; - ebo->dist= 0.25f*ebo->length; + ebo->length = len_v3v3(ebo->head, ebo->tail); + if (ebo->oldlength == 0.0f) { + ebo->rad_head = 0.25f * ebo->length; + ebo->rad_tail = 0.10f * ebo->length; + ebo->dist = 0.25f * ebo->length; if (ebo->parent) { if (ebo->rad_head > ebo->parent->rad_tail) - ebo->rad_head= ebo->parent->rad_tail; + ebo->rad_head = ebo->parent->rad_tail; } } - else if (t->mode!=TFM_BONE_ENVELOPE) { + else if (t->mode != TFM_BONE_ENVELOPE) { /* if bones change length, lets do that for the deform distance as well */ - ebo->dist*= ebo->length/ebo->oldlength; - ebo->rad_head*= ebo->length/ebo->oldlength; - ebo->rad_tail*= ebo->length/ebo->oldlength; - ebo->oldlength= ebo->length; + ebo->dist *= ebo->length / ebo->oldlength; + ebo->rad_head *= ebo->length / ebo->oldlength; + ebo->rad_tail *= ebo->length / ebo->oldlength; + ebo->oldlength = ebo->length; } } @@ -811,9 +828,9 @@ static void recalcData_view3d(TransInfo *t) DAG_id_tag_update(t->obedit->data, 0); /* sets recalc flags */ } } - else if ( (t->flag & T_POSE) && t->poseobj) { - Object *ob= t->poseobj; - bArmature *arm= ob->data; + else if ((t->flag & T_POSE) && t->poseobj) { + Object *ob = t->poseobj; + bArmature *arm = ob->data; /* if animtimer is running, and the object already has animation data, * check if the auto-record feature means that we should record 'samples' @@ -823,7 +840,7 @@ static void recalcData_view3d(TransInfo *t) */ // TODO: autokeyframe calls need some setting to specify to add samples (FPoints) instead of keyframes? if ((t->animtimer) && (t->context) && IS_AUTOKEY_ON(t->scene)) { - int targetless_ik= (t->flag & T_AUTOIK); // XXX this currently doesn't work, since flags aren't set yet! + int targetless_ik = (t->flag & T_AUTOIK); // XXX this currently doesn't work, since flags aren't set yet! animrecord_check_state(t->scene, &ob->id, t->animtimer); autokeyframe_pose_cb_func(t->context, t->scene, (View3D *)t->view, ob, t->mode, targetless_ik); @@ -880,10 +897,10 @@ static void recalcData_view3d(TransInfo *t) /* called for updating while transform acts, once per redraw */ void recalcData(TransInfo *t) { - if (t->spacetype==SPACE_NODE) { + if (t->spacetype == SPACE_NODE) { flushTransNodes(t); } - else if (t->spacetype==SPACE_SEQ) { + else if (t->spacetype == SPACE_SEQ) { flushTransSeq(t); } else if (t->spacetype == SPACE_ACTION) { @@ -936,8 +953,8 @@ void drawLine(TransInfo *t, float *center, float *dir, char axis, short options) setlinestyle(0); glBegin(GL_LINE_STRIP); - glVertex3fv(v1); - glVertex3fv(v2); + glVertex3fv(v1); + glVertex3fv(v2); glEnd(); glPopMatrix(); @@ -994,20 +1011,20 @@ int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->mval[0] = t->imval[0]; t->mval[1] = t->imval[1]; - t->transform = NULL; - t->handleEvent = NULL; + t->transform = NULL; + t->handleEvent = NULL; - t->total = 0; + t->total = 0; t->val = 0.0f; - t->vec[0] = - t->vec[1] = - t->vec[2] = 0.0f; - - t->center[0] = - t->center[1] = - t->center[2] = 0.0f; + t->vec[0] = + t->vec[1] = + t->vec[2] = 0.0f; + + t->center[0] = + t->center[1] = + t->center[2] = 0.0f; unit_m3(t->mat); @@ -1025,15 +1042,15 @@ int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) /* Assign the space type, some exceptions for running in different mode */ if (sa == NULL) { /* background mode */ - t->spacetype= SPACE_EMPTY; + t->spacetype = SPACE_EMPTY; } else if ((ar == NULL) && (sa->spacetype == SPACE_VIEW3D)) { /* running in the text editor */ - t->spacetype= SPACE_EMPTY; + t->spacetype = SPACE_EMPTY; } else { /* normal operation */ - t->spacetype= sa->spacetype; + t->spacetype = sa->spacetype; } @@ -1042,7 +1059,7 @@ int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) bScreen *animscreen = ED_screen_animation_playing(CTX_wm_manager(C)); t->view = v3d; - t->animtimer= (animscreen)? animscreen->animtimer: NULL; + t->animtimer = (animscreen) ? animscreen->animtimer : NULL; /* turn manipulator off during transform */ // FIXME: but don't do this when USING the manipulator... @@ -1068,7 +1085,7 @@ int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) } /* exceptional case */ - if (t->around==V3D_LOCAL && (t->settings->selectmode & SCE_SELECT_FACE)) { + if (t->around == V3D_LOCAL && (t->settings->selectmode & SCE_SELECT_FACE)) { if (ELEM3(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL)) { t->options |= CTX_NO_PET; } @@ -1090,22 +1107,32 @@ int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) } } - else if (t->spacetype==SPACE_IMAGE) { + else if (t->spacetype == SPACE_IMAGE) { SpaceImage *sima = sa->spacedata.first; // XXX for now, get View2D from the active region t->view = &ar->v2d; t->around = sima->around; } - else if (t->spacetype==SPACE_NODE) { + else if (t->spacetype == SPACE_NODE) { // XXX for now, get View2D from the active region t->view = &ar->v2d; t->around = V3D_CENTER; } - else if (t->spacetype==SPACE_IPO) { - SpaceIpo *sipo= sa->spacedata.first; + else if (t->spacetype == SPACE_IPO) { + SpaceIpo *sipo = sa->spacedata.first; t->view = &ar->v2d; t->around = sipo->around; } + else if (t->spacetype == SPACE_CLIP) { + SpaceClip *sclip = sa->spacedata.first; + t->view = &ar->v2d; + t->around = sclip->around; + + if (ED_space_clip_show_trackedit(sclip)) + t->options |= CTX_MOVIECLIP; + else if (ED_space_clip_show_maskedit(sclip)) + t->options |= CTX_MASK; + } else { if (ar) { // XXX for now, get View2D from the active region @@ -1113,7 +1140,7 @@ int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) // XXX for now, the center point is the midpoint of the data } else { - t->view= NULL; + t->view = NULL; } t->around = V3D_CENTER; } @@ -1167,6 +1194,15 @@ int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->flag |= T_PROP_CONNECTED; } } + else if (t->options & CTX_MASK) { + if (ts->proportional_mask) { + t->flag |= T_PROP_EDIT; + + if (ts->proportional == PROP_EDIT_CONNECTED) { + t->flag |= T_PROP_CONNECTED; + } + } + } else if (t->obedit == NULL && ts->proportional_objects) { t->flag |= T_PROP_EDIT; } @@ -1241,7 +1277,7 @@ void postTrans(bContext *C, TransInfo *t) int a; /* free data malloced per trans-data */ - for (a=0, td= t->data; a<t->total; a++, td++) { + for (a = 0, td = t->data; a < t->total; a++, td++) { if (td->flag & TD_BEZTRIPLE) MEM_freeN(td->hdata); } @@ -1253,15 +1289,15 @@ void postTrans(bContext *C, TransInfo *t) if (t->ext) MEM_freeN(t->ext); if (t->data2d) { MEM_freeN(t->data2d); - t->data2d= NULL; + t->data2d = NULL; } - if (t->spacetype==SPACE_IMAGE) { - SpaceImage *sima= t->sa->spacedata.first; + if (t->spacetype == SPACE_IMAGE) { + SpaceImage *sima = t->sa->spacedata.first; if (sima->flag & SI_LIVE_UNWRAP) ED_uvedit_live_unwrap_end(t->state == TRANS_CANCEL); } - else if (t->spacetype==SPACE_VIEW3D) { + else if (t->spacetype == SPACE_VIEW3D) { View3D *v3d = t->sa->spacedata.first; /* restore manipulator */ if (t->flag & T_MODAL) { @@ -1300,12 +1336,12 @@ static void restoreElement(TransData *td) *td->val = td->ival; } - if (td->ext && (td->flag&TD_NO_EXT)==0) { + if (td->ext && (td->flag & TD_NO_EXT) == 0) { if (td->ext->rot) { copy_v3_v3(td->ext->rot, td->ext->irot); } if (td->ext->rotAngle) { - *td->ext->rotAngle= td->ext->irotAngle; + *td->ext->rotAngle = td->ext->irotAngle; } if (td->ext->rotAxis) { copy_v3_v3(td->ext->rotAxis, td->ext->irotAxis); @@ -1334,7 +1370,7 @@ void restoreTransObjects(TransInfo *t) restoreElement(td); } - for (td2d=t->data2d; t->data2d && td2d < t->data2d + t->total; td2d++) { + for (td2d = t->data2d; t->data2d && td2d < t->data2d + t->total; td2d++) { if (td2d->h1) { td2d->h1[0] = td2d->ih1[0]; td2d->h1[1] = td2d->ih1[1]; @@ -1352,8 +1388,8 @@ void restoreTransObjects(TransInfo *t) void calculateCenter2D(TransInfo *t) { - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob= t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; float vec[3]; copy_v3_v3(vec, t->center); @@ -1373,8 +1409,8 @@ void calculateCenterCursor(TransInfo *t) copy_v3_v3(t->center, cursor); /* If edit or pose mode, move cursor in local space */ - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob = t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; float mat[3][3], imat[3][3]; sub_v3_v3v3(t->center, t->center, ob->obmat[3]); @@ -1388,11 +1424,11 @@ void calculateCenterCursor(TransInfo *t) void calculateCenterCursor2D(TransInfo *t) { - float aspx=1.0, aspy=1.0; - float *cursor= NULL; + float aspx = 1.0, aspy = 1.0; + float *cursor = NULL; - if (t->spacetype==SPACE_IMAGE) { - SpaceImage *sima= (SpaceImage *)t->sa->spacedata.first; + if (t->spacetype == SPACE_IMAGE) { + SpaceImage *sima = (SpaceImage *)t->sa->spacedata.first; /* only space supported right now but may change */ ED_space_image_uv_aspect(sima, &aspx, &aspy); cursor = sima->cursor; @@ -1408,12 +1444,12 @@ void calculateCenterCursor2D(TransInfo *t) static void calculateCenterCursorGraph2D(TransInfo *t) { - SpaceIpo *sipo= (SpaceIpo *)t->sa->spacedata.first; - Scene *scene= t->scene; + SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first; + Scene *scene = t->scene; /* cursor is combination of current frame, and graph-editor cursor value */ - t->center[0]= (float)(scene->r.cfra); - t->center[1]= sipo->cursorVal; + t->center[0] = (float)(scene->r.cfra); + t->center[1] = sipo->cursorVal; calculateCenter2D(t); } @@ -1479,95 +1515,95 @@ void calculateCenterBound(TransInfo *t) void calculateCenter(TransInfo *t) { switch (t->around) { - case V3D_CENTER: - calculateCenterBound(t); - break; - case V3D_CENTROID: - calculateCenterMedian(t); - break; - case V3D_CURSOR: - if (t->spacetype==SPACE_IMAGE) - calculateCenterCursor2D(t); - else if (t->spacetype==SPACE_IPO) - calculateCenterCursorGraph2D(t); - else - calculateCenterCursor(t); - break; - case V3D_LOCAL: - /* Individual element center uses median center for helpline and such */ - calculateCenterMedian(t); - break; - case V3D_ACTIVE: + case V3D_CENTER: + calculateCenterBound(t); + break; + case V3D_CENTROID: + calculateCenterMedian(t); + break; + case V3D_CURSOR: + if (t->spacetype == SPACE_IMAGE) + calculateCenterCursor2D(t); + else if (t->spacetype == SPACE_IPO) + calculateCenterCursorGraph2D(t); + else + calculateCenterCursor(t); + break; + case V3D_LOCAL: + /* Individual element center uses median center for helpline and such */ + calculateCenterMedian(t); + break; + case V3D_ACTIVE: { - /* set median, and if if if... do object center */ + /* set median, and if if if... do object center */ - /* EDIT MODE ACTIVE EDITMODE ELEMENT */ + /* EDIT MODE ACTIVE EDITMODE ELEMENT */ - if (t->obedit) { - if (t->obedit && t->obedit->type == OB_MESH) { - BMEditSelection ese; - BMEditMesh *em = BMEdit_FromObject(t->obedit); + if (t->obedit) { + if (t->obedit && t->obedit->type == OB_MESH) { + BMEditSelection ese; + BMEditMesh *em = BMEdit_FromObject(t->obedit); - if (BM_select_history_active_get(em->bm, &ese)) { - BM_editselection_center(&ese, t->center); - calculateCenter2D(t); - break; + if (BM_select_history_active_get(em->bm, &ese)) { + BM_editselection_center(&ese, t->center); + calculateCenter2D(t); + break; + } } - } - else if (ELEM(t->obedit->type, OB_CURVE, OB_SURF)) { - float center[3]; - Curve *cu= (Curve *)t->obedit->data; + else if (ELEM(t->obedit->type, OB_CURVE, OB_SURF)) { + float center[3]; + Curve *cu = (Curve *)t->obedit->data; - if (ED_curve_actSelection(cu, center)) { - copy_v3_v3(t->center, center); - calculateCenter2D(t); - break; + if (ED_curve_actSelection(cu, center)) { + copy_v3_v3(t->center, center); + calculateCenter2D(t); + break; + } + } + } /* END EDIT MODE ACTIVE ELEMENT */ + + calculateCenterMedian(t); + if ((t->flag & (T_EDIT | T_POSE)) == 0) { + Scene *scene = t->scene; + Object *ob = OBACT; + if (ob) { + copy_v3_v3(t->center, ob->obmat[3]); + projectIntView(t, t->center, t->center2d); } } - } /* END EDIT MODE ACTIVE ELEMENT */ - - calculateCenterMedian(t); - if ((t->flag & (T_EDIT|T_POSE))==0) { - Scene *scene = t->scene; - Object *ob= OBACT; - if (ob) { - copy_v3_v3(t->center, ob->obmat[3]); - projectIntView(t, t->center, t->center2d); - } - } } } /* setting constraint center */ copy_v3_v3(t->con.center, t->center); - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob= t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; mul_m4_v3(ob->obmat, t->con.center); } /* for panning from cameraview */ if (t->flag & T_OBJECT) { - if (t->spacetype==SPACE_VIEW3D && t->ar && t->ar->regiontype == RGN_TYPE_WINDOW) { + if (t->spacetype == SPACE_VIEW3D && t->ar && t->ar->regiontype == RGN_TYPE_WINDOW) { View3D *v3d = t->view; Scene *scene = t->scene; RegionView3D *rv3d = t->ar->regiondata; - if (v3d->camera == OBACT && rv3d->persp==RV3D_CAMOB) { + if (v3d->camera == OBACT && rv3d->persp == RV3D_CAMOB) { float axis[3]; /* persinv is nasty, use viewinv instead, always right */ copy_v3_v3(axis, t->viewinv[2]); normalize_v3(axis); /* 6.0 = 6 grid units */ - axis[0]= t->center[0]- 6.0f*axis[0]; - axis[1]= t->center[1]- 6.0f*axis[1]; - axis[2]= t->center[2]- 6.0f*axis[2]; + axis[0] = t->center[0] - 6.0f * axis[0]; + axis[1] = t->center[1] - 6.0f * axis[1]; + axis[2] = t->center[2] - 6.0f * axis[2]; projectIntView(t, axis, t->center2d); /* rotate only needs correct 2d center, grab needs initgrabz() value */ - if (t->mode==TFM_TRANSLATION) { + if (t->mode == TFM_TRANSLATION) { copy_v3_v3(t->center, axis); copy_v3_v3(t->con.center, t->center); } @@ -1575,10 +1611,10 @@ void calculateCenter(TransInfo *t) } } - if (t->spacetype==SPACE_VIEW3D) { + if (t->spacetype == SPACE_VIEW3D) { /* initgrabz() defines a factor for perspective depth correction, used in window_to_3d_delta() */ - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob= t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; float vec[3]; copy_v3_v3(vec, t->center); @@ -1599,7 +1635,7 @@ void calculatePropRatio(TransInfo *t) short connected = t->flag & T_PROP_CONNECTED; if (t->flag & T_PROP_EDIT) { - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { if (td->flag & TD_SELECTED) { td->factor = 1.0f; } @@ -1624,9 +1660,9 @@ void calculatePropRatio(TransInfo *t) td->flag &= ~TD_NOACTION; if (connected) - dist= (t->prop_size-td->dist)/t->prop_size; + dist = (t->prop_size - td->dist) / t->prop_size; else - dist= (t->prop_size-td->rdist)/t->prop_size; + dist = (t->prop_size - td->rdist) / t->prop_size; /* * Clamp to positive numbers. @@ -1637,63 +1673,63 @@ void calculatePropRatio(TransInfo *t) dist = 0.0f; switch (t->prop_mode) { - case PROP_SHARP: - td->factor= dist*dist; - break; - case PROP_SMOOTH: - td->factor= 3.0f*dist*dist - 2.0f*dist*dist*dist; - break; - case PROP_ROOT: - td->factor = (float)sqrt(dist); - break; - case PROP_LIN: - td->factor = dist; - break; - case PROP_CONST: - td->factor = 1.0f; - break; - case PROP_SPHERE: - td->factor = (float)sqrt(2*dist - dist * dist); - break; - case PROP_RANDOM: - BLI_srand(BLI_rand()); /* random seed */ - td->factor = BLI_frand()*dist; - break; - default: - td->factor = 1; + case PROP_SHARP: + td->factor = dist * dist; + break; + case PROP_SMOOTH: + td->factor = 3.0f * dist * dist - 2.0f * dist * dist * dist; + break; + case PROP_ROOT: + td->factor = (float)sqrt(dist); + break; + case PROP_LIN: + td->factor = dist; + break; + case PROP_CONST: + td->factor = 1.0f; + break; + case PROP_SPHERE: + td->factor = (float)sqrt(2 * dist - dist * dist); + break; + case PROP_RANDOM: + BLI_srand(BLI_rand()); /* random seed */ + td->factor = BLI_frand() * dist; + break; + default: + td->factor = 1; } } } switch (t->prop_mode) { - case PROP_SHARP: - strcpy(t->proptext, "(Sharp)"); - break; - case PROP_SMOOTH: - strcpy(t->proptext, "(Smooth)"); - break; - case PROP_ROOT: - strcpy(t->proptext, "(Root)"); - break; - case PROP_LIN: - strcpy(t->proptext, "(Linear)"); - break; - case PROP_CONST: - strcpy(t->proptext, "(Constant)"); - break; - case PROP_SPHERE: - strcpy(t->proptext, "(Sphere)"); - break; - case PROP_RANDOM: - strcpy(t->proptext, "(Random)"); - break; - default: - t->proptext[0]= '\0'; + case PROP_SHARP: + strcpy(t->proptext, "(Sharp)"); + break; + case PROP_SMOOTH: + strcpy(t->proptext, "(Smooth)"); + break; + case PROP_ROOT: + strcpy(t->proptext, "(Root)"); + break; + case PROP_LIN: + strcpy(t->proptext, "(Linear)"); + break; + case PROP_CONST: + strcpy(t->proptext, "(Constant)"); + break; + case PROP_SPHERE: + strcpy(t->proptext, "(Sphere)"); + break; + case PROP_RANDOM: + strcpy(t->proptext, "(Random)"); + break; + default: + t->proptext[0] = '\0'; } } else { - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { td->factor = 1.0; } - t->proptext[0]= '\0'; + t->proptext[0] = '\0'; } } diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c index 9c485e17dc7..7e05fdae364 100644 --- a/source/blender/editors/transform/transform_input.c +++ b/source/blender/editors/transform/transform_input.c @@ -64,18 +64,18 @@ static void InputSpring(TransInfo *UNUSED(t), MouseInput *mi, const int mval[2], /* calculate ratio for shiftkey pos, and for total, and blend these for precision */ dx = (float)(mi->center[0] - mi->precision_mval[0]); dy = (float)(mi->center[1] - mi->precision_mval[1]); - ratio = (float)sqrt( dx*dx + dy*dy); + ratio = sqrtf(dx * dx + dy * dy); - dx= (float)(mi->center[0] - mval[0]); - dy= (float)(mi->center[1] - mval[1]); - precise_ratio = (float)sqrt( dx*dx + dy*dy); + dx = (float)(mi->center[0] - mval[0]); + dy = (float)(mi->center[1] - mval[1]); + precise_ratio = (float)sqrt(dx * dx + dy * dy); ratio = (ratio + (precise_ratio - ratio) / 10.0f) / mi->factor; } else { dx = (float)(mi->center[0] - mval[0]); dy = (float)(mi->center[1] - mval[1]); - ratio = (float)sqrt( dx*dx + dy*dy) / mi->factor; + ratio = sqrtf(dx * dx + dy * dy) / mi->factor; } output[0] = ratio; @@ -98,12 +98,12 @@ static void InputTrackBall(TransInfo *UNUSED(t), MouseInput *mi, const int mval[ { if (mi->precision) { - output[0] = ( mi->imval[1] - mi->precision_mval[1] ) + ( mi->precision_mval[1] - mval[1] ) * 0.1f; - output[1] = ( mi->precision_mval[0] - mi->imval[0] ) + ( mval[0] - mi->precision_mval[0] ) * 0.1f; + output[0] = (mi->imval[1] - mi->precision_mval[1]) + (mi->precision_mval[1] - mval[1]) * 0.1f; + output[1] = (mi->precision_mval[0] - mi->imval[0]) + (mval[0] - mi->precision_mval[0]) * 0.1f; } else { - output[0] = (float)( mi->imval[1] - mval[1] ); - output[1] = (float)( mval[0] - mi->imval[0] ); + output[0] = (float)(mi->imval[1] - mval[1]); + output[1] = (float)(mval[0] - mi->imval[0]); } output[0] *= mi->factor; @@ -191,7 +191,7 @@ static void InputCustomRatio(TransInfo *UNUSED(t), MouseInput *mi, const int mva dx = data[2] - data[0]; dy = data[3] - data[1]; - length = sqrt(dx*dx + dy*dy); + length = sqrt(dx * dx + dy * dy); if (mi->precision) { /* deal with Shift key by adding motion / 10 to motion before shift press */ @@ -199,7 +199,7 @@ static void InputCustomRatio(TransInfo *UNUSED(t), MouseInput *mi, const int mva mdx = (mi->precision_mval[0] + (float)(mval[0] - mi->precision_mval[0]) / 10.0f) - data[2]; mdy = (mi->precision_mval[1] + (float)(mval[1] - mi->precision_mval[1]) / 10.0f) - data[3]; - distance = (length != 0.0) ? (mdx * dx + mdy * dy) / length: 0.0; + distance = (length != 0.0) ? (mdx * dx + mdy * dy) / length : 0.0; } else { int mdx, mdy; @@ -217,11 +217,11 @@ static void InputAngle(TransInfo *UNUSED(t), MouseInput *mi, const int mval[2], { double dx2 = mval[0] - mi->center[0]; double dy2 = mval[1] - mi->center[1]; - double B = sqrt(dx2*dx2+dy2*dy2); + double B = sqrt(dx2 * dx2 + dy2 * dy2); double dx1 = mi->imval[0] - mi->center[0]; double dy1 = mi->imval[1] - mi->center[1]; - double A = sqrt(dx1*dx1+dy1*dy1); + double A = sqrt(dx1 * dx1 + dy1 * dy1); double dx3 = mval[0] - mi->imval[0]; double dy3 = mval[1] - mi->imval[1]; @@ -237,7 +237,7 @@ static void InputAngle(TransInfo *UNUSED(t), MouseInput *mi, const int mval[2], float dphi; dphi = saacos((float)deler); - if ( (dx1*dy2-dx2*dy1)>0.0 ) dphi= -dphi; + if ((dx1 * dy2 - dx2 * dy1) > 0.0) dphi = -dphi; /* If the angle is zero, because of lack of precision close to the 1.0 value in acos * approximate the angle with the opposite side of the normalized triangle @@ -256,12 +256,12 @@ static void InputAngle(TransInfo *UNUSED(t), MouseInput *mi, const int mval[2], dx = dx1 - dx2; dy = dy1 - dy2; - dphi = sqrt(dx*dx + dy*dy); - if ( (dx1*dy2-dx2*dy1)>0.0 ) dphi= -dphi; + dphi = sqrt(dx * dx + dy * dy); + if ((dx1 * dy2 - dx2 * dy1) > 0.0) dphi = -dphi; } if (mi->precision) { - dphi = dphi/30.0f; + dphi = dphi / 30.0f; } /* if no delta angle, don't update initial position */ @@ -295,7 +295,7 @@ static void calcSpringFactor(MouseInput *mi) ((float)(mi->center[0] - mi->imval[0])) * ((float)(mi->center[0] - mi->imval[0]))); if (mi->factor == 0.0f) { - mi->factor= 1.0f; /* prevent Inf */ + mi->factor = 1.0f; /* prevent Inf */ } } @@ -307,68 +307,68 @@ void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode) #if 0 if (mi->data) { MEM_freeN(mi->data); - mi->data= NULL; + mi->data = NULL; } #endif switch (mode) { - case INPUT_VECTOR: - mi->apply = InputVector; - t->helpline = HLP_NONE; - break; - case INPUT_SPRING: - calcSpringFactor(mi); - mi->apply = InputSpring; - t->helpline = HLP_SPRING; - break; - case INPUT_SPRING_FLIP: - calcSpringFactor(mi); - mi->apply = InputSpringFlip; - t->helpline = HLP_SPRING; - break; - case INPUT_ANGLE: - mi->data = MEM_callocN(sizeof(double), "angle accumulator"); - mi->apply = InputAngle; - t->helpline = HLP_ANGLE; - break; - case INPUT_TRACKBALL: - /* factor has to become setting or so */ - mi->factor = 0.01f; - mi->apply = InputTrackBall; - t->helpline = HLP_TRACKBALL; - break; - case INPUT_HORIZONTAL_RATIO: - mi->factor = (float)(mi->center[0] - mi->imval[0]); - mi->apply = InputHorizontalRatio; - t->helpline = HLP_HARROW; - break; - case INPUT_HORIZONTAL_ABSOLUTE: - mi->apply = InputHorizontalAbsolute; - t->helpline = HLP_HARROW; - break; - case INPUT_VERTICAL_RATIO: - mi->apply = InputVerticalRatio; - t->helpline = HLP_VARROW; - break; - case INPUT_VERTICAL_ABSOLUTE: - mi->apply = InputVerticalAbsolute; - t->helpline = HLP_VARROW; - break; - case INPUT_CUSTOM_RATIO: - mi->apply = InputCustomRatio; - t->helpline = HLP_NONE; - break; - case INPUT_NONE: - default: - mi->apply = NULL; - break; + case INPUT_VECTOR: + mi->apply = InputVector; + t->helpline = HLP_NONE; + break; + case INPUT_SPRING: + calcSpringFactor(mi); + mi->apply = InputSpring; + t->helpline = HLP_SPRING; + break; + case INPUT_SPRING_FLIP: + calcSpringFactor(mi); + mi->apply = InputSpringFlip; + t->helpline = HLP_SPRING; + break; + case INPUT_ANGLE: + mi->data = MEM_callocN(sizeof(double), "angle accumulator"); + mi->apply = InputAngle; + t->helpline = HLP_ANGLE; + break; + case INPUT_TRACKBALL: + /* factor has to become setting or so */ + mi->factor = 0.01f; + mi->apply = InputTrackBall; + t->helpline = HLP_TRACKBALL; + break; + case INPUT_HORIZONTAL_RATIO: + mi->factor = (float)(mi->center[0] - mi->imval[0]); + mi->apply = InputHorizontalRatio; + t->helpline = HLP_HARROW; + break; + case INPUT_HORIZONTAL_ABSOLUTE: + mi->apply = InputHorizontalAbsolute; + t->helpline = HLP_HARROW; + break; + case INPUT_VERTICAL_RATIO: + mi->apply = InputVerticalRatio; + t->helpline = HLP_VARROW; + break; + case INPUT_VERTICAL_ABSOLUTE: + mi->apply = InputVerticalAbsolute; + t->helpline = HLP_VARROW; + break; + case INPUT_CUSTOM_RATIO: + mi->apply = InputCustomRatio; + t->helpline = HLP_NONE; + break; + case INPUT_NONE: + default: + mi->apply = NULL; + break; } /* bootstrap mouse input with initial values */ applyMouseInput(t, mi, mi->imval, t->values); } -void setInputPostFct(MouseInput *mi, void (*post)(struct TransInfo *, float [3])) +void setInputPostFct(MouseInput *mi, void (*post)(struct TransInfo *, float[3])) { mi->post = post; } @@ -389,21 +389,21 @@ int handleMouseInput(TransInfo *t, MouseInput *mi, wmEvent *event) int redraw = TREDRAW_NOTHING; switch (event->type) { - case LEFTSHIFTKEY: - case RIGHTSHIFTKEY: - if (event->val == KM_PRESS) { - t->modifiers |= MOD_PRECISION; - /* shift is modifier for higher precision transform - * store the mouse position where the normal movement ended */ - copy_v2_v2_int(mi->precision_mval, event->mval); - mi->precision = 1; - } - else { - t->modifiers &= ~MOD_PRECISION; - mi->precision = 0; - } - redraw = TREDRAW_HARD; - break; + case LEFTSHIFTKEY: + case RIGHTSHIFTKEY: + if (event->val == KM_PRESS) { + t->modifiers |= MOD_PRECISION; + /* shift is modifier for higher precision transform + * store the mouse position where the normal movement ended */ + copy_v2_v2_int(mi->precision_mval, event->mval); + mi->precision = 1; + } + else { + t->modifiers &= ~MOD_PRECISION; + mi->precision = 0; + } + redraw = TREDRAW_HARD; + break; } return redraw; diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 7d0e9dd6005..b3ccf004810 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -84,35 +84,35 @@ /* return codes for select, and drawing flags */ -#define MAN_TRANS_X 1 -#define MAN_TRANS_Y 2 -#define MAN_TRANS_Z 4 -#define MAN_TRANS_C 7 - -#define MAN_ROT_X 8 -#define MAN_ROT_Y 16 -#define MAN_ROT_Z 32 -#define MAN_ROT_V 64 -#define MAN_ROT_T 128 -#define MAN_ROT_C 248 - -#define MAN_SCALE_X 256 -#define MAN_SCALE_Y 512 -#define MAN_SCALE_Z 1024 -#define MAN_SCALE_C 1792 +#define MAN_TRANS_X 1 +#define MAN_TRANS_Y 2 +#define MAN_TRANS_Z 4 +#define MAN_TRANS_C 7 + +#define MAN_ROT_X 8 +#define MAN_ROT_Y 16 +#define MAN_ROT_Z 32 +#define MAN_ROT_V 64 +#define MAN_ROT_T 128 +#define MAN_ROT_C 248 + +#define MAN_SCALE_X 256 +#define MAN_SCALE_Y 512 +#define MAN_SCALE_Z 1024 +#define MAN_SCALE_C 1792 /* color codes */ -#define MAN_RGB 0 -#define MAN_GHOST 1 -#define MAN_MOVECOL 2 +#define MAN_RGB 0 +#define MAN_GHOST 1 +#define MAN_MOVECOL 2 /* transform widget center calc helper for below */ -static void calc_tw_center(Scene *scene, float *co) +static void calc_tw_center(Scene *scene, const float co[3]) { - float *twcent= scene->twcent; - float *min= scene->twmin; - float *max= scene->twmax; + float *twcent = scene->twcent; + float *min = scene->twmin; + float *max = scene->twmax; minmax_v3v3_v3(min, max, co); add_v3_v3(twcent, co); @@ -145,7 +145,7 @@ static void protectflag_to_drawflags(short protectflag, short *drawflags) /* for pose mode */ static void stats_pose(Scene *scene, RegionView3D *rv3d, bPoseChannel *pchan) { - Bone *bone= pchan->bone; + Bone *bone = pchan->bone; if (bone) { if (bone->flag & BONE_TRANSFORM) { @@ -159,7 +159,7 @@ static void stats_pose(Scene *scene, RegionView3D *rv3d, bPoseChannel *pchan) static void stats_editbone(RegionView3D *rv3d, EditBone *ebo) { if (ebo->flag & BONE_EDITMODE_LOCKED) - protectflag_to_drawflags(OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE, &rv3d->twdrawflag); + protectflag_to_drawflags(OB_LOCK_LOC | OB_LOCK_ROT | OB_LOCK_SCALE, &rv3d->twdrawflag); } /* could move into BLI_math however this is only useful for display/editing purposes */ @@ -172,9 +172,9 @@ static void axis_angle_to_gimbal_axis(float gmat[3][3], float axis[3], float ang /* this is an un-scientific method to get a vector to cross with * XYZ intentionally YZX */ - cross_vec[0]= axis[1]; - cross_vec[1]= axis[2]; - cross_vec[2]= axis[0]; + cross_vec[0] = axis[1]; + cross_vec[1] = axis[2]; + cross_vec[2] = axis[0]; /* X-axis */ cross_v3_v3v3(gmat[0], cross_vec, axis); @@ -183,7 +183,7 @@ static void axis_angle_to_gimbal_axis(float gmat[3][3], float axis[3], float ang mul_qt_v3(quat, gmat[0]); /* Y-axis */ - axis_angle_to_quat(quat, axis, M_PI/2.0); + axis_angle_to_quat(quat, axis, M_PI / 2.0); copy_v3_v3(gmat[1], gmat[0]); mul_qt_v3(quat, gmat[1]); @@ -196,14 +196,14 @@ static void axis_angle_to_gimbal_axis(float gmat[3][3], float axis[3], float ang static int test_rotmode_euler(short rotmode) { - return (ELEM(rotmode, ROT_MODE_AXISANGLE, ROT_MODE_QUAT)) ? 0:1; + return (ELEM(rotmode, ROT_MODE_AXISANGLE, ROT_MODE_QUAT)) ? 0 : 1; } int gimbal_axis(Object *ob, float gmat[][3]) { if (ob) { if (ob->mode & OB_MODE_POSE) { - bPoseChannel *pchan= BKE_pose_channel_active(ob); + bPoseChannel *pchan = BKE_pose_channel_active(ob); if (pchan) { float mat[3][3], tmat[3][3], obmat[3][3]; @@ -270,40 +270,40 @@ int gimbal_axis(Object *ob, float gmat[][3]) /* returns total items selected */ int calc_manipulator_stats(const bContext *C) { - ScrArea *sa= CTX_wm_area(C); - ARegion *ar= CTX_wm_region(C); - Scene *scene= CTX_data_scene(C); - Object *obedit= CTX_data_edit_object(C); + ScrArea *sa = CTX_wm_area(C); + ARegion *ar = CTX_wm_region(C); + Scene *scene = CTX_data_scene(C); + Object *obedit = CTX_data_edit_object(C); ToolSettings *ts = CTX_data_tool_settings(C); - View3D *v3d= sa->spacedata.first; - RegionView3D *rv3d= ar->regiondata; + View3D *v3d = sa->spacedata.first; + RegionView3D *rv3d = ar->regiondata; Base *base; - Object *ob= OBACT; - int a, totsel= 0; + Object *ob = OBACT; + int a, totsel = 0; /* transform widget matrix */ unit_m4(rv3d->twmat); - rv3d->twdrawflag= 0xFFFF; + rv3d->twdrawflag = 0xFFFF; /* transform widget centroid/center */ INIT_MINMAX(scene->twmin, scene->twmax); zero_v3(scene->twcent); if (obedit) { - ob= obedit; - if ((ob->lay & v3d->lay)==0) return 0; + ob = obedit; + if ((ob->lay & v3d->lay) == 0) return 0; - if (obedit->type==OB_MESH) { + if (obedit->type == OB_MESH) { BMEditMesh *em = BMEdit_FromObject(obedit); BMEditSelection ese; - float vec[3]= {0, 0, 0}; + float vec[3] = {0, 0, 0}; /* USE LAST SELECTE WITH ACTIVE */ if ((v3d->around == V3D_ACTIVE) && BM_select_history_active_get(em->bm, &ese)) { BM_editselection_center(&ese, vec); calc_tw_center(scene, vec); - totsel= 1; + totsel = 1; } else { BMesh *bm = em->bm; @@ -358,10 +358,10 @@ int calc_manipulator_stats(const bContext *C) } } } /* end editmesh */ - else if (obedit->type==OB_ARMATURE) { - bArmature *arm= obedit->data; + else if (obedit->type == OB_ARMATURE) { + bArmature *arm = obedit->data; EditBone *ebo; - for (ebo= arm->edbo->first; ebo; ebo=ebo->next) { + for (ebo = arm->edbo->first; ebo; ebo = ebo->next) { if (EBONE_VISIBLE(arm, ebo)) { if (ebo->flag & BONE_TIPSEL) { calc_tw_center(scene, ebo->tail); @@ -378,24 +378,24 @@ int calc_manipulator_stats(const bContext *C) } } else if (ELEM(obedit->type, OB_CURVE, OB_SURF)) { - Curve *cu= obedit->data; + Curve *cu = obedit->data; float center[3]; - if (v3d->around==V3D_ACTIVE && ED_curve_actSelection(cu, center)) { - calc_tw_center(scene, center); + if (v3d->around == V3D_ACTIVE && ED_curve_actSelection(cu, center)) { + calc_tw_center(scene, center); totsel++; } else { Nurb *nu; BezTriple *bezt; BPoint *bp; - ListBase *nurbs= BKE_curve_editNurbs_get(cu); + ListBase *nurbs = BKE_curve_editNurbs_get(cu); - nu= nurbs->first; + nu = nurbs->first; while (nu) { if (nu->type == CU_BEZIER) { - bezt= nu->bezt; - a= nu->pntsu; + bezt = nu->bezt; + a = nu->pntsu; while (a--) { /* exceptions * if handles are hidden then only check the center points. @@ -425,8 +425,8 @@ int calc_manipulator_stats(const bContext *C) } } else { - bp= nu->bp; - a= nu->pntsu*nu->pntsv; + bp = nu->bp; + a = nu->pntsu * nu->pntsv; while (a--) { if (bp->f1 & SELECT) { calc_tw_center(scene, bp->vec); @@ -435,31 +435,31 @@ int calc_manipulator_stats(const bContext *C) bp++; } } - nu= nu->next; + nu = nu->next; } } } - else if (obedit->type==OB_MBALL) { - MetaBall *mb = (MetaBall*)obedit->data; + else if (obedit->type == OB_MBALL) { + MetaBall *mb = (MetaBall *)obedit->data; MetaElem *ml /* , *ml_sel=NULL */ /* UNUSED */; - ml= mb->editelems->first; + ml = mb->editelems->first; while (ml) { if (ml->flag & SELECT) { calc_tw_center(scene, &ml->x); /* ml_sel = ml; */ /* UNUSED */ totsel++; } - ml= ml->next; + ml = ml->next; } } - else if (obedit->type==OB_LATTICE) { + else if (obedit->type == OB_LATTICE) { BPoint *bp; - Lattice *lt= obedit->data; + Lattice *lt = obedit->data; - bp= lt->editlatt->latt->def; + bp = lt->editlatt->latt->def; - a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw; + a = lt->editlatt->latt->pntsu * lt->editlatt->latt->pntsv * lt->editlatt->latt->pntsw; while (a--) { if (bp->f1 & SELECT) { calc_tw_center(scene, bp->vec); @@ -471,7 +471,7 @@ int calc_manipulator_stats(const bContext *C) /* selection center */ if (totsel) { - mul_v3_fl(scene->twcent, 1.0f/(float)totsel); // centroid! + mul_v3_fl(scene->twcent, 1.0f / (float)totsel); // centroid! mul_m4_v3(obedit->obmat, scene->twcent); mul_m4_v3(obedit->obmat, scene->twmin); mul_m4_v3(obedit->obmat, scene->twmax); @@ -481,17 +481,17 @@ int calc_manipulator_stats(const bContext *C) bPoseChannel *pchan; int mode = TFM_ROTATION; // mislead counting bones... bah. We don't know the manipulator mode, could be mixed - if ((ob->lay & v3d->lay)==0) return 0; + if ((ob->lay & v3d->lay) == 0) return 0; totsel = count_set_pose_transflags(&mode, 0, ob); if (totsel) { /* use channels to get stats */ - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { stats_pose(scene, rv3d, pchan); } - mul_v3_fl(scene->twcent, 1.0f/(float)totsel); // centroid! + mul_v3_fl(scene->twcent, 1.0f / (float)totsel); // centroid! mul_m4_v3(ob->obmat, scene->twcent); mul_m4_v3(ob->obmat, scene->twmin); mul_m4_v3(ob->obmat, scene->twmax); @@ -501,17 +501,17 @@ int calc_manipulator_stats(const bContext *C) ; } else if (ob && ob->mode & OB_MODE_PARTICLE_EDIT) { - PTCacheEdit *edit= PE_get_current(scene, ob); + PTCacheEdit *edit = PE_get_current(scene, ob); PTCacheEditPoint *point; PTCacheEditKey *ek; int k; if (edit) { point = edit->points; - for (a=0; a<edit->totpoint; a++, point++) { + for (a = 0; a < edit->totpoint; a++, point++) { if (point->flag & PEP_HIDE) continue; - for (k=0, ek=point->keys; k<point->totkey; k++, ek++) { + for (k = 0, ek = point->keys; k < point->totkey; k++, ek++) { if (ek->flag & PEK_SELECT) { calc_tw_center(scene, ek->flag & PEK_USE_WCO ? ek->world_co : ek->co); totsel++; @@ -521,19 +521,19 @@ int calc_manipulator_stats(const bContext *C) /* selection center */ if (totsel) - mul_v3_fl(scene->twcent, 1.0f/(float)totsel); // centroid! + mul_v3_fl(scene->twcent, 1.0f / (float)totsel); // centroid! } } else { /* we need the one selected object, if its not active */ - ob= OBACT; - if (ob && !(ob->flag & SELECT)) ob= NULL; + ob = OBACT; + if (ob && !(ob->flag & SELECT)) ob = NULL; - for (base= scene->base.first; base; base= base->next) { + for (base = scene->base.first; base; base = base->next) { if (TESTBASELIB(v3d, base)) { - if (ob==NULL) - ob= base->object; + if (ob == NULL) + ob = base->object; calc_tw_center(scene, base->object->obmat[3]); protectflag_to_drawflags(base->object->protectflag, &rv3d->twdrawflag); totsel++; @@ -542,7 +542,7 @@ int calc_manipulator_stats(const bContext *C) /* selection center */ if (totsel) { - mul_v3_fl(scene->twcent, 1.0f/(float)totsel); // centroid! + mul_v3_fl(scene->twcent, 1.0f / (float)totsel); // centroid! } } @@ -551,32 +551,32 @@ int calc_manipulator_stats(const bContext *C) switch (v3d->twmode) { - case V3D_MANIP_GLOBAL: - break; /* nothing to do */ + case V3D_MANIP_GLOBAL: + break; /* nothing to do */ - case V3D_MANIP_GIMBAL: - { - float mat[3][3]; - if (gimbal_axis(ob, mat)) { - copy_m4_m3(rv3d->twmat, mat); - break; - } - /* if not gimbal, fall through to normal */ - } - case V3D_MANIP_NORMAL: - if (obedit || ob->mode & OB_MODE_POSE) { + case V3D_MANIP_GIMBAL: + { float mat[3][3]; - ED_getTransformOrientationMatrix(C, mat, (v3d->around == V3D_ACTIVE)); - copy_m4_m3(rv3d->twmat, mat); - break; + if (gimbal_axis(ob, mat)) { + copy_m4_m3(rv3d->twmat, mat); + break; + } + /* if not gimbal, fall through to normal */ } + case V3D_MANIP_NORMAL: + if (obedit || ob->mode & OB_MODE_POSE) { + float mat[3][3]; + ED_getTransformOrientationMatrix(C, mat, (v3d->around == V3D_ACTIVE)); + copy_m4_m3(rv3d->twmat, mat); + break; + } /* no break we define 'normal' as 'local' in Object mode */ - case V3D_MANIP_LOCAL: - copy_m4_m4(rv3d->twmat, ob->obmat); - normalize_m4(rv3d->twmat); - break; + case V3D_MANIP_LOCAL: + copy_m4_m4(rv3d->twmat, ob->obmat); + normalize_m4(rv3d->twmat); + break; - case V3D_MANIP_VIEW: + case V3D_MANIP_VIEW: { float mat[3][3]; copy_m3_m4(mat, rv3d->viewinv); @@ -584,7 +584,7 @@ int calc_manipulator_stats(const bContext *C) copy_m4_m3(rv3d->twmat, mat); } break; - default: /* V3D_MANIP_CUSTOM */ + default: /* V3D_MANIP_CUSTOM */ { float mat[3][3]; applyTransformOrientation(C, mat, NULL); @@ -601,7 +601,7 @@ int calc_manipulator_stats(const bContext *C) /* don't draw axis perpendicular to the view */ static void test_manipulator_axis(const bContext *C) { - RegionView3D *rv3d= CTX_wm_region_view3d(C); + RegionView3D *rv3d = CTX_wm_region_view3d(C); float angle; float vec[3]; @@ -613,7 +613,7 @@ static void test_manipulator_axis(const bContext *C) } angle = rv3d->twangle[0] = RAD2DEGF(angle); if (angle < 5.0f) { - rv3d->twdrawflag &= ~(MAN_TRANS_X|MAN_SCALE_X); + rv3d->twdrawflag &= ~(MAN_TRANS_X | MAN_SCALE_X); } angle = fabs(angle_v3v3(rv3d->twmat[1], vec)); @@ -622,7 +622,7 @@ static void test_manipulator_axis(const bContext *C) } angle = rv3d->twangle[1] = RAD2DEGF(angle); if (angle < 5.0f) { - rv3d->twdrawflag &= ~(MAN_TRANS_Y|MAN_SCALE_Y); + rv3d->twdrawflag &= ~(MAN_TRANS_Y | MAN_SCALE_Y); } angle = fabs(angle_v3v3(rv3d->twmat[2], vec)); @@ -631,7 +631,7 @@ static void test_manipulator_axis(const bContext *C) } angle = rv3d->twangle[2] = RAD2DEGF(angle); if (angle < 5.0f) { - rv3d->twdrawflag &= ~(MAN_TRANS_Z|MAN_SCALE_Z); + rv3d->twdrawflag &= ~(MAN_TRANS_Z | MAN_SCALE_Z); } } @@ -643,7 +643,7 @@ static float screen_aligned(RegionView3D *rv3d, float mat[][4]) glTranslatef(mat[3][0], mat[3][1], mat[3][2]); /* sets view screen aligned */ - glRotatef(-360.0f*saacos(rv3d->viewquat[0])/(float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]); + glRotatef(-360.0f * saacos(rv3d->viewquat[0]) / (float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]); return len_v3(mat[0]); /* draw scale */ } @@ -666,43 +666,43 @@ static void partial_doughnut(float radring, float radhole, int start, int end, i if (start == 0 && end == nrings) do_caps = FALSE; - ring_delta= 2.0f*(float)M_PI/(float)nrings; - side_delta= 2.0f*(float)M_PI/(float)nsides; + ring_delta = 2.0f * (float)M_PI / (float)nrings; + side_delta = 2.0f * (float)M_PI / (float)nsides; - theta= (float)M_PI+0.5f*ring_delta; - cos_theta= (float)cos(theta); - sin_theta= (float)sin(theta); + theta = (float)M_PI + 0.5f * ring_delta; + cos_theta = (float)cos(theta); + sin_theta = (float)sin(theta); - for (i= nrings - 1; i >= 0; i--) { - theta1= theta + ring_delta; - cos_theta1= (float)cos(theta1); - sin_theta1= (float)sin(theta1); + for (i = nrings - 1; i >= 0; i--) { + theta1 = theta + ring_delta; + cos_theta1 = (float)cos(theta1); + sin_theta1 = (float)sin(theta1); - if (do_caps && i==start) { // cap + if (do_caps && i == start) { // cap glBegin(GL_POLYGON); - phi= 0.0; - for (j= nsides; j >= 0; j--) { + phi = 0.0; + for (j = nsides; j >= 0; j--) { float cos_phi, sin_phi, dist; phi += side_delta; - cos_phi= (float)cos(phi); - sin_phi= (float)sin(phi); - dist= radhole + radring * cos_phi; + cos_phi = (float)cos(phi); + sin_phi = (float)sin(phi); + dist = radhole + radring * cos_phi; glVertex3f(cos_theta1 * dist, -sin_theta1 * dist, radring * sin_phi); } glEnd(); } - if (i>=start && i<=end) { + if (i >= start && i <= end) { glBegin(GL_QUAD_STRIP); - phi= 0.0; - for (j= nsides; j >= 0; j--) { + phi = 0.0; + for (j = nsides; j >= 0; j--) { float cos_phi, sin_phi, dist; phi += side_delta; - cos_phi= (float)cos(phi); - sin_phi= (float)sin(phi); - dist= radhole + radring * cos_phi; + cos_phi = (float)cos(phi); + sin_phi = (float)sin(phi); + dist = radhole + radring * cos_phi; glVertex3f(cos_theta1 * dist, -sin_theta1 * dist, radring * sin_phi); glVertex3f(cos_theta * dist, -sin_theta * dist, radring * sin_phi); @@ -710,16 +710,16 @@ static void partial_doughnut(float radring, float radhole, int start, int end, i glEnd(); } - if (do_caps && i==end) { // cap + if (do_caps && i == end) { // cap glBegin(GL_POLYGON); - phi= 0.0; - for (j= nsides; j >= 0; j--) { + phi = 0.0; + for (j = nsides; j >= 0; j--) { float cos_phi, sin_phi, dist; phi -= side_delta; - cos_phi= (float)cos(phi); - sin_phi= (float)sin(phi); - dist= radhole + radring * cos_phi; + cos_phi = (float)cos(phi); + sin_phi = (float)sin(phi); + dist = radhole + radring * cos_phi; glVertex3f(cos_theta * dist, -sin_theta * dist, radring * sin_phi); } @@ -727,9 +727,9 @@ static void partial_doughnut(float radring, float radhole, int start, int end, i } - theta= theta1; - cos_theta= cos_theta1; - sin_theta= sin_theta1; + theta = theta1; + cos_theta = cos_theta1; + sin_theta = sin_theta1; } } @@ -751,43 +751,43 @@ static char axisBlendAngle(float angle) */ static void manipulator_setcolor(View3D *v3d, char axis, int colcode, unsigned char alpha) { - unsigned char col[4]= {0}; - col[3]= alpha; + unsigned char col[4] = {0}; + col[3] = alpha; - if (colcode==MAN_GHOST) { - col[3]= 70; + if (colcode == MAN_GHOST) { + col[3] = 70; } - else if (colcode==MAN_MOVECOL) { + else if (colcode == MAN_MOVECOL) { UI_GetThemeColor3ubv(TH_TRANSFORM, col); } else { switch (axis) { - case 'C': - UI_GetThemeColor3ubv(TH_TRANSFORM, col); - if (v3d->twmode == V3D_MANIP_LOCAL) { - col[0]= col[0]>200?255:col[0]+55; - col[1]= col[1]>200?255:col[1]+55; - col[2]= col[2]>200?255:col[2]+55; - } - else if (v3d->twmode == V3D_MANIP_NORMAL) { - col[0]= col[0]<55?0:col[0]-55; - col[1]= col[1]<55?0:col[1]-55; - col[2]= col[2]<55?0:col[2]-55; - } - break; - case 'X': - col[0]= 220; - break; - case 'Y': - col[1]= 220; - break; - case 'Z': - col[0]= 30; - col[1]= 30; - col[2]= 220; - break; - default: - BLI_assert(!"invalid axis arg"); + case 'C': + UI_GetThemeColor3ubv(TH_TRANSFORM, col); + if (v3d->twmode == V3D_MANIP_LOCAL) { + col[0] = col[0] > 200 ? 255 : col[0] + 55; + col[1] = col[1] > 200 ? 255 : col[1] + 55; + col[2] = col[2] > 200 ? 255 : col[2] + 55; + } + else if (v3d->twmode == V3D_MANIP_NORMAL) { + col[0] = col[0] < 55 ? 0 : col[0] - 55; + col[1] = col[1] < 55 ? 0 : col[1] - 55; + col[2] = col[2] < 55 ? 0 : col[2] - 55; + } + break; + case 'X': + col[0] = 220; + break; + case 'Y': + col[1] = 220; + break; + case 'Z': + col[0] = 30; + col[1] = 30; + col[2] = 220; + break; + default: + BLI_assert(!"invalid axis arg"); } } @@ -836,7 +836,7 @@ static void preOrthoFront(int ortho, float twmat[][4], int axis) orthogonalize_m4(omat, axis); glPushMatrix(); glMultMatrixf(omat); - glFrontFace(is_negative_m4(omat) ? GL_CW:GL_CCW); + glFrontFace(is_negative_m4(omat) ? GL_CW : GL_CCW); } } @@ -853,42 +853,42 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, double plane[4]; float matt[4][4]; float size, unitmat[4][4]; - float cywid= 0.33f*0.01f*(float)U.tw_handlesize; - float cusize= cywid*0.65f; - int arcs= (G.rt!=2); + float cywid = 0.33f * 0.01f * (float)U.tw_handlesize; + float cusize = cywid * 0.65f; + int arcs = (G.rt != 2); int colcode; int ortho; - if (moving) colcode= MAN_MOVECOL; - else colcode= MAN_RGB; + if (moving) colcode = MAN_MOVECOL; + else colcode = MAN_RGB; /* when called while moving in mixed mode, do not draw when... */ - if ((drawflags & MAN_ROT_C)==0) return; + if ((drawflags & MAN_ROT_C) == 0) return; /* Init stuff */ glDisable(GL_DEPTH_TEST); unit_m4(unitmat); - qobj= gluNewQuadric(); + qobj = gluNewQuadric(); gluQuadricDrawStyle(qobj, GLU_FILL); /* prepare for screen aligned draw */ - size= len_v3(rv3d->twmat[0]); + size = len_v3(rv3d->twmat[0]); glPushMatrix(); glTranslatef(rv3d->twmat[3][0], rv3d->twmat[3][1], rv3d->twmat[3][2]); if (arcs) { /* clipplane makes nice handles, calc here because of multmatrix but with translate! */ copy_v3db_v3fl(plane, rv3d->viewinv[2]); - plane[3]= -0.02f*size; // clip just a bit more + plane[3] = -0.02f * size; // clip just a bit more glClipPlane(GL_CLIP_PLANE0, plane); } /* sets view screen aligned */ - glRotatef(-360.0f*saacos(rv3d->viewquat[0])/(float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]); + glRotatef(-360.0f * saacos(rv3d->viewquat[0]) / (float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]); /* Screen aligned help circle */ if (arcs) { - if ((G.f & G_PICKSEL)==0) { + if ((G.f & G_PICKSEL) == 0) { UI_ThemeColorShade(TH_BACK, -30); drawcircball(GL_LINE_LOOP, unitmat[3], size, unitmat); } @@ -899,22 +899,22 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, if (G.f & G_PICKSEL) glLoadName(MAN_ROT_T); UI_ThemeColor(TH_TRANSFORM); - drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f*size, unitmat); + drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f * size, unitmat); } /* Screen aligned view rot circle */ if (drawflags & MAN_ROT_V) { if (G.f & G_PICKSEL) glLoadName(MAN_ROT_V); UI_ThemeColor(TH_TRANSFORM); - drawcircball(GL_LINE_LOOP, unitmat[3], 1.2f*size, unitmat); + drawcircball(GL_LINE_LOOP, unitmat[3], 1.2f * size, unitmat); if (moving) { float vec[3]; - vec[0]= 0; // XXX (float)(t->imval[0] - t->center2d[0]); - vec[1]= 0; // XXX (float)(t->imval[1] - t->center2d[1]); - vec[2]= 0.0f; + vec[0] = 0; // XXX (float)(t->imval[0] - t->center2d[0]); + vec[1] = 0; // XXX (float)(t->imval[1] - t->center2d[1]); + vec[2] = 0.0f; normalize_v3(vec); - mul_v3_fl(vec, 1.2f*size); + mul_v3_fl(vec, 1.2f * size); glBegin(GL_LINES); glVertex3f(0.0f, 0.0f, 0.0f); glVertex3fv(vec); @@ -932,22 +932,22 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, // XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat); if (ortho) { glMultMatrixf(matt); - glFrontFace(is_negative_m4(matt) ? GL_CW:GL_CCW); + glFrontFace(is_negative_m4(matt) ? GL_CW : GL_CCW); } } else { if (ortho) { - glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW:GL_CCW); + glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW : GL_CCW); glMultMatrixf(rv3d->twmat); } } /* axes */ - if (arcs==0) { + if (arcs == 0) { if (!(G.f & G_PICKSEL)) { - if ( (combo & V3D_MANIP_SCALE)==0) { + if ((combo & V3D_MANIP_SCALE) == 0) { /* axis */ - if ( (drawflags & MAN_ROT_X) || (moving && (drawflags & MAN_ROT_Z)) ) { + if ((drawflags & MAN_ROT_X) || (moving && (drawflags & MAN_ROT_Z))) { preOrthoFront(ortho, rv3d->twmat, 2); manipulator_setcolor(v3d, 'X', colcode, 255); glBegin(GL_LINES); @@ -956,7 +956,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, glEnd(); postOrtho(ortho); } - if ( (drawflags & MAN_ROT_Y) || (moving && (drawflags & MAN_ROT_X)) ) { + if ((drawflags & MAN_ROT_Y) || (moving && (drawflags & MAN_ROT_X))) { preOrthoFront(ortho, rv3d->twmat, 0); manipulator_setcolor(v3d, 'Y', colcode, 255); glBegin(GL_LINES); @@ -965,7 +965,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, glEnd(); postOrtho(ortho); } - if ( (drawflags & MAN_ROT_Z) || (moving && (drawflags & MAN_ROT_Y)) ) { + if ((drawflags & MAN_ROT_Z) || (moving && (drawflags & MAN_ROT_Y))) { preOrthoFront(ortho, rv3d->twmat, 1); manipulator_setcolor(v3d, 'Z', colcode, 255); glBegin(GL_LINES); @@ -978,7 +978,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, } } - if (arcs==0 && moving) { + if (arcs == 0 && moving) { /* Z circle */ if (drawflags & MAN_ROT_Z) { @@ -1020,7 +1020,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, preOrthoFront(ortho, rv3d->twmat, 2); if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Z); manipulator_setcolor(v3d, 'Z', colcode, 255); - partial_doughnut(cusize/4.0f, 1.0f, 0, 48, 8, 48); + partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48); postOrtho(ortho); } /* X circle */ @@ -1029,7 +1029,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, if (G.f & G_PICKSEL) glLoadName(MAN_ROT_X); glRotatef(90.0, 0.0, 1.0, 0.0); manipulator_setcolor(v3d, 'X', colcode, 255); - partial_doughnut(cusize/4.0f, 1.0f, 0, 48, 8, 48); + partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48); glRotatef(-90.0, 0.0, 1.0, 0.0); postOrtho(ortho); } @@ -1039,7 +1039,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Y); glRotatef(-90.0, 1.0, 0.0, 0.0); manipulator_setcolor(v3d, 'Y', colcode, 255); - partial_doughnut(cusize/4.0f, 1.0f, 0, 48, 8, 48); + partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48); glRotatef(90.0, 1.0, 0.0, 0.0); postOrtho(ortho); } @@ -1047,7 +1047,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, glDisable(GL_CLIP_PLANE0); } - if (arcs==0) { + if (arcs == 0) { /* Z handle on X axis */ if (drawflags & MAN_ROT_Z) { @@ -1056,7 +1056,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Z); manipulator_setcolor(v3d, 'Z', colcode, 255); - partial_doughnut(0.7f*cusize, 1.0f, 31, 33, 8, 64); + partial_doughnut(0.7f * cusize, 1.0f, 31, 33, 8, 64); glPopMatrix(); postOrtho(ortho); @@ -1071,7 +1071,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, glRotatef(90.0, 1.0, 0.0, 0.0); glRotatef(90.0, 0.0, 0.0, 1.0); - partial_doughnut(0.7f*cusize, 1.0f, 31, 33, 8, 64); + partial_doughnut(0.7f * cusize, 1.0f, 31, 33, 8, 64); glPopMatrix(); postOrtho(ortho); @@ -1086,7 +1086,7 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, glRotatef(-90.0, 0.0, 1.0, 0.0); glRotatef(90.0, 0.0, 0.0, 1.0); - partial_doughnut(0.7f*cusize, 1.0f, 31, 33, 8, 64); + partial_doughnut(0.7f * cusize, 1.0f, 31, 33, 8, 64); glPopMatrix(); postOrtho(ortho); @@ -1104,56 +1104,57 @@ static void draw_manipulator_rotate(View3D *v3d, RegionView3D *rv3d, int moving, static void drawsolidcube(float size) { static float cube[8][3] = { - {-1.0, -1.0, -1.0}, - {-1.0, -1.0, 1.0}, - {-1.0, 1.0, 1.0}, - {-1.0, 1.0, -1.0}, - { 1.0, -1.0, -1.0}, - { 1.0, -1.0, 1.0}, - { 1.0, 1.0, 1.0}, - { 1.0, 1.0, -1.0}, }; + {-1.0, -1.0, -1.0}, + {-1.0, -1.0, 1.0}, + {-1.0, 1.0, 1.0}, + {-1.0, 1.0, -1.0}, + { 1.0, -1.0, -1.0}, + { 1.0, -1.0, 1.0}, + { 1.0, 1.0, 1.0}, + { 1.0, 1.0, -1.0}, + }; float n[3] = {0.0f}; glPushMatrix(); glScalef(size, size, size); glBegin(GL_QUADS); - n[0]= -1.0; + n[0] = -1.0; glNormal3fv(n); glVertex3fv(cube[0]); glVertex3fv(cube[1]); glVertex3fv(cube[2]); glVertex3fv(cube[3]); - n[0]=0; + n[0] = 0; glEnd(); glBegin(GL_QUADS); - n[1]= -1.0; + n[1] = -1.0; glNormal3fv(n); glVertex3fv(cube[0]); glVertex3fv(cube[4]); glVertex3fv(cube[5]); glVertex3fv(cube[1]); - n[1]=0; + n[1] = 0; glEnd(); glBegin(GL_QUADS); - n[0]= 1.0; + n[0] = 1.0; glNormal3fv(n); glVertex3fv(cube[4]); glVertex3fv(cube[7]); glVertex3fv(cube[6]); glVertex3fv(cube[5]); - n[0]=0; + n[0] = 0; glEnd(); glBegin(GL_QUADS); - n[1]= 1.0; + n[1] = 1.0; glNormal3fv(n); glVertex3fv(cube[7]); glVertex3fv(cube[3]); glVertex3fv(cube[2]); glVertex3fv(cube[6]); - n[1]=0; + n[1] = 0; glEnd(); glBegin(GL_QUADS); - n[2]= 1.0; + n[2] = 1.0; glNormal3fv(n); glVertex3fv(cube[1]); glVertex3fv(cube[5]); glVertex3fv(cube[6]); glVertex3fv(cube[2]); - n[2]=0; + n[2] = 0; glEnd(); glBegin(GL_QUADS); - n[2]= -1.0; + n[2] = -1.0; glNormal3fv(n); glVertex3fv(cube[7]); glVertex3fv(cube[4]); glVertex3fv(cube[0]); glVertex3fv(cube[3]); glEnd(); @@ -1164,32 +1165,32 @@ static void drawsolidcube(float size) static void draw_manipulator_scale(View3D *v3d, RegionView3D *rv3d, int moving, int drawflags, int combo, int colcode) { - float cywid= 0.25f*0.01f*(float)U.tw_handlesize; - float cusize= cywid*0.75f, dz; + float cywid = 0.25f * 0.01f * (float)U.tw_handlesize; + float cusize = cywid * 0.75f, dz; /* when called while moving in mixed mode, do not draw when... */ - if ((drawflags & MAN_SCALE_C)==0) return; + if ((drawflags & MAN_SCALE_C) == 0) return; glDisable(GL_DEPTH_TEST); /* not in combo mode */ - if ( (combo & (V3D_MANIP_TRANSLATE|V3D_MANIP_ROTATE))==0) { + if ((combo & (V3D_MANIP_TRANSLATE | V3D_MANIP_ROTATE)) == 0) { float size, unitmat[4][4]; - int shift= 0; // XXX + int shift = 0; // XXX /* center circle, do not add to selection when shift is pressed (planar constraint) */ - if ( (G.f & G_PICKSEL) && shift==0) glLoadName(MAN_SCALE_C); + if ((G.f & G_PICKSEL) && shift == 0) glLoadName(MAN_SCALE_C); manipulator_setcolor(v3d, 'C', colcode, 255); glPushMatrix(); - size= screen_aligned(rv3d, rv3d->twmat); + size = screen_aligned(rv3d, rv3d->twmat); unit_m4(unitmat); - drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f*size, unitmat); + drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f * size, unitmat); glPopMatrix(); - dz= 1.0; + dz = 1.0; } - else dz= 1.0f-4.0f*cusize; + else dz = 1.0f - 4.0f * cusize; if (moving) { float matt[4][4]; @@ -1197,11 +1198,11 @@ static void draw_manipulator_scale(View3D *v3d, RegionView3D *rv3d, int moving, copy_m4_m4(matt, rv3d->twmat); // to copy the parts outside of [3][3] // XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat); glMultMatrixf(matt); - glFrontFace(is_negative_m4(matt) ? GL_CW:GL_CCW); + glFrontFace(is_negative_m4(matt) ? GL_CW : GL_CCW); } else { glMultMatrixf(rv3d->twmat); - glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW:GL_CCW); + glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW : GL_CCW); } /* axis */ @@ -1233,7 +1234,7 @@ static void draw_manipulator_scale(View3D *v3d, RegionView3D *rv3d, int moving, /* if shiftkey, center point as last, for selectbuffer order */ if (G.f & G_PICKSEL) { - int shift= 0; // XXX + int shift = 0; // XXX if (shift) { glTranslatef(0.0, -dz, 0.0); @@ -1254,55 +1255,55 @@ static void draw_manipulator_scale(View3D *v3d, RegionView3D *rv3d, int moving, static void draw_cone(GLUquadricObj *qobj, float len, float width) { - glTranslatef(0.0, 0.0, -0.5f*len); + glTranslatef(0.0, 0.0, -0.5f * len); gluCylinder(qobj, width, 0.0, len, 8, 1); gluQuadricOrientation(qobj, GLU_INSIDE); gluDisk(qobj, 0.0, width, 8, 1); gluQuadricOrientation(qobj, GLU_OUTSIDE); - glTranslatef(0.0, 0.0, 0.5f*len); + glTranslatef(0.0, 0.0, 0.5f * len); } static void draw_cylinder(GLUquadricObj *qobj, float len, float width) { - width*= 0.8f; // just for beauty + width *= 0.8f; // just for beauty - glTranslatef(0.0, 0.0, -0.5f*len); + glTranslatef(0.0, 0.0, -0.5f * len); gluCylinder(qobj, width, width, len, 8, 1); gluQuadricOrientation(qobj, GLU_INSIDE); gluDisk(qobj, 0.0, width, 8, 1); gluQuadricOrientation(qobj, GLU_OUTSIDE); glTranslatef(0.0, 0.0, len); gluDisk(qobj, 0.0, width, 8, 1); - glTranslatef(0.0, 0.0, -0.5f*len); + glTranslatef(0.0, 0.0, -0.5f * len); } static void draw_manipulator_translate(View3D *v3d, RegionView3D *rv3d, int UNUSED(moving), int drawflags, int combo, int colcode) { GLUquadricObj *qobj; - float cylen= 0.01f*(float)U.tw_handlesize; - float cywid= 0.25f*cylen, dz, size; + float cylen = 0.01f * (float)U.tw_handlesize; + float cywid = 0.25f * cylen, dz, size; float unitmat[4][4]; - int shift= 0; // XXX + int shift = 0; // XXX /* when called while moving in mixed mode, do not draw when... */ - if ((drawflags & MAN_TRANS_C)==0) return; + if ((drawflags & MAN_TRANS_C) == 0) return; // XXX if (moving) glTranslatef(t->vec[0], t->vec[1], t->vec[2]); glDisable(GL_DEPTH_TEST); - qobj= gluNewQuadric(); + qobj = gluNewQuadric(); gluQuadricDrawStyle(qobj, GLU_FILL); /* center circle, do not add to selection when shift is pressed (planar constraint) */ - if ( (G.f & G_PICKSEL) && shift==0) glLoadName(MAN_TRANS_C); + if ((G.f & G_PICKSEL) && shift == 0) glLoadName(MAN_TRANS_C); manipulator_setcolor(v3d, 'C', colcode, 255); glPushMatrix(); - size= screen_aligned(rv3d, rv3d->twmat); + size = screen_aligned(rv3d, rv3d->twmat); unit_m4(unitmat); - drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f*size, unitmat); + drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f * size, unitmat); glPopMatrix(); /* and now apply matrix, we move to local matrix drawing */ @@ -1312,14 +1313,14 @@ static void draw_manipulator_translate(View3D *v3d, RegionView3D *rv3d, int UNUS glLoadName(-1); // translate drawn as last, only axis when no combo with scale, or for ghosting - if ((combo & V3D_MANIP_SCALE)==0 || colcode==MAN_GHOST) + if ((combo & V3D_MANIP_SCALE) == 0 || colcode == MAN_GHOST) draw_manipulator_axes(v3d, rv3d, colcode, drawflags & MAN_TRANS_X, drawflags & MAN_TRANS_Y, drawflags & MAN_TRANS_Z); /* offset in combo mode, for rotate a bit more */ - if (combo & (V3D_MANIP_ROTATE)) dz= 1.0f+2.0f*cylen; - else if (combo & (V3D_MANIP_SCALE)) dz= 1.0f+0.5f*cylen; - else dz= 1.0f; + if (combo & (V3D_MANIP_ROTATE)) dz = 1.0f + 2.0f * cylen; + else if (combo & (V3D_MANIP_SCALE)) dz = 1.0f + 0.5f * cylen; + else dz = 1.0f; /* Z Cone */ glTranslatef(0.0, 0.0, dz); @@ -1357,35 +1358,35 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov { GLUquadricObj *qobj; float size; - float cylen= 0.01f*(float)U.tw_handlesize; - float cywid= 0.25f*cylen; + float cylen = 0.01f * (float)U.tw_handlesize; + float cywid = 0.25f * cylen; /* when called while moving in mixed mode, do not draw when... */ - if ((drawflags & MAN_ROT_C)==0) return; + if ((drawflags & MAN_ROT_C) == 0) return; /* prepare for screen aligned draw */ glPushMatrix(); - size= screen_aligned(rv3d, rv3d->twmat); + size = screen_aligned(rv3d, rv3d->twmat); glDisable(GL_DEPTH_TEST); - qobj= gluNewQuadric(); + qobj = gluNewQuadric(); /* Screen aligned view rot circle */ if (drawflags & MAN_ROT_V) { - float unitmat[4][4]= MAT4_UNITY; + float unitmat[4][4] = MAT4_UNITY; if (G.f & G_PICKSEL) glLoadName(MAN_ROT_V); UI_ThemeColor(TH_TRANSFORM); - drawcircball(GL_LINE_LOOP, unitmat[3], 1.2f*size, unitmat); + drawcircball(GL_LINE_LOOP, unitmat[3], 1.2f * size, unitmat); if (moving) { float vec[3]; - vec[0]= 0; // XXX (float)(t->imval[0] - t->center2d[0]); - vec[1]= 0; // XXX (float)(t->imval[1] - t->center2d[1]); - vec[2]= 0.0f; + vec[0] = 0; // XXX (float)(t->imval[0] - t->center2d[0]); + vec[1] = 0; // XXX (float)(t->imval[1] - t->center2d[1]); + vec[2] = 0.0f; normalize_v3(vec); - mul_v3_fl(vec, 1.2f*size); + mul_v3_fl(vec, 1.2f * size); glBegin(GL_LINES); glVertex3f(0.0, 0.0, 0.0); glVertex3fv(vec); @@ -1398,8 +1399,8 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov if (moving) { float matt[4][4]; copy_m4_m4(matt, rv3d->twmat); // to copy the parts outside of [3][3] - // XXX if (t->flag & T_USES_MANIPULATOR) { - // XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat); + // XXX if (t->flag & T_USES_MANIPULATOR) { + // XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat); // XXX } glMultMatrixf(matt); } @@ -1407,13 +1408,13 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov glMultMatrixf(rv3d->twmat); } - glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW:GL_CCW); + glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW : GL_CCW); /* axis */ - if ( (G.f & G_PICKSEL)==0 ) { + if ((G.f & G_PICKSEL) == 0) { // only draw axis when combo didn't draw scale axes - if ((combo & V3D_MANIP_SCALE)==0) + if ((combo & V3D_MANIP_SCALE) == 0) draw_manipulator_axes(v3d, rv3d, colcode, drawflags & MAN_ROT_X, drawflags & MAN_ROT_Y, drawflags & MAN_ROT_Z); /* only has to be set when not in picking */ @@ -1459,15 +1460,15 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov /* main call, does calc centers & orientation too */ /* uses global G.moving */ -static int drawflags= 0xFFFF; // only for the calls below, belongs in scene...? +static int drawflags = 0xFFFF; // only for the calls below, belongs in scene...? void BIF_draw_manipulator(const bContext *C) { - ScrArea *sa= CTX_wm_area(C); - ARegion *ar= CTX_wm_region(C); - Scene *scene= CTX_data_scene(C); - View3D *v3d= sa->spacedata.first; - RegionView3D *rv3d= ar->regiondata; + ScrArea *sa = CTX_wm_area(C); + ARegion *ar = CTX_wm_region(C); + Scene *scene = CTX_data_scene(C); + View3D *v3d = sa->spacedata.first; + RegionView3D *rv3d = ar->regiondata; int totsel; if (!(v3d->twflag & V3D_USE_MANIPULATOR)) return; @@ -1477,38 +1478,38 @@ void BIF_draw_manipulator(const bContext *C) { v3d->twflag &= ~V3D_DRAW_MANIPULATOR; - totsel= calc_manipulator_stats(C); - if (totsel==0) return; + totsel = calc_manipulator_stats(C); + if (totsel == 0) return; v3d->twflag |= V3D_DRAW_MANIPULATOR; /* now we can define center */ switch (v3d->around) { - case V3D_CENTER: - case V3D_ACTIVE: - rv3d->twmat[3][0]= (scene->twmin[0] + scene->twmax[0])/2.0f; - rv3d->twmat[3][1]= (scene->twmin[1] + scene->twmax[1])/2.0f; - rv3d->twmat[3][2]= (scene->twmin[2] + scene->twmax[2])/2.0f; - if (v3d->around==V3D_ACTIVE && scene->obedit==NULL) { - Object *ob= OBACT; - if (ob && !(ob->mode & OB_MODE_POSE)) - copy_v3_v3(rv3d->twmat[3], ob->obmat[3]); - } - break; - case V3D_LOCAL: - case V3D_CENTROID: - copy_v3_v3(rv3d->twmat[3], scene->twcent); - break; - case V3D_CURSOR: - copy_v3_v3(rv3d->twmat[3], give_cursor(scene, v3d)); - break; + case V3D_CENTER: + case V3D_ACTIVE: + rv3d->twmat[3][0] = (scene->twmin[0] + scene->twmax[0]) / 2.0f; + rv3d->twmat[3][1] = (scene->twmin[1] + scene->twmax[1]) / 2.0f; + rv3d->twmat[3][2] = (scene->twmin[2] + scene->twmax[2]) / 2.0f; + if (v3d->around == V3D_ACTIVE && scene->obedit == NULL) { + Object *ob = OBACT; + if (ob && !(ob->mode & OB_MODE_POSE)) + copy_v3_v3(rv3d->twmat[3], ob->obmat[3]); + } + break; + case V3D_LOCAL: + case V3D_CENTROID: + copy_v3_v3(rv3d->twmat[3], scene->twcent); + break; + case V3D_CURSOR: + copy_v3_v3(rv3d->twmat[3], give_cursor(scene, v3d)); + break; } mul_mat3_m4_fl(rv3d->twmat, ED_view3d_pixel_size(rv3d, rv3d->twmat[3]) * U.tw_size * 5.0f); } test_manipulator_axis(C); - drawflags= rv3d->twdrawflag; /* set in calc_manipulator_stats */ + drawflags = rv3d->twdrawflag; /* set in calc_manipulator_stats */ if (v3d->twflag & V3D_DRAW_MANIPULATOR) { @@ -1516,7 +1517,7 @@ void BIF_draw_manipulator(const bContext *C) glEnable(GL_BLEND); if (v3d->twtype & V3D_MANIP_ROTATE) { - if (G.rt==3) { + if (G.rt == 3) { if (G.moving) draw_manipulator_rotate_cyl(v3d, rv3d, 1, drawflags, v3d->twtype, MAN_MOVECOL); else draw_manipulator_rotate_cyl(v3d, rv3d, 0, drawflags, v3d->twtype, MAN_RGB); } @@ -1536,31 +1537,31 @@ void BIF_draw_manipulator(const bContext *C) static int manipulator_selectbuf(ScrArea *sa, ARegion *ar, const int mval[2], float hotspot) { - View3D *v3d= sa->spacedata.first; - RegionView3D *rv3d= ar->regiondata; + View3D *v3d = sa->spacedata.first; + RegionView3D *rv3d = ar->regiondata; rctf rect; - GLuint buffer[64]; // max 4 items per select, so large enuf + GLuint buffer[64]; // max 4 items per select, so large enuf short hits; extern void setwinmatrixview3d(ARegion *ar, View3D *v3d, rctf *rect); // XXX check a bit later on this... (ton) G.f |= G_PICKSEL; - rect.xmin = mval[0]-hotspot; - rect.xmax = mval[0]+hotspot; - rect.ymin = mval[1]-hotspot; - rect.ymax = mval[1]+hotspot; + rect.xmin = mval[0] - hotspot; + rect.xmax = mval[0] + hotspot; + rect.ymin = mval[1] - hotspot; + rect.ymax = mval[1] + hotspot; setwinmatrixview3d(ar, v3d, &rect); mult_m4_m4m4(rv3d->persmat, rv3d->winmat, rv3d->viewmat); glSelectBuffer(64, buffer); glRenderMode(GL_SELECT); - glInitNames(); /* these two calls whatfor? It doesnt work otherwise */ + glInitNames(); /* these two calls whatfor? It doesnt work otherwise */ glPushName(-2); /* do the drawing */ if (v3d->twtype & V3D_MANIP_ROTATE) { - if (G.rt==3) draw_manipulator_rotate_cyl(v3d, rv3d, 0, MAN_ROT_C & rv3d->twdrawflag, v3d->twtype, MAN_RGB); + if (G.rt == 3) draw_manipulator_rotate_cyl(v3d, rv3d, 0, MAN_ROT_C & rv3d->twdrawflag, v3d->twtype, MAN_RGB); else draw_manipulator_rotate(v3d, rv3d, 0, MAN_ROT_C & rv3d->twdrawflag, v3d->twtype); } if (v3d->twtype & V3D_MANIP_SCALE) @@ -1569,37 +1570,37 @@ static int manipulator_selectbuf(ScrArea *sa, ARegion *ar, const int mval[2], fl draw_manipulator_translate(v3d, rv3d, 0, MAN_TRANS_C & rv3d->twdrawflag, v3d->twtype, MAN_RGB); glPopName(); - hits= glRenderMode(GL_RENDER); + hits = glRenderMode(GL_RENDER); G.f &= ~G_PICKSEL; setwinmatrixview3d(ar, v3d, NULL); mult_m4_m4m4(rv3d->persmat, rv3d->winmat, rv3d->viewmat); - if (hits==1) return buffer[3]; - else if (hits>1) { - GLuint val, dep, mindep=0, mindeprot=0, minval=0, minvalrot=0; + if (hits == 1) return buffer[3]; + else if (hits > 1) { + GLuint val, dep, mindep = 0, mindeprot = 0, minval = 0, minvalrot = 0; int a; /* we compare the hits in buffer, but value centers highest */ /* we also store the rotation hits separate (because of arcs) and return hits on other widgets if there are */ - for (a=0; a<hits; a++) { - dep= buffer[4*a + 1]; - val= buffer[4*a + 3]; + for (a = 0; a < hits; a++) { + dep = buffer[4 * a + 1]; + val = buffer[4 * a + 3]; - if (val==MAN_TRANS_C) return MAN_TRANS_C; - else if (val==MAN_SCALE_C) return MAN_SCALE_C; + if (val == MAN_TRANS_C) return MAN_TRANS_C; + else if (val == MAN_SCALE_C) return MAN_SCALE_C; else { if (val & MAN_ROT_C) { - if (minvalrot==0 || dep<mindeprot) { - mindeprot= dep; - minvalrot= val; + if (minvalrot == 0 || dep < mindeprot) { + mindeprot = dep; + minvalrot = val; } } else { - if (minval==0 || dep<mindep) { - mindep= dep; - minval= val; + if (minval == 0 || dep < mindep) { + mindep = dep; + minval = val; } } } @@ -1617,9 +1618,9 @@ static int manipulator_selectbuf(ScrArea *sa, ARegion *ar, const int mval[2], fl /* return 0; nothing happened */ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) { - ScrArea *sa= CTX_wm_area(C); - View3D *v3d= sa->spacedata.first; - ARegion *ar= CTX_wm_region(C); + ScrArea *sa = CTX_wm_area(C); + View3D *v3d = sa->spacedata.first; + ARegion *ar = CTX_wm_region(C); int constraint_axis[3] = {0, 0, 0}; int val; int shift = event->shift; @@ -1631,41 +1632,41 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) RNA_enum_set(op->ptr, "constraint_orientation", v3d->twmode); // find the hotspots first test narrow hotspot - val= manipulator_selectbuf(sa, ar, event->mval, 0.5f*(float)U.tw_hotspot); + val = manipulator_selectbuf(sa, ar, event->mval, 0.5f * (float)U.tw_hotspot); if (val) { // drawflags still global, for drawing call above - drawflags= manipulator_selectbuf(sa, ar, event->mval, 0.2f*(float)U.tw_hotspot); - if (drawflags==0) drawflags= val; + drawflags = manipulator_selectbuf(sa, ar, event->mval, 0.2f * (float)U.tw_hotspot); + if (drawflags == 0) drawflags = val; if (drawflags & MAN_TRANS_C) { switch (drawflags) { - case MAN_TRANS_C: - break; - case MAN_TRANS_X: - if (shift) { - constraint_axis[1] = 1; - constraint_axis[2] = 1; - } - else - constraint_axis[0] = 1; - break; - case MAN_TRANS_Y: - if (shift) { - constraint_axis[0] = 1; - constraint_axis[2] = 1; - } - else - constraint_axis[1] = 1; - break; - case MAN_TRANS_Z: - if (shift) { - constraint_axis[0] = 1; - constraint_axis[1] = 1; - } - else - constraint_axis[2] = 1; - break; + case MAN_TRANS_C: + break; + case MAN_TRANS_X: + if (shift) { + constraint_axis[1] = 1; + constraint_axis[2] = 1; + } + else + constraint_axis[0] = 1; + break; + case MAN_TRANS_Y: + if (shift) { + constraint_axis[0] = 1; + constraint_axis[2] = 1; + } + else + constraint_axis[1] = 1; + break; + case MAN_TRANS_Z: + if (shift) { + constraint_axis[0] = 1; + constraint_axis[1] = 1; + } + else + constraint_axis[2] = 1; + break; } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); WM_operator_name_call(C, "TRANSFORM_OT_translate", WM_OP_INVOKE_DEFAULT, op->ptr); @@ -1673,30 +1674,30 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) } else if (drawflags & MAN_SCALE_C) { switch (drawflags) { - case MAN_SCALE_X: - if (shift) { - constraint_axis[1] = 1; - constraint_axis[2] = 1; - } - else - constraint_axis[0] = 1; - break; - case MAN_SCALE_Y: - if (shift) { - constraint_axis[0] = 1; - constraint_axis[2] = 1; - } - else - constraint_axis[1] = 1; - break; - case MAN_SCALE_Z: - if (shift) { - constraint_axis[0] = 1; - constraint_axis[1] = 1; - } - else - constraint_axis[2] = 1; - break; + case MAN_SCALE_X: + if (shift) { + constraint_axis[1] = 1; + constraint_axis[2] = 1; + } + else + constraint_axis[0] = 1; + break; + case MAN_SCALE_Y: + if (shift) { + constraint_axis[0] = 1; + constraint_axis[2] = 1; + } + else + constraint_axis[1] = 1; + break; + case MAN_SCALE_Z: + if (shift) { + constraint_axis[0] = 1; + constraint_axis[1] = 1; + } + else + constraint_axis[2] = 1; + break; } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); WM_operator_name_call(C, "TRANSFORM_OT_resize", WM_OP_INVOKE_DEFAULT, op->ptr); @@ -1708,15 +1709,15 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) } else if (drawflags & MAN_ROT_C) { switch (drawflags) { - case MAN_ROT_X: - constraint_axis[0] = 1; - break; - case MAN_ROT_Y: - constraint_axis[1] = 1; - break; - case MAN_ROT_Z: - constraint_axis[2] = 1; - break; + case MAN_ROT_X: + constraint_axis[0] = 1; + break; + case MAN_ROT_Y: + constraint_axis[1] = 1; + break; + case MAN_ROT_Z: + constraint_axis[2] = 1; + break; } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); WM_operator_name_call(C, "TRANSFORM_OT_rotate", WM_OP_INVOKE_DEFAULT, op->ptr); @@ -1724,7 +1725,7 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) } } /* after transform, restore drawflags */ - drawflags= 0xFFFF; + drawflags = 0xFFFF; return val; } diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 6fd8e07d34a..81a4c082dcc 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -40,6 +40,7 @@ #include "BKE_context.h" #include "BKE_global.h" #include "BKE_armature.h" +#include "BKE_report.h" #include "WM_api.h" #include "WM_types.h" @@ -51,11 +52,10 @@ #include "transform.h" -typedef struct TransformModeItem -{ +typedef struct TransformModeItem { char *idname; - int mode; - void (*opfunc)(wmOperatorType*); + int mode; + void (*opfunc)(wmOperatorType *); } TransformModeItem; static float VecOne[3] = {1, 1, 1}; @@ -135,6 +135,7 @@ EnumPropertyItem transform_mode_types[] = {TFM_BONESIZE, "BONE_SIZE", 0, "Bonesize", ""}, {TFM_BONE_ENVELOPE, "BONE_ENVELOPE", 0, "Bone_Envelope", ""}, {TFM_CURVE_SHRINKFATTEN, "CURVE_SHRINKFATTEN", 0, "Curve_Shrinkfatten", ""}, + {TFM_MASK_SHRINKFATTEN, "MASK_SHRINKFATTEN", 0, "Mask_Shrinkfatten", ""}, {TFM_BONE_ROLL, "BONE_ROLL", 0, "Bone_Roll", ""}, {TFM_TIME_TRANSLATE, "TIME_TRANSLATE", 0, "Time_Translate", ""}, {TFM_TIME_SLIDE, "TIME_SLIDE", 0, "Time_Slide", ""}, @@ -151,11 +152,11 @@ EnumPropertyItem transform_mode_types[] = static int snap_type_exec(bContext *C, wmOperator *op) { - ToolSettings *ts= CTX_data_tool_settings(C); + ToolSettings *ts = CTX_data_tool_settings(C); ts->snap_mode = RNA_enum_get(op->ptr, "type"); - WM_event_add_notifier(C, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */ + WM_event_add_notifier(C, NC_SCENE | ND_TOOLSETTINGS, NULL); /* header redraw */ return OPERATOR_FINISHED; } @@ -187,7 +188,7 @@ static int select_orientation_exec(bContext *C, wmOperator *op) BIF_selectTransformOrientationValue(C, orientation); - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, CTX_wm_view3d(C)); + WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C)); return OPERATOR_FINISHED; } @@ -197,8 +198,8 @@ static int select_orientation_invoke(bContext *C, wmOperator *UNUSED(op), wmEven uiPopupMenu *pup; uiLayout *layout; - pup= uiPupMenuBegin(C, "Orientation", ICON_NONE); - layout= uiPupMenuLayout(pup); + pup = uiPupMenuBegin(C, "Orientation", ICON_NONE); + layout = uiPupMenuLayout(pup); uiItemsEnumO(layout, "TRANSFORM_OT_select_orientation", "orientation"); uiPupMenuEnd(C, pup); @@ -220,7 +221,7 @@ static void TRANSFORM_OT_select_orientation(struct wmOperatorType *ot) ot->exec = select_orientation_exec; ot->poll = ED_operator_view3d_active; - prop= RNA_def_property(ot->srna, "orientation", PROP_ENUM, PROP_NONE); + prop = RNA_def_property(ot->srna, "orientation", PROP_ENUM, PROP_NONE); RNA_def_property_ui_text(prop, "Orientation", "Transformation orientation"); RNA_def_enum_funcs(prop, rna_TransformOrientation_itemf); } @@ -233,8 +234,8 @@ static int delete_orientation_exec(bContext *C, wmOperator *UNUSED(op)) BIF_removeTransformOrientationIndex(C, selected_index); - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, CTX_wm_view3d(C)); - WM_event_add_notifier(C, NC_SCENE|NA_EDITED, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C)); + WM_event_add_notifier(C, NC_SCENE | NA_EDITED, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -282,10 +283,15 @@ static int create_orientation_exec(bContext *C, wmOperator *op) RNA_string_get(op->ptr, "name", name); + if (use && !CTX_wm_view3d(C)) { + BKE_report(op->reports, RPT_ERROR, "Create Orientation \"use\" parameter only valid in a 3dView context"); + return OPERATOR_CANCELLED; + } + BIF_createTransformOrientation(C, op->reports, name, use, overwrite); - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, CTX_wm_view3d(C)); - WM_event_add_notifier(C, NC_SCENE|NA_EDITED, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C)); + WM_event_add_notifier(C, NC_SCENE | NA_EDITED, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -301,13 +307,13 @@ static void TRANSFORM_OT_create_orientation(struct wmOperatorType *ot) ot->name = "Create Orientation"; ot->description = "Create transformation orientation from selection"; ot->idname = "TRANSFORM_OT_create_orientation"; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* api callbacks */ ot->invoke = create_orientation_invoke; ot->exec = create_orientation_exec; ot->poll = ED_operator_areaactive; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_string(ot->srna, "name", "", MAX_NAME, "Name", "Text to insert at the cursor position"); RNA_def_boolean(ot->srna, "use", 0, "Use after creation", "Select orientation after its creation"); @@ -372,9 +378,9 @@ static int transform_modal(bContext *C, wmOperator *op, wmEvent *event) #endif /* XXX insert keys are called here, and require context */ - t->context= C; + t->context = C; exit_code = transformEvent(t, event); - t->context= NULL; + t->context = NULL; transformApply(C, t); @@ -418,7 +424,7 @@ static int transform_exec(bContext *C, wmOperator *op) transformops_exit(C, op); - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); return OPERATOR_FINISHED; } @@ -447,7 +453,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) PropertyRNA *prop; if (flags & P_AXIS) { - prop= RNA_def_property(ot->srna, "axis", PROP_FLOAT, PROP_DIRECTION); + prop = RNA_def_property(ot->srna, "axis", PROP_FLOAT, PROP_DIRECTION); RNA_def_property_array(prop, 3); /* Make this not hidden when there's a nice axis selection widget */ RNA_def_property_flag(prop, PROP_HIDDEN); @@ -457,7 +463,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) if (flags & P_CONSTRAINT) { RNA_def_boolean_vector(ot->srna, "constraint_axis", 3, NULL, "Constraint Axis", ""); - prop= RNA_def_property(ot->srna, "constraint_orientation", PROP_ENUM, PROP_NONE); + prop = RNA_def_property(ot->srna, "constraint_orientation", PROP_ENUM, PROP_NONE); RNA_def_property_ui_text(prop, "Orientation", "Transformation orientation"); RNA_def_enum_funcs(prop, rna_TransformOrientation_itemf); @@ -476,19 +482,19 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) } if (flags & P_SNAP) { - prop= RNA_def_boolean(ot->srna, "snap", 0, "Use Snapping Options", ""); + prop = RNA_def_boolean(ot->srna, "snap", 0, "Use Snapping Options", ""); RNA_def_property_flag(prop, PROP_HIDDEN); if (flags & P_GEO_SNAP) { - prop= RNA_def_enum(ot->srna, "snap_target", snap_target_items, 0, "Target", ""); + prop = RNA_def_enum(ot->srna, "snap_target", snap_target_items, 0, "Target", ""); RNA_def_property_flag(prop, PROP_HIDDEN); - prop= RNA_def_float_vector(ot->srna, "snap_point", 3, NULL, -FLT_MAX, FLT_MAX, "Point", "", -FLT_MAX, FLT_MAX); + prop = RNA_def_float_vector(ot->srna, "snap_point", 3, NULL, -FLT_MAX, FLT_MAX, "Point", "", -FLT_MAX, FLT_MAX); RNA_def_property_flag(prop, PROP_HIDDEN); if (flags & P_ALIGN_SNAP) { - prop= RNA_def_boolean(ot->srna, "snap_align", 0, "Align with Point Normal", ""); + prop = RNA_def_boolean(ot->srna, "snap_align", 0, "Align with Point Normal", ""); RNA_def_property_flag(prop, PROP_HIDDEN); - prop= RNA_def_float_vector(ot->srna, "snap_normal", 3, NULL, -FLT_MAX, FLT_MAX, "Normal", "", -FLT_MAX, FLT_MAX); + prop = RNA_def_float_vector(ot->srna, "snap_normal", 3, NULL, -FLT_MAX, FLT_MAX, "Normal", "", -FLT_MAX, FLT_MAX); RNA_def_property_flag(prop, PROP_HIDDEN); } } @@ -513,7 +519,7 @@ static void TRANSFORM_OT_translate(struct wmOperatorType *ot) ot->name = "Translate"; ot->description = "Translate (move) selected items"; ot->idname = OP_TRANSLATION; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -524,7 +530,7 @@ static void TRANSFORM_OT_translate(struct wmOperatorType *ot) RNA_def_float_vector_xyz(ot->srna, "value", 3, NULL, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX); - Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_ALIGN_SNAP|P_OPTIONS); + Transform_Properties(ot, P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_ALIGN_SNAP | P_OPTIONS); } static void TRANSFORM_OT_resize(struct wmOperatorType *ot) @@ -533,7 +539,7 @@ static void TRANSFORM_OT_resize(struct wmOperatorType *ot) ot->name = "Resize"; ot->description = "Scale (resize) selected items"; ot->idname = OP_RESIZE; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -544,7 +550,7 @@ static void TRANSFORM_OT_resize(struct wmOperatorType *ot) RNA_def_float_vector(ot->srna, "value", 3, VecOne, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX); - Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_GEO_SNAP|P_OPTIONS); + Transform_Properties(ot, P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP | P_OPTIONS); } static int skin_resize_poll(bContext *C) @@ -563,7 +569,7 @@ static void TRANSFORM_OT_skin_resize(struct wmOperatorType *ot) ot->name = "Skin Resize"; ot->description = "Scale selected vertices' skin radii"; ot->idname = OP_SKIN_RESIZE; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -574,7 +580,7 @@ static void TRANSFORM_OT_skin_resize(struct wmOperatorType *ot) RNA_def_float_vector(ot->srna, "value", 3, VecOne, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX); - Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_GEO_SNAP|P_OPTIONS); + Transform_Properties(ot, P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP | P_OPTIONS); } static void TRANSFORM_OT_trackball(struct wmOperatorType *ot) @@ -583,7 +589,7 @@ static void TRANSFORM_OT_trackball(struct wmOperatorType *ot) ot->name = "Trackball"; ot->description = "Trackball style rotation of selected items"; ot->idname = OP_TRACKBALL; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -594,7 +600,7 @@ static void TRANSFORM_OT_trackball(struct wmOperatorType *ot) RNA_def_float_vector(ot->srna, "value", 2, VecOne, -FLT_MAX, FLT_MAX, "Angle", "", -FLT_MAX, FLT_MAX); - Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); + Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP); } static void TRANSFORM_OT_rotate(struct wmOperatorType *ot) @@ -603,7 +609,7 @@ static void TRANSFORM_OT_rotate(struct wmOperatorType *ot) ot->name = "Rotate"; ot->description = "Rotate selected items"; ot->idname = OP_ROTATION; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -612,9 +618,9 @@ static void TRANSFORM_OT_rotate(struct wmOperatorType *ot) ot->cancel = transform_cancel; ot->poll = ED_operator_screenactive; - RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI*2, M_PI*2); + RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI * 2, M_PI * 2); - Transform_Properties(ot, P_AXIS|P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_GEO_SNAP); + Transform_Properties(ot, P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP); } static void TRANSFORM_OT_tilt(struct wmOperatorType *ot) @@ -626,7 +632,7 @@ static void TRANSFORM_OT_tilt(struct wmOperatorType *ot) * "Specify an extra axis rotation for selected vertices of 3d curve" */ ot->description = "Tilt selected control vertices of 3d curve"; ot->idname = OP_TILT; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -635,9 +641,9 @@ static void TRANSFORM_OT_tilt(struct wmOperatorType *ot) ot->cancel = transform_cancel; ot->poll = ED_operator_editcurve_3d; - RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI*2, M_PI*2); + RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI * 2, M_PI * 2); - Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_SNAP); + Transform_Properties(ot, P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_SNAP); } static void TRANSFORM_OT_warp(struct wmOperatorType *ot) @@ -646,7 +652,7 @@ static void TRANSFORM_OT_warp(struct wmOperatorType *ot) ot->name = "Warp"; ot->description = "Warp selected items around the cursor"; ot->idname = OP_WARP; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -655,9 +661,9 @@ static void TRANSFORM_OT_warp(struct wmOperatorType *ot) ot->cancel = transform_cancel; ot->poll = ED_operator_screenactive; - RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI*2, M_PI*2); + RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI * 2, M_PI * 2); - Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); + Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP); // XXX Warp axis? } @@ -667,7 +673,7 @@ static void TRANSFORM_OT_shear(struct wmOperatorType *ot) ot->name = "Shear"; ot->description = "Shear selected items along the horizontal screen axis"; ot->idname = OP_SHEAR; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -678,7 +684,7 @@ static void TRANSFORM_OT_shear(struct wmOperatorType *ot) RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Offset", "", -FLT_MAX, FLT_MAX); - Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); + Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP); // XXX Shear axis? } @@ -688,7 +694,7 @@ static void TRANSFORM_OT_push_pull(struct wmOperatorType *ot) ot->name = "Push/Pull"; ot->description = "Push/Pull selected items"; ot->idname = OP_PUSH_PULL; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -699,7 +705,7 @@ static void TRANSFORM_OT_push_pull(struct wmOperatorType *ot) RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Distance", "", -FLT_MAX, FLT_MAX); - Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); + Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP); } static void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot) @@ -708,7 +714,7 @@ static void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot) ot->name = "Shrink/Fatten"; ot->description = "Shrink/fatten selected vertices along normals"; ot->idname = OP_SHRINK_FATTEN; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -719,7 +725,7 @@ static void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot) RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Offset", "", -FLT_MAX, FLT_MAX); - Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); + Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP); } static void TRANSFORM_OT_tosphere(struct wmOperatorType *ot) @@ -729,7 +735,7 @@ static void TRANSFORM_OT_tosphere(struct wmOperatorType *ot) //added "around mesh center" to differentiate between "MESH_OT_vertices_to_sphere()" ot->description = "Move selected vertices outward in a spherical shape around mesh center"; ot->idname = OP_TOSPHERE; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -740,7 +746,7 @@ static void TRANSFORM_OT_tosphere(struct wmOperatorType *ot) RNA_def_float_factor(ot->srna, "value", 0, 0, 1, "Factor", "", 0, 1); - Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); + Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP); } static void TRANSFORM_OT_mirror(struct wmOperatorType *ot) @@ -749,7 +755,7 @@ static void TRANSFORM_OT_mirror(struct wmOperatorType *ot) ot->name = "Mirror"; ot->description = "Mirror selected vertices around one or more axes"; ot->idname = OP_MIRROR; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -758,7 +764,7 @@ static void TRANSFORM_OT_mirror(struct wmOperatorType *ot) ot->cancel = transform_cancel; ot->poll = ED_operator_screenactive; - Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL); + Transform_Properties(ot, P_CONSTRAINT | P_PROPORTIONAL); } static void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot) @@ -767,7 +773,7 @@ static void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot) ot->name = "Edge Slide"; ot->description = "Slide an edge loop along a mesh"; ot->idname = OP_EDGE_SLIDE; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -778,7 +784,7 @@ static void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot) RNA_def_float_factor(ot->srna, "value", 0, -1.0f, 1.0f, "Factor", "", -1.0f, 1.0f); - Transform_Properties(ot, P_MIRROR|P_SNAP|P_CORRECT_UV); + Transform_Properties(ot, P_MIRROR | P_SNAP | P_CORRECT_UV); } static void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot) @@ -787,7 +793,7 @@ static void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot) ot->name = "Edge Crease"; ot->description = "Change the crease of edges"; ot->idname = OP_EDGE_CREASE; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -807,7 +813,7 @@ static void TRANSFORM_OT_edge_bevelweight(struct wmOperatorType *ot) ot->name = "Edge Bevel Weight"; ot->description = "Change the bevel weight of edges"; ot->idname = OP_EDGE_BWEIGHT; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -827,7 +833,7 @@ static void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot) ot->name = "Sequence Slide"; ot->description = "Slide a sequence strip in time"; ot->idname = OP_SEQ_SLIDE; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -849,7 +855,7 @@ static void TRANSFORM_OT_transform(struct wmOperatorType *ot) ot->name = "Transform"; ot->description = "Transform selected items by mode type"; ot->idname = "TRANSFORM_OT_transform"; - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; /* api callbacks */ ot->invoke = transform_invoke; @@ -858,12 +864,12 @@ static void TRANSFORM_OT_transform(struct wmOperatorType *ot) ot->cancel = transform_cancel; ot->poll = ED_operator_screenactive; - prop= RNA_def_enum(ot->srna, "mode", transform_mode_types, TFM_TRANSLATION, "Mode", ""); + prop = RNA_def_enum(ot->srna, "mode", transform_mode_types, TFM_TRANSLATION, "Mode", ""); RNA_def_property_flag(prop, PROP_HIDDEN); RNA_def_float_vector(ot->srna, "value", 4, NULL, -FLT_MAX, FLT_MAX, "Values", "", -FLT_MAX, FLT_MAX); - Transform_Properties(ot, P_AXIS|P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_ALIGN_SNAP); + Transform_Properties(ot, P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_ALIGN_SNAP); } void transform_operatortypes(void) @@ -913,13 +919,13 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac WM_keymap_add_item(keymap, OP_WARP, WKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, OP_TOSPHERE, SKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0); + WM_keymap_add_item(keymap, OP_TOSPHERE, SKEY, KM_PRESS, KM_ALT | KM_SHIFT, 0); - WM_keymap_add_item(keymap, OP_SHEAR, SKEY, KM_PRESS, KM_ALT|KM_CTRL|KM_SHIFT, 0); + WM_keymap_add_item(keymap, OP_SHEAR, SKEY, KM_PRESS, KM_ALT | KM_CTRL | KM_SHIFT, 0); WM_keymap_add_item(keymap, "TRANSFORM_OT_select_orientation", SPACEKEY, KM_PRESS, KM_ALT, 0); - kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_create_orientation", SPACEKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); + kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_create_orientation", SPACEKEY, KM_PRESS, KM_CTRL | KM_ALT, 0); RNA_boolean_set(kmi->ptr, "use", TRUE); WM_keymap_add_item(keymap, OP_MIRROR, MKEY, KM_PRESS, KM_CTRL, 0); @@ -927,12 +933,12 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", TABKEY, KM_PRESS, KM_SHIFT, 0); RNA_string_set(kmi->ptr, "data_path", "tool_settings.use_snap"); - WM_keymap_add_item(keymap, "TRANSFORM_OT_snap_type", TABKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0); + WM_keymap_add_item(keymap, "TRANSFORM_OT_snap_type", TABKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0); kmi = WM_keymap_add_item(keymap, OP_TRANSLATION, TKEY, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "texture_space", TRUE); - kmi = WM_keymap_add_item(keymap, OP_RESIZE, TKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0); + kmi = WM_keymap_add_item(keymap, OP_RESIZE, TKEY, KM_PRESS, KM_SHIFT | KM_ALT, 0); RNA_boolean_set(kmi->ptr, "texture_space", TRUE); WM_keymap_add_item(keymap, OP_SKIN_RESIZE, AKEY, KM_PRESS, KM_CTRL, 0); @@ -1014,7 +1020,7 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac WM_keymap_add_item(keymap, OP_RESIZE, SKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, OP_SHEAR, SKEY, KM_PRESS, KM_ALT|KM_CTRL|KM_SHIFT, 0); + WM_keymap_add_item(keymap, OP_SHEAR, SKEY, KM_PRESS, KM_ALT | KM_CTRL | KM_SHIFT, 0); WM_keymap_add_item(keymap, "TRANSFORM_OT_mirror", MKEY, KM_PRESS, KM_CTRL, 0); @@ -1025,6 +1031,7 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac WM_keymap_add_item(keymap, OP_TRANSLATION, GKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, OP_TRANSLATION, EVT_TWEAK_S, KM_ANY, 0, 0); WM_keymap_add_item(keymap, OP_RESIZE, SKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, OP_ROTATION, RKEY, KM_PRESS, 0, 0); break; default: break; diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 91f62291450..97fc173f9a1 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -75,16 +75,16 @@ void BIF_clearTransformOrientation(bContext *C) // Need to loop over all view3d if (v3d && v3d->twmode >= V3D_MANIP_CUSTOM) { - v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */ + v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */ } } -static TransformOrientation* findOrientationName(ListBase *lb, const char *name) +static TransformOrientation *findOrientationName(ListBase *lb, const char *name) { - TransformOrientation *ts= NULL; + TransformOrientation *ts = NULL; - for (ts= lb->first; ts; ts = ts->next) { - if (strncmp(ts->name, name, sizeof(ts->name)-1) == 0) { + for (ts = lb->first; ts; ts = ts->next) { + if (strncmp(ts->name, name, sizeof(ts->name) - 1) == 0) { return ts; } } @@ -115,7 +115,7 @@ void BIF_createTransformOrientation(bContext *C, ReportList *reports, char *name ts = createBoneSpace(C, reports, name, overwrite); } else if (ob && (ob->mode & OB_MODE_POSE)) { - ts = createBoneSpace(C, reports, name, overwrite); + ts = createBoneSpace(C, reports, name, overwrite); } else { ts = createObjectSpace(C, reports, name, overwrite); @@ -143,7 +143,7 @@ TransformOrientation *createObjectSpace(bContext *C, ReportList *UNUSED(reports) /* use object name if no name is given */ if (name[0] == 0) { - strncpy(name, ob->id.name+2, MAX_ID_NAME-2); + strncpy(name, ob->id.name + 2, MAX_ID_NAME - 2); } return addMatrixSpace(C, mat, name, overwrite); @@ -262,7 +262,7 @@ int createSpaceNormalTangent(float mat[3][3], float normal[3], float tangent[3]) return 1; } -TransformOrientation* addMatrixSpace(bContext *C, float mat[3][3], char name[], int overwrite) +TransformOrientation *addMatrixSpace(bContext *C, float mat[3][3], char name[], int overwrite) { ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces; TransformOrientation *ts = NULL; @@ -301,7 +301,7 @@ void BIF_removeTransformOrientation(bContext *C, TransformOrientation *target) // Transform_fix_me NEED TO DO THIS FOR ALL VIEW3D if (selected_index == i) { - v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */ + v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */ } else if (selected_index > i) { v3d->twmode--; @@ -318,7 +318,7 @@ void BIF_removeTransformOrientation(bContext *C, TransformOrientation *target) void BIF_removeTransformOrientationIndex(bContext *C, int index) { ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces; - TransformOrientation *ts= BLI_findlink(transform_spaces, index); + TransformOrientation *ts = BLI_findlink(transform_spaces, index); if (ts) { View3D *v3d = CTX_wm_view3d(C); @@ -327,7 +327,7 @@ void BIF_removeTransformOrientationIndex(bContext *C, int index) // Transform_fix_me NEED TO DO THIS FOR ALL VIEW3D if (selected_index == index) { - v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */ + v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */ } else if (selected_index > index) { v3d->twmode--; @@ -365,15 +365,15 @@ EnumPropertyItem *BIF_enumTransformOrientation(bContext *C) { Scene *scene; ListBase *transform_spaces; - TransformOrientation *ts= NULL; + TransformOrientation *ts = NULL; - EnumPropertyItem global = {V3D_MANIP_GLOBAL, "GLOBAL", 0, "Global", ""}; + EnumPropertyItem global = {V3D_MANIP_GLOBAL, "GLOBAL", 0, "Global", ""}; EnumPropertyItem normal = {V3D_MANIP_NORMAL, "NORMAL", 0, "Normal", ""}; EnumPropertyItem local = {V3D_MANIP_LOCAL, "LOCAL", 0, "Local", ""}; EnumPropertyItem view = {V3D_MANIP_VIEW, "VIEW", 0, "View", ""}; EnumPropertyItem tmp = {0, "", 0, "", ""}; - EnumPropertyItem *item= NULL; - int i = V3D_MANIP_CUSTOM, totitem= 0; + EnumPropertyItem *item = NULL; + int i = V3D_MANIP_CUSTOM, totitem = 0; RNA_enum_item_add(&item, &totitem, &global); RNA_enum_item_add(&item, &totitem, &normal); @@ -381,7 +381,7 @@ EnumPropertyItem *BIF_enumTransformOrientation(bContext *C) RNA_enum_item_add(&item, &totitem, &view); if (C) { - scene= CTX_data_scene(C); + scene = CTX_data_scene(C); if (scene) { transform_spaces = &scene->transform_spaces; @@ -394,7 +394,7 @@ EnumPropertyItem *BIF_enumTransformOrientation(bContext *C) for (; ts; ts = ts->next) { tmp.identifier = "CUSTOM"; - tmp.name= ts->name; + tmp.name = ts->name; tmp.value = i++; RNA_enum_item_add(&item, &totitem, &tmp); } @@ -404,9 +404,9 @@ EnumPropertyItem *BIF_enumTransformOrientation(bContext *C) return item; } -const char * BIF_menustringTransformOrientation(const bContext *C, const char *title) +const char *BIF_menustringTransformOrientation(const bContext *C, const char *title) { - const char* menu = IFACE_("%t|Global%x0|Local%x1|Gimbal%x4|Normal%x2|View%x3"); + const char *menu = IFACE_("%t|Global%x0|Local%x1|Gimbal%x4|Normal%x2|View%x3"); ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces; TransformOrientation *ts; int i = V3D_MANIP_CUSTOM; @@ -459,7 +459,7 @@ void applyTransformOrientation(const bContext *C, float mat[3][3], char *name) break; } } - } + } } static int count_bone_select(bArmature *arm, ListBase *lb, int do_it) @@ -468,7 +468,7 @@ static int count_bone_select(bArmature *arm, ListBase *lb, int do_it) int do_next; int total = 0; - for (bone= lb->first; bone; bone= bone->next) { + for (bone = lb->first; bone; bone = bone->next) { bone->flag &= ~BONE_TRANSFORM; do_next = do_it; if (do_it) { @@ -476,7 +476,7 @@ static int count_bone_select(bArmature *arm, ListBase *lb, int do_it) if (bone->flag & BONE_SELECTED) { bone->flag |= BONE_TRANSFORM; total++; - do_next = FALSE; // no transform on children if one parent bone is selected + do_next = FALSE; // no transform on children if one parent bone is selected } } } @@ -493,55 +493,55 @@ void initTransformOrientation(bContext *C, TransInfo *t) Object *obedit = CTX_data_active_object(C); switch (t->current_orientation) { - case V3D_MANIP_GLOBAL: - unit_m3(t->spacemtx); - strcpy(t->spacename, "global"); - break; - - case V3D_MANIP_GIMBAL: - unit_m3(t->spacemtx); - if (gimbal_axis(ob, t->spacemtx)) { - strcpy(t->spacename, "gimbal"); + case V3D_MANIP_GLOBAL: + unit_m3(t->spacemtx); + strcpy(t->spacename, "global"); break; - } + + case V3D_MANIP_GIMBAL: + unit_m3(t->spacemtx); + if (gimbal_axis(ob, t->spacemtx)) { + strcpy(t->spacename, "gimbal"); + break; + } /* no gimbal fallthrough to normal */ - case V3D_MANIP_NORMAL: - if (obedit || (ob && ob->mode & OB_MODE_POSE)) { - strcpy(t->spacename, "normal"); - ED_getTransformOrientationMatrix(C, t->spacemtx, (v3d->around == V3D_ACTIVE)); - break; - } + case V3D_MANIP_NORMAL: + if (obedit || (ob && ob->mode & OB_MODE_POSE)) { + strcpy(t->spacename, "normal"); + ED_getTransformOrientationMatrix(C, t->spacemtx, (v3d->around == V3D_ACTIVE)); + break; + } /* no break we define 'normal' as 'local' in Object mode */ - case V3D_MANIP_LOCAL: - strcpy(t->spacename, "local"); + case V3D_MANIP_LOCAL: + strcpy(t->spacename, "local"); - if (ob) { - copy_m3_m4(t->spacemtx, ob->obmat); - normalize_m3(t->spacemtx); - } - else { - unit_m3(t->spacemtx); - } + if (ob) { + copy_m3_m4(t->spacemtx, ob->obmat); + normalize_m3(t->spacemtx); + } + else { + unit_m3(t->spacemtx); + } - break; + break; - case V3D_MANIP_VIEW: - if (t->ar->regiontype == RGN_TYPE_WINDOW) { - RegionView3D *rv3d = t->ar->regiondata; - float mat[3][3]; - - strcpy(t->spacename, "view"); - copy_m3_m4(mat, rv3d->viewinv); - normalize_m3(mat); - copy_m3_m3(t->spacemtx, mat); - } - else { - unit_m3(t->spacemtx); - } - break; - default: /* V3D_MANIP_CUSTOM */ - applyTransformOrientation(C, t->spacemtx, t->spacename); - break; + case V3D_MANIP_VIEW: + if (t->ar->regiontype == RGN_TYPE_WINDOW) { + RegionView3D *rv3d = t->ar->regiondata; + float mat[3][3]; + + strcpy(t->spacename, "view"); + copy_m3_m4(mat, rv3d->viewinv); + normalize_m3(mat); + copy_m3_m3(t->spacemtx, mat); + } + else { + unit_m3(t->spacemtx); + } + break; + default: /* V3D_MANIP_CUSTOM */ + applyTransformOrientation(C, t->spacemtx, t->spacename); + break; } } @@ -549,7 +549,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], { Scene *scene = CTX_data_scene(C); View3D *v3d = CTX_wm_view3d(C); - Object *obedit= CTX_data_edit_object(C); + Object *obedit = CTX_data_edit_object(C); Base *base; Object *ob = OBACT; int result = ORIENTATION_NONE; @@ -566,14 +566,14 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], invert_m3_m3(mat, imat); transpose_m3(mat); - ob= obedit; + ob = obedit; - if (ob->type==OB_MESH) { - Mesh *me= ob->data; + if (ob->type == OB_MESH) { + Mesh *me = ob->data; BMEditMesh *em = me->edit_btmesh; BMVert *eve; BMEditSelection ese; - float vec[3]= {0, 0, 0}; + float vec[3] = {0, 0, 0}; /* USE LAST SELECTED WITH ACTIVE */ if (activeOnly && BM_select_history_active_get(em->bm, &ese)) { @@ -711,17 +711,17 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], } } /* end editmesh */ else if (ELEM(obedit->type, OB_CURVE, OB_SURF)) { - Curve *cu= obedit->data; + Curve *cu = obedit->data; Nurb *nu; BezTriple *bezt; int a; - ListBase *nurbs= BKE_curve_editNurbs_get(cu); + ListBase *nurbs = BKE_curve_editNurbs_get(cu); for (nu = nurbs->first; nu; nu = nu->next) { /* only bezier has a normal */ if (nu->type == CU_BEZIER) { - bezt= nu->bezt; - a= nu->pntsu; + bezt = nu->bezt; + a = nu->pntsu; while (a--) { /* exception */ if ((bezt->f1 & SELECT) + (bezt->f2 & SELECT) + (bezt->f3 & SELECT) > SELECT) { @@ -747,7 +747,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], result = ORIENTATION_NORMAL; } } - else if (obedit->type==OB_MBALL) { + else if (obedit->type == OB_MBALL) { #if 0 // XXX /* editmball.c */ MetaElem *ml, *ml_sel = NULL; @@ -784,7 +784,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], bArmature *arm = obedit->data; EditBone *ebone; - for (ebone = arm->edbo->first; ebone; ebone=ebone->next) { + for (ebone = arm->edbo->first; ebone; ebone = ebone->next) { if (arm->layer & ebone->layer) { if (ebone->flag & BONE_SELECTED) { float tmat[3][3]; @@ -819,7 +819,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], } } else if (ob && (ob->mode & OB_MODE_POSE)) { - bArmature *arm= ob->data; + bArmature *arm = ob->data; bPoseChannel *pchan; int totsel; @@ -828,7 +828,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], float imat[3][3], mat[3][3]; /* use channels to get stats */ - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { if (pchan->bone && pchan->bone->flag & BONE_TRANSFORM) { add_v3_v3(normal, pchan->pose_mat[2]); add_v3_v3(plane, pchan->pose_mat[1]); @@ -847,7 +847,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], result = ORIENTATION_EDGE; } } - else if (ob && (ob->mode & (OB_MODE_ALL_PAINT|OB_MODE_PARTICLE_EDIT))) { + else if (ob && (ob->mode & (OB_MODE_ALL_PAINT | OB_MODE_PARTICLE_EDIT))) { /* pass */ } else { @@ -855,10 +855,10 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], ob = OBACT; if (ob && !(ob->flag & SELECT)) ob = NULL; - for (base= scene->base.first; base; base= base->next) { + for (base = scene->base.first; base; base = base->next) { if (TESTBASELIB(v3d, base)) { if (ob == NULL) { - ob= base->object; + ob = base->object; break; } } @@ -876,8 +876,8 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], void ED_getTransformOrientationMatrix(const bContext *C, float orientation_mat[][3], int activeOnly) { - float normal[3]={0.0, 0.0, 0.0}; - float plane[3]={0.0, 0.0, 0.0}; + float normal[3] = {0.0, 0.0, 0.0}; + float plane[3] = {0.0, 0.0, 0.0}; int type; diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index a04ce1ca213..9ebd43cd0d1 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -129,13 +129,13 @@ int BIF_snappingSupported(Object *obedit) int validSnap(TransInfo *t) { - return (t->tsnap.status & (POINT_INIT|TARGET_INIT)) == (POINT_INIT|TARGET_INIT) || - (t->tsnap.status & (MULTI_POINTS|TARGET_INIT)) == (MULTI_POINTS|TARGET_INIT); + return (t->tsnap.status & (POINT_INIT | TARGET_INIT)) == (POINT_INIT | TARGET_INIT) || + (t->tsnap.status & (MULTI_POINTS | TARGET_INIT)) == (MULTI_POINTS | TARGET_INIT); } int activeSnap(TransInfo *t) { - return (t->modifiers & (MOD_SNAP|MOD_SNAP_INVERT)) == MOD_SNAP || (t->modifiers & (MOD_SNAP|MOD_SNAP_INVERT)) == MOD_SNAP_INVERT; + return (t->modifiers & (MOD_SNAP | MOD_SNAP_INVERT)) == MOD_SNAP || (t->modifiers & (MOD_SNAP | MOD_SNAP_INVERT)) == MOD_SNAP_INVERT; } void drawSnapping(const struct bContext *C, TransInfo *t) @@ -144,13 +144,13 @@ void drawSnapping(const struct bContext *C, TransInfo *t) unsigned char col[4], selectedCol[4], activeCol[4]; UI_GetThemeColor3ubv(TH_TRANSFORM, col); - col[3]= 128; + col[3] = 128; UI_GetThemeColor3ubv(TH_SELECT, selectedCol); - selectedCol[3]= 128; + selectedCol[3] = 128; UI_GetThemeColor3ubv(TH_ACTIVE, activeCol); - activeCol[3]= 192; + activeCol[3] = 192; if (t->spacetype == SPACE_VIEW3D) { TransSnapPoint *p; @@ -187,31 +187,31 @@ void drawSnapping(const struct bContext *C, TransInfo *t) glColor4ubv(activeCol); glBegin(GL_LINES); - glVertex3f(t->tsnap.snapPoint[0], t->tsnap.snapPoint[1], t->tsnap.snapPoint[2]); - glVertex3f(t->tsnap.snapPoint[0] + t->tsnap.snapNormal[0], - t->tsnap.snapPoint[1] + t->tsnap.snapNormal[1], - t->tsnap.snapPoint[2] + t->tsnap.snapNormal[2]); - glEnd(); + glVertex3f(t->tsnap.snapPoint[0], t->tsnap.snapPoint[1], t->tsnap.snapPoint[2]); + glVertex3f(t->tsnap.snapPoint[0] + t->tsnap.snapNormal[0], + t->tsnap.snapPoint[1] + t->tsnap.snapNormal[1], + t->tsnap.snapPoint[2] + t->tsnap.snapNormal[2]); + glEnd(); } if (v3d->zbuf) glEnable(GL_DEPTH_TEST); } - else if (t->spacetype==SPACE_IMAGE) { + else if (t->spacetype == SPACE_IMAGE) { /* This will not draw, and Im nor sure why - campbell */ #if 0 float xuser_asp, yuser_asp; int wi, hi; float w, h; - calc_image_view(G.sima, 'f'); // float + calc_image_view(G.sima, 'f'); // float myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax); glLoadIdentity(); ED_space_image_aspect(t->sa->spacedata.first, &xuser_aspx, &yuser_asp); ED_space_image_width(t->sa->spacedata.first, &wi, &hi); - w = (((float)wi)/256.0f)*G.sima->zoom * xuser_asp; - h = (((float)hi)/256.0f)*G.sima->zoom * yuser_asp; + w = (((float)wi) / 256.0f) * G.sima->zoom * xuser_asp; + h = (((float)hi) / 256.0f) * G.sima->zoom * yuser_asp; cpack(0xFFFFFF); glTranslatef(t->tsnap.snapPoint[0], t->tsnap.snapPoint[1], 0.0f); @@ -220,10 +220,10 @@ void drawSnapping(const struct bContext *C, TransInfo *t) setlinestyle(0); cpack(0x0); - fdrawline(-0.020/w, 0, -0.1/w, 0); - fdrawline(0.1/w, 0, .020/w, 0); - fdrawline(0, -0.020/h, 0, -0.1/h); - fdrawline(0, 0.1/h, 0, 0.020/h); + fdrawline(-0.020 / w, 0, -0.1 / w, 0); + fdrawline(0.1 / w, 0, .020 / w, 0); + fdrawline(0, -0.020 / h, 0, -0.1 / h); + fdrawline(0, 0.1 / h, 0, 0.020 / h); glTranslatef(-t->tsnap.snapPoint[0], -t->tsnap.snapPoint[1], 0.0f); setlinestyle(0); @@ -261,12 +261,12 @@ void applyProject(TransInfo *t) float imat[4][4]; int i; - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob = t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; invert_m4_m4(imat, ob->obmat); } - for (i = 0 ; i < t->total; i++, td++) { + for (i = 0; i < t->total; i++, td++) { float iloc[3], loc[3], no[3]; float mval[2]; int dist = 1000; @@ -278,12 +278,12 @@ void applyProject(TransInfo *t) continue; copy_v3_v3(iloc, td->loc); - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob = t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; mul_m4_v3(ob->obmat, iloc); } else if (t->flag & T_OBJECT) { - td->ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + td->ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; BKE_object_handle_update(t->scene, td->ob); copy_v3_v3(iloc, td->ob->obmat[3]); } @@ -387,7 +387,7 @@ static void initSnappingMode(TransInfo *t) /* Edit mode */ if (t->tsnap.applySnap != NULL && // A snapping function actually exist - (obedit != NULL && ELEM4(obedit->type, OB_MESH, OB_ARMATURE, OB_CURVE, OB_LATTICE)) ) // Temporary limited to edit mode meshes, armature, curves + (obedit != NULL && ELEM4(obedit->type, OB_MESH, OB_ARMATURE, OB_CURVE, OB_LATTICE)) ) // Temporary limited to edit mode meshes, armature, curves { /* Exclude editmesh if using proportional edit */ if ((obedit->type == OB_MESH) && (t->flag & T_PROP_EDIT)) { @@ -399,13 +399,13 @@ static void initSnappingMode(TransInfo *t) } /* Particles edit mode*/ else if (t->tsnap.applySnap != NULL && // A snapping function actually exist - (obedit == NULL && BASACT && BASACT->object && BASACT->object->mode & OB_MODE_PARTICLE_EDIT )) + (obedit == NULL && BASACT && BASACT->object && BASACT->object->mode & OB_MODE_PARTICLE_EDIT)) { t->tsnap.modeSelect = SNAP_ALL; } /* Object mode */ else if (t->tsnap.applySnap != NULL && // A snapping function actually exist - (obedit == NULL) ) // Object Mode + (obedit == NULL) ) // Object Mode { t->tsnap.modeSelect = SNAP_NOT_SELECTED; } @@ -438,7 +438,7 @@ void initSnapping(TransInfo *t, wmOperator *op) if (RNA_struct_property_is_set(op->ptr, "snap_point")) { RNA_float_get_array(op->ptr, "snap_point", t->tsnap.snapPoint); - t->tsnap.status |= SNAP_FORCED|POINT_INIT; + t->tsnap.status |= SNAP_FORCED | POINT_INIT; } /* snap align only defined in specific cases */ @@ -497,33 +497,33 @@ static void setSnappingCallback(TransInfo *t) } switch (t->mode) { - case TFM_TRANSLATION: - t->tsnap.applySnap = ApplySnapTranslation; - t->tsnap.distance = TranslationBetween; - break; - case TFM_ROTATION: - t->tsnap.applySnap = ApplySnapRotation; - t->tsnap.distance = RotationBetween; - - // Can't do TARGET_CENTER with rotation, use TARGET_MEDIAN instead - if (t->tsnap.target == SCE_SNAP_TARGET_CENTER) { - t->tsnap.target = SCE_SNAP_TARGET_MEDIAN; - t->tsnap.targetSnap = TargetSnapMedian; - } - break; - case TFM_RESIZE: - t->tsnap.applySnap = ApplySnapResize; - t->tsnap.distance = ResizeBetween; - - // Can't do TARGET_CENTER with resize, use TARGET_MEDIAN instead - if (t->tsnap.target == SCE_SNAP_TARGET_CENTER) { - t->tsnap.target = SCE_SNAP_TARGET_MEDIAN; - t->tsnap.targetSnap = TargetSnapMedian; - } - break; - default: - t->tsnap.applySnap = NULL; - break; + case TFM_TRANSLATION: + t->tsnap.applySnap = ApplySnapTranslation; + t->tsnap.distance = TranslationBetween; + break; + case TFM_ROTATION: + t->tsnap.applySnap = ApplySnapRotation; + t->tsnap.distance = RotationBetween; + + // Can't do TARGET_CENTER with rotation, use TARGET_MEDIAN instead + if (t->tsnap.target == SCE_SNAP_TARGET_CENTER) { + t->tsnap.target = SCE_SNAP_TARGET_MEDIAN; + t->tsnap.targetSnap = TargetSnapMedian; + } + break; + case TFM_RESIZE: + t->tsnap.applySnap = ApplySnapResize; + t->tsnap.distance = ResizeBetween; + + // Can't do TARGET_CENTER with resize, use TARGET_MEDIAN instead + if (t->tsnap.target == SCE_SNAP_TARGET_CENTER) { + t->tsnap.target = SCE_SNAP_TARGET_MEDIAN; + t->tsnap.targetSnap = TargetSnapMedian; + } + break; + default: + t->tsnap.applySnap = NULL; + break; } } @@ -550,7 +550,7 @@ int updateSelectedSnapPoint(TransInfo *t) int closest_dist = 0; int screen_loc[2]; - for ( p = t->tsnap.points.first; p; p = p->next ) { + for (p = t->tsnap.points.first; p; p = p->next) { int dx, dy; int dist; @@ -663,8 +663,8 @@ static float RotationBetween(TransInfo *t, float p1[3], float p2[3]) float angle, start[3], end[3], center[3]; copy_v3_v3(center, t->center); - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob= t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; mul_m4_v3(ob->obmat, center); } @@ -719,8 +719,8 @@ static float ResizeBetween(TransInfo *t, float p1[3], float p2[3]) float d1[3], d2[3], center[3], len_d1; copy_v3_v3(center, t->center); - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob= t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; mul_m4_v3(ob->obmat, center); } @@ -739,7 +739,7 @@ static float ResizeBetween(TransInfo *t, float p1[3], float p2[3]) /********************** CALC **************************/ -static void UNUSED_FUNCTION(CalcSnapGrid)(TransInfo *t, float *UNUSED(vec)) +static void UNUSED_FUNCTION(CalcSnapGrid) (TransInfo * t, float *UNUSED(vec)) { snapGridAction(t, t->tsnap.snapPoint, BIG_GEARS); } @@ -830,9 +830,9 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) if (max_dist != FLT_MAX) { copy_v3_v3(loc, p); /* XXX, is there a correct normal in this case ???, for now just z up */ - no[0]= 0.0; - no[1]= 0.0; - no[2]= 1.0; + no[0] = 0.0; + no[1] = 0.0; + no[2] = 1.0; found = 1; } @@ -861,12 +861,12 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) t->tsnap.status &= ~POINT_INIT; } } - else if (t->spacetype == SPACE_IMAGE && t->obedit != NULL && t->obedit->type==OB_MESH) { + else if (t->spacetype == SPACE_IMAGE && t->obedit != NULL && t->obedit->type == OB_MESH) { /* same as above but for UV's */ - Image *ima= ED_space_image(t->sa->spacedata.first); + Image *ima = ED_space_image(t->sa->spacedata.first); float aspx, aspy, co[2]; - UI_view2d_region_to_view(&t->ar->v2d, t->mval[0], t->mval[1], co, co+1); + UI_view2d_region_to_view(&t->ar->v2d, t->mval[0], t->mval[1], co, co + 1); if (ED_uvedit_nearest_uv(t->scene, t->obedit, ima, co, t->tsnap.snapPoint)) { ED_space_image_uv_aspect(t->sa->spacedata.first, &aspx, &aspy); @@ -888,8 +888,8 @@ static void TargetSnapCenter(TransInfo *t) /* Only need to calculate once */ if ((t->tsnap.status & TARGET_INIT) == 0) { copy_v3_v3(t->tsnap.snapTarget, t->center); - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob= t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; mul_m4_v3(ob->obmat, t->tsnap.snapTarget); } @@ -905,7 +905,7 @@ static void TargetSnapActive(TransInfo *t) TransData *active_td = NULL; int i; - for (td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) { + for (td = t->data, i = 0; i < t->total && td->flag & TD_SELECTED; i++, td++) { if (td->flag & TD_ACTIVE) { active_td = td; break; @@ -915,8 +915,8 @@ static void TargetSnapActive(TransInfo *t) if (active_td) { copy_v3_v3(t->tsnap.snapTarget, active_td->center); - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob= t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; mul_m4_v3(ob->obmat, t->tsnap.snapTarget); } @@ -942,14 +942,14 @@ static void TargetSnapMedian(TransInfo *t) t->tsnap.snapTarget[1] = 0; t->tsnap.snapTarget[2] = 0; - for (td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) { + for (td = t->data, i = 0; i < t->total && td->flag & TD_SELECTED; i++, td++) { add_v3_v3(t->tsnap.snapTarget, td->center); } mul_v3_fl(t->tsnap.snapTarget, 1.0 / i); - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob= t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; mul_m4_v3(ob->obmat, t->tsnap.snapTarget); } @@ -966,7 +966,7 @@ static void TargetSnapClosest(TransInfo *t) /* Object mode */ if (t->flag & T_OBJECT) { int i; - for (td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) { + for (td = t->data, i = 0; i < t->total && td->flag & TD_SELECTED; i++, td++) { struct BoundBox *bb = BKE_object_boundbox_get(td->ob); /* use boundbox if possible */ @@ -1008,14 +1008,14 @@ static void TargetSnapClosest(TransInfo *t) } else { int i; - for (td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) { + for (td = t->data, i = 0; i < t->total && td->flag & TD_SELECTED; i++, td++) { float loc[3]; float dist; copy_v3_v3(loc, td->center); - if (t->flag & (T_EDIT|T_POSE)) { - Object *ob= t->obedit?t->obedit:t->poseobj; + if (t->flag & (T_EDIT | T_POSE)) { + Object *ob = t->obedit ? t->obedit : t->poseobj; mul_m4_v3(ob->obmat, loc); } @@ -1230,10 +1230,10 @@ static int snapArmature(short snap_mode, ARegion *ar, Object *ob, bArmature *arm if (arm->edbo) { EditBone *eBone; - for (eBone=arm->edbo->first; eBone; eBone=eBone->next) { + for (eBone = arm->edbo->first; eBone; eBone = eBone->next) { if (eBone->layer & arm->layer) { /* skip hidden or moving (selected) bones */ - if ((eBone->flag & (BONE_HIDDEN_A|BONE_ROOTSEL|BONE_TIPSEL))==0) { + if ((eBone->flag & (BONE_HIDDEN_A | BONE_ROOTSEL | BONE_TIPSEL)) == 0) { switch (snap_mode) { case SCE_SNAP_MODE_VERTEX: retval |= snapVertex(ar, eBone->head, NULL, obmat, NULL, ray_start, ray_start_local, ray_normal_local, mval, r_loc, NULL, r_dist, r_depth); @@ -1251,10 +1251,10 @@ static int snapArmature(short snap_mode, ARegion *ar, Object *ob, bArmature *arm bPoseChannel *pchan; Bone *bone; - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - bone= pchan->bone; + for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { + bone = pchan->bone; /* skip hidden bones */ - if (bone && !(bone->flag & (BONE_HIDDEN_P|BONE_HIDDEN_PG))) { + if (bone && !(bone->flag & (BONE_HIDDEN_P | BONE_HIDDEN_PG))) { float *head_vec = pchan->pose_head; float *tail_vec = pchan->pose_tail; @@ -1313,22 +1313,22 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh switch (snap_mode) { case SCE_SNAP_MODE_FACE: { -#ifdef USE_BVH_FACE_SNAP // Added for durian +#ifdef USE_BVH_FACE_SNAP // Added for durian BVHTreeRayHit hit; BVHTreeFromMesh treeData; /* local scale in normal direction */ float local_scale = len_v3(ray_normal_local); - treeData.em_evil= em; + treeData.em_evil = em; bvhtree_from_mesh_faces(&treeData, dm, 0.0f, 4, 6); hit.index = -1; hit.dist = *r_depth * (*r_depth == FLT_MAX ? 1.0f : local_scale); if (treeData.tree && BLI_bvhtree_ray_cast(treeData.tree, ray_start_local, ray_normal_local, 0.0f, &hit, treeData.raycast_callback, &treeData) != -1) { - if (hit.dist/local_scale <= *r_depth) { - *r_depth= hit.dist/local_scale; + if (hit.dist / local_scale <= *r_depth) { + *r_depth = hit.dist / local_scale; copy_v3_v3(r_loc, hit.co); copy_v3_v3(r_no, hit.no); @@ -1356,7 +1356,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh EDBM_index_arrays_init(em, 0, 0, 1); } - for ( i = 0; i < totface; i++) { + for (i = 0; i < totface; i++) { BMFace *efa = NULL; MFace *f = faces + i; @@ -1384,7 +1384,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh BMLoop *l; l = BM_iter_new(&iter, em->bm, BM_LOOPS_OF_FACE, efa); - for ( ; l; l=BM_iter_step(&iter)) { + for (; l; l = BM_iter_step(&iter)) { if (BM_elem_flag_test(l->v, BM_ELEM_SELECT)) { test = 0; break; @@ -1430,7 +1430,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh EDBM_index_arrays_init(em, 1, 0, 0); } - for ( i = 0; i < totvert; i++) { + for (i = 0; i < totvert; i++) { BMVert *eve = NULL; MVert *v = verts + i; @@ -1481,7 +1481,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh EDBM_index_arrays_init(em, 0, 1, 0); } - for ( i = 0; i < totedge; i++) { + for (i = 0; i < totedge; i++) { BMEdge *eed = NULL; MEdge *e = edges + i; @@ -1502,8 +1502,8 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh eed = EDBM_edge_at_index(em, index); if (eed && (BM_elem_flag_test(eed, BM_ELEM_HIDDEN) || - BM_elem_flag_test(eed->v1, BM_ELEM_SELECT) || - BM_elem_flag_test(eed->v2, BM_ELEM_SELECT))) + BM_elem_flag_test(eed->v1, BM_ELEM_SELECT) || + BM_elem_flag_test(eed->v2, BM_ELEM_SELECT))) { test = 0; } @@ -1531,7 +1531,7 @@ static int snapObject(Scene *scene, ARegion *ar, Object *ob, int editobject, flo const float ray_start[3], const float ray_normal[3], const float mval[2], float r_loc[3], float r_no[3], int *r_dist, float *r_depth) { - ToolSettings *ts= scene->toolsettings; + ToolSettings *ts = scene->toolsettings; int retval = 0; if (ob->type == OB_MESH) { @@ -1580,18 +1580,18 @@ static int snapObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, c * * To solve that problem, we do it first as an exception. * */ - base= BASACT; + base = BASACT; if (base && base->object && base->object->mode & OB_MODE_PARTICLE_EDIT) { Object *ob = base->object; retval |= snapObject(scene, ar, ob, 0, ob->obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist, &depth); } - for ( base = FIRSTBASE; base != NULL; base = base->next ) { - if ( (BASE_VISIBLE(v3d, base)) && - (base->flag & (BA_HAS_RECALC_OB|BA_HAS_RECALC_DATA)) == 0 && + for (base = FIRSTBASE; base != NULL; base = base->next) { + if ((BASE_VISIBLE(v3d, base)) && + (base->flag & (BA_HAS_RECALC_OB | BA_HAS_RECALC_DATA)) == 0 && - ( (mode == SNAP_NOT_SELECTED && (base->flag & (SELECT|BA_WAS_SEL)) == 0) || - (ELEM(mode, SNAP_ALL, SNAP_NOT_OBEDIT) && base != BASACT)) ) + ((mode == SNAP_NOT_SELECTED && (base->flag & (SELECT | BA_WAS_SEL)) == 0) || + (ELEM(mode, SNAP_ALL, SNAP_NOT_OBEDIT) && base != BASACT))) { Object *ob = base->object; @@ -1719,7 +1719,7 @@ static int peelDerivedMesh(Object *ob, DerivedMesh *dm, float obmat[][4], MFace *faces = dm->getTessFaceArray(dm); int i; - for ( i = 0; i < totface; i++) { + for (i = 0; i < totface; i++) { MFace *f = faces + i; float lambda; int result; @@ -1837,7 +1837,7 @@ static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, L if (ob->type == OB_MESH) { int val = 0; - if (ob != obedit && ((mode == SNAP_NOT_SELECTED && (base->flag & (SELECT|BA_WAS_SEL)) == 0) || ELEM(mode, SNAP_ALL, SNAP_NOT_OBEDIT))) { + if (ob != obedit && ((mode == SNAP_NOT_SELECTED && (base->flag & (SELECT | BA_WAS_SEL)) == 0) || ELEM(mode, SNAP_ALL, SNAP_NOT_OBEDIT))) { DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH); val = peelDerivedMesh(ob, dm, ob->obmat, ray_start, ray_normal, mval, depth_peels); @@ -1918,7 +1918,7 @@ static void applyGrid(TransInfo *t, float *val, int max_index, float fac[3], Gea if (max_index > 2) { printf("applyGrid: invalid index %d, clamping\n", max_index); - max_index= 2; + max_index = 2; } // Early bailing out if no need to snap @@ -1926,11 +1926,11 @@ static void applyGrid(TransInfo *t, float *val, int max_index, float fac[3], Gea return; /* evil hack - snapping needs to be adapted for image aspect ratio */ - if ((t->spacetype==SPACE_IMAGE) && (t->mode==TFM_TRANSLATION)) { - ED_space_image_uv_aspect(t->sa->spacedata.first, asp, asp+1); + if ((t->spacetype == SPACE_IMAGE) && (t->mode == TFM_TRANSLATION)) { + ED_space_image_uv_aspect(t->sa->spacedata.first, asp, asp + 1); } - for (i=0; i<=max_index; i++) { - val[i]= fac[action]*asp[i]*(float)floor(val[i]/(fac[action]*asp[i]) +0.5f); + for (i = 0; i <= max_index; i++) { + val[i] = fac[action] * asp[i] * (float)floor(val[i] / (fac[action] * asp[i]) + 0.5f); } } diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c index e7a9ab9ca73..65d23641ab5 100644 --- a/source/blender/editors/util/undo.c +++ b/source/blender/editors/util/undo.c @@ -138,20 +138,20 @@ static int ed_undo_step(bContext *C, int step, const char *undoname) return ED_undo_gpencil_step(C, step, undoname); } - if (sa && sa->spacetype == SPACE_IMAGE) { + if (sa && (sa->spacetype == SPACE_IMAGE)) { SpaceImage *sima = (SpaceImage *)sa->spacedata.first; - if ((obact && obact->mode & OB_MODE_TEXTURE_PAINT) || sima->flag & SI_DRAWTOOL) { + if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->flag & SI_DRAWTOOL)) { if (!ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step, undoname) && undoname) if (U.uiflag & USER_GLOBALUNDO) BKE_undo_name(C, undoname); - + WM_event_add_notifier(C, NC_WINDOW, NULL); return OPERATOR_FINISHED; } } - if (sa && sa->spacetype == SPACE_TEXT) { + if (sa && (sa->spacetype == SPACE_TEXT)) { ED_text_undo_step(C, step); } else if (obedit) { @@ -160,7 +160,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname) undo_editmode_name(C, undoname); else undo_editmode_step(C, step); - + WM_event_add_notifier(C, NC_GEOM | ND_DATA, NULL); } } @@ -195,7 +195,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname) BKE_undo_name(C, undoname); else BKE_undo_step(C, step); - + WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, CTX_data_scene(C)); } @@ -238,12 +238,12 @@ int ED_undo_valid(const bContext *C, const char *undoname) if (sa && sa->spacetype == SPACE_IMAGE) { SpaceImage *sima = (SpaceImage *)sa->spacedata.first; - if ((obact && obact->mode & OB_MODE_TEXTURE_PAINT) || sima->flag & SI_DRAWTOOL) { + if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->flag & SI_DRAWTOOL)) { return 1; } } - if (sa && sa->spacetype == SPACE_TEXT) { + if (sa && (sa->spacetype == SPACE_TEXT)) { return 1; } else if (obedit) { @@ -256,11 +256,11 @@ int ED_undo_valid(const bContext *C, const char *undoname) /* if below tests fail, global undo gets executed */ if (obact && obact->mode & OB_MODE_TEXTURE_PAINT) { - if (ED_undo_paint_valid(UNDO_PAINT_IMAGE, undoname) ) + if (ED_undo_paint_valid(UNDO_PAINT_IMAGE, undoname)) return 1; } else if (obact && obact->mode & OB_MODE_SCULPT) { - if (ED_undo_paint_valid(UNDO_PAINT_MESH, undoname) ) + if (ED_undo_paint_valid(UNDO_PAINT_MESH, undoname)) return 1; } else if (obact && obact->mode & OB_MODE_PARTICLE_EDIT) { @@ -276,7 +276,7 @@ int ED_undo_valid(const bContext *C, const char *undoname) static int ed_undo_exec(bContext *C, wmOperator *UNUSED(op)) { - /* "last operator" should disappear, later we can tie ths with undo stack nicer */ + /* "last operator" should disappear, later we can tie this with undo stack nicer */ WM_operator_stack_clear(CTX_wm_manager(C)); return ed_undo_step(C, 1, NULL); } diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 53331dbe079..b15df9c3e89 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -3784,7 +3784,8 @@ void ED_keymap_uvedit(wmKeyConfig *keyconf) RNA_string_set(kmi->ptr, "data_path", "space_data.uv_editor.pivot_point"); RNA_string_set(kmi->ptr, "value", "CURSOR"); - ED_object_generic_keymap(keyconf, keymap, 2); + ED_keymap_proportional_cycle(keyconf, keymap); + ED_keymap_proportional_editmode(keyconf, keymap, FALSE); transform_keymap_for_space(keyconf, keymap, SPACE_IMAGE); } diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c index 4a6de737e7a..87ff36ebf27 100644 --- a/source/blender/editors/uvedit/uvedit_parametrizer.c +++ b/source/blender/editors/uvedit/uvedit_parametrizer.c @@ -706,7 +706,7 @@ static void p_face_restore_uvs(PFace *f) /* Construction (use only during construction, relies on u.key being set */ -static PVert *p_vert_add(PHandle *handle, PHashKey key, float *co, PEdge *e) +static PVert *p_vert_add(PHandle *handle, PHashKey key, const float co[3], PEdge *e) { PVert *v = (PVert *)BLI_memarena_alloc(handle->arena, sizeof *v); copy_v3_v3(v->co, co); @@ -719,7 +719,7 @@ static PVert *p_vert_add(PHandle *handle, PHashKey key, float *co, PEdge *e) return v; } -static PVert *p_vert_lookup(PHandle *handle, PHashKey key, float *co, PEdge *e) +static PVert *p_vert_lookup(PHandle *handle, PHashKey key, const float co[3], PEdge *e) { PVert *v = (PVert *)phash_lookup(handle->hash_verts, key); @@ -3596,7 +3596,7 @@ typedef struct SmoothNode { int axis, ntri; } SmoothNode; -static void p_barycentric_2d(float *v1, float *v2, float *v3, float *p, float *b) +static void p_barycentric_2d(const float v1[2], const float v2[2], const float v3[2], const float p[2], float b[3]) { float a[2], c[2], h[2], div; @@ -3624,7 +3624,7 @@ static void p_barycentric_2d(float *v1, float *v2, float *v3, float *p, float *b } } -static PBool p_triangle_inside(SmoothTriangle *t, float *co) +static PBool p_triangle_inside(SmoothTriangle *t, float co[2]) { float b[3]; @@ -3706,7 +3706,7 @@ static void p_node_delete(SmoothNode *node) MEM_freeN(node->tri); } -static PBool p_node_intersect(SmoothNode *node, float *co) +static PBool p_node_intersect(SmoothNode *node, float co[2]) { int i; @@ -3726,7 +3726,7 @@ static PBool p_node_intersect(SmoothNode *node, float *co) } -/* smooothing */ +/* smoothing */ static int p_compare_float(const void *a, const void *b) { diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index c8dbee65f6a..0930edbe46d 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -98,19 +98,14 @@ static int ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit) SpaceLink *slink; SpaceImage *sima; - if (ED_uvedit_test(obedit)) { + if (ED_uvedit_test(obedit)) return 1; - } - if (em && em->bm->totface && !CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY)) { - BM_data_layer_add(em->bm, &em->bm->pdata, CD_MTEXPOLY); - BM_data_layer_add(em->bm, &em->bm->ldata, CD_MLOOPUV); - ED_mesh_uv_loop_reset_ex(C, obedit->data, 0); - } + if (em && em->bm->totface && !CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY)) + ED_mesh_uv_texture_add(C, obedit->data, NULL, TRUE); - if (!ED_uvedit_test(obedit)) { + if (!ED_uvedit_test(obedit)) return 0; - } ima = CTX_data_edit_image(C); |